#include "sprite.h"
#include "sprite_manager.h"
#include "screen/drawing_context.h"
+#include "globals.h"
+
+/** 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);
}
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;
}
}
#include "serializable.h"
#include "timer.h"
-#define ANIM_TIME 1500
-
class Sprite;
class LispReader;
+/** data images */
+#define DOOR_OPENING_TIME 1500
+#define DOOR_OPENING_FRAMES 8
+extern Sprite* door;
+extern Surface* door_opening[DOOR_OPENING_FRAMES];
+
class Door : public InteractiveObject, public Serializable
{
public:
virtual void interaction(InteractionType type);
private:
- Sprite* sprite;
std::string target_sector;
std::string target_spawnpoint;
Timer animation_timer; //Used for door animation
#include "sprite_manager.h"
#include "sound_manager.h"
#include "setup.h"
+#include "door.h"
Surface* img_waves[3];
Surface* img_water;
/* Objects */
load_object_gfx();
+ // load the door object graphics:
+ door = sprite_manager->load("door");
+ for (int i = 0; i < DOOR_OPENING_FRAMES; i++)
+ {
+ sprintf(img_name, "%s/images/shared/door-%i.png", datadir.c_str(), i+1);
+ door_opening[i] = new Surface(img_name, false);
+ }
+
/* Distros: */
img_distro[0] = new Surface(datadir + "/images/tilesets/coin1.png",
USE_ALPHA);
delete growingtux_right[i];
}
+ // door game object:
+
+ for (int i = 0; i < DOOR_OPENING_FRAMES; i++)
+ delete door_opening[i];
+
for (i = 0; i < NUM_SOUNDS; i++)
free_chunk(sounds[i]);