Issue #89: Respawn Tux at original, not current position. This is because upon restar...
authorChristoph Sommer <mail@christoph-sommer.de>
Sat, 20 Jan 2007 00:48:21 +0000 (00:48 +0000)
committerChristoph Sommer <mail@christoph-sommer.de>
Sat, 20 Jan 2007 00:48:21 +0000 (00:48 +0000)
SVN-Revision: 4608

src/object/firefly.cpp
src/object/firefly.hpp

index ed10dae..dc537cc 100644 (file)
@@ -33,6 +33,7 @@
 Firefly::Firefly(const lisp::Lisp& lisp)
        : MovingSprite(lisp, "images/objects/resetpoints/default-resetpoint.sprite", LAYER_TILES, COLGROUP_TOUCHABLE), activated(false)
 {
+  initial_position = get_pos();
   if( !lisp.get( "sprite", sprite_name ) ){
     reactivate();
     return;
@@ -51,7 +52,7 @@ Firefly::Firefly(const lisp::Lisp& lisp)
 void 
 Firefly::reactivate()
 {
-  if(GameSession::current()->get_reset_point_pos() == get_pos()){
+  if(GameSession::current()->get_reset_point_pos() == initial_position){
     // TODO: && GameSession::current()->get_reset_point_sectorname() ==  <sector this firefly is in>
     // GameSession::current()->get_current_sector()->get_name() is not yet initialized.
     // Worst case a resetpoint in a different sector at the same position as the real
@@ -94,7 +95,7 @@ Firefly::collision(GameObject& other, const CollisionHit& )
     // TODO play sound
     sprite->set_action("ringing");
     GameSession::current()->set_reset_point(Sector::current()->get_name(),
-        get_pos());
+        initial_position);
   }
 
   return ABORT_MOVE;
index 889afe3..6325087 100644 (file)
@@ -40,6 +40,7 @@ public:
 
 private:
   bool activated;
+  Vector initial_position; /**< position as in level file. This is where Tux will have to respawn, as the level is reset every time */
   void reactivate();
 };