X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fdoor.cpp;h=4feec95d5a2459802f5e82d4a9bba9b1c0455b3b;hb=c06f17a80ab84d8a26bf7c7bb381ad3f15596de8;hp=dd97b5a4ca91f03eb1435d3d76642482e4a49cd2;hpb=cc44de029066f2cfec1e6c50500f099443586293;p=supertux.git diff --git a/src/door.cpp b/src/door.cpp index dd97b5a4c..4feec95d5 100644 --- a/src/door.cpp +++ b/src/door.cpp @@ -18,13 +18,20 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "door.h" -#include "lispreader.h" -#include "lispwriter.h" +#include "utils/lispreader.h" +#include "utils/lispwriter.h" #include "gameloop.h" #include "resources.h" -#include "sprite.h" -#include "sprite_manager.h" -#include "screen/drawing_context.h" +#include "special/sprite.h" +#include "special/sprite_manager.h" +#include "video/drawing_context.h" +#include "app/globals.h" + +using namespace SuperTux; + +/** data images */ +Sprite* door; +Surface* door_opening[DOOR_OPENING_FRAMES]; Door::Door(LispReader& reader) { @@ -36,9 +43,23 @@ Door::Door(LispReader& reader) reader.read_string("sector", target_sector); reader.read_string("spawnpoint", target_spawnpoint); - sprite = sprite_manager->load("door"); animation_timer.init(true); door_activated = false; + + animation_timer.init(true); +} + +Door::Door(int x, int y) +{ +area.x = x; +area.y = y; +area.width = 32; +area.height = 64; + +animation_timer.init(true); +door_activated = false; + +animation_timer.init(true); } void @@ -69,13 +90,16 @@ Door::action(float ) void Door::draw(DrawingContext& context) { - sprite->draw(context, Vector(area.x, area.y), LAYER_TILES); + if(animation_timer.check()) + context.draw_surface(door_opening[(animation_timer.get_gone() * DOOR_OPENING_FRAMES) / + DOOR_OPENING_TIME], Vector(area.x, area.y - (door_opening[0]->h/2)), LAYER_TILES); + else + door->draw(context, Vector(area.x, area.y), LAYER_TILES); //Check if door animation is complete //TODO: Move this out of the "draw" method as this is extremely dirty :) if ((!animation_timer.check()) && (door_activated)) { door_activated = false; - sprite = sprite_manager->load("door"); GameSession::current()->respawn(target_sector, target_spawnpoint); } } @@ -87,9 +111,7 @@ Door::interaction(InteractionType type) //TODO: Resetting the animation doesn't work correctly // Tux and badguys should stop moving while the door is opening if(type == INTERACTION_ACTIVATE) { - sprite = sprite_manager->load("openingdoor"); - sprite->reset(); - animation_timer.start(ANIM_TIME); + animation_timer.start(DOOR_OPENING_TIME); door_activated = true; } }