// 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)
{
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
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);
}
}
//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;
}
}