found some values for tux' flapping speed that feel okay when running (still a little...
[supertux.git] / src / door.cpp
index dd97b5a..4feec95 100644 (file)
 //  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;
   }
 }