Fixed problems with Rockets and Cannons sometimes reversing direction on
authorChristoph Sommer <mail@christoph-sommer.de>
Wed, 5 Jul 2006 23:34:08 +0000 (23:34 +0000)
committerChristoph Sommer <mail@christoph-sommer.de>
Wed, 5 Jul 2006 23:34:08 +0000 (23:34 +0000)
re-activation by making the start direction a property of Badguy

SVN-Revision: 3910

37 files changed:
src/badguy/badguy.cpp
src/badguy/badguy.hpp
src/badguy/bomb.cpp
src/badguy/bouncing_snowball.cpp
src/badguy/bouncing_snowball.hpp
src/badguy/dart.cpp
src/badguy/dart.hpp
src/badguy/darttrap.cpp
src/badguy/darttrap.hpp
src/badguy/dispenser.cpp
src/badguy/dispenser.hpp
src/badguy/igel.cpp
src/badguy/igel.hpp
src/badguy/mrbomb.cpp
src/badguy/mrbomb.hpp
src/badguy/mriceblock.cpp
src/badguy/mriceblock.hpp
src/badguy/mrrocket.cpp
src/badguy/mrrocket.hpp
src/badguy/mrtree.cpp
src/badguy/mrtree.hpp
src/badguy/poisonivy.cpp
src/badguy/poisonivy.hpp
src/badguy/rocketexplosion.cpp
src/badguy/skullyhop.cpp
src/badguy/skullyhop.hpp
src/badguy/snail.cpp
src/badguy/snail.hpp
src/badguy/snowball.cpp
src/badguy/snowball.hpp
src/badguy/spiky.cpp
src/badguy/spiky.hpp
src/badguy/sspiky.cpp
src/badguy/sspiky.hpp
src/badguy/zeekling.cpp
src/badguy/zeekling.hpp
src/direction.hpp

index 38d077b..755723b 100644 (file)
@@ -34,7 +34,16 @@ static const float X_OFFSCREEN_DISTANCE = 1600;
 static const float Y_OFFSCREEN_DISTANCE = 1200;
 
 BadGuy::BadGuy(const Vector& pos, const std::string& sprite_name, int layer)
-  : MovingSprite(pos, sprite_name, layer, COLGROUP_DISABLED), countMe(true), dir(LEFT), state(STATE_INIT) 
+  : MovingSprite(pos, sprite_name, layer, COLGROUP_DISABLED), countMe(true), dir(LEFT), start_dir(AUTO), state(STATE_INIT) 
+{
+  start_position = bbox.p1;
+
+  sound_manager->preload("sounds/squish.wav");
+  sound_manager->preload("sounds/fall.wav");
+}
+
+BadGuy::BadGuy(const Vector& pos, Direction direction, const std::string& sprite_name, int layer)
+  : MovingSprite(pos, sprite_name, layer, COLGROUP_DISABLED), countMe(true), dir(direction), start_dir(direction), state(STATE_INIT) 
 {
   start_position = bbox.p1;
 
@@ -43,10 +52,15 @@ BadGuy::BadGuy(const Vector& pos, const std::string& sprite_name, int layer)
 }
 
 BadGuy::BadGuy(const lisp::Lisp& reader, const std::string& sprite_name, int layer)
-  : MovingSprite(reader, sprite_name, layer, COLGROUP_DISABLED), countMe(true), dir(LEFT), state(STATE_INIT) 
+  : MovingSprite(reader, sprite_name, layer, COLGROUP_DISABLED), countMe(true), dir(LEFT), start_dir(AUTO), state(STATE_INIT) 
 {
   start_position = bbox.p1;
 
+  std::string dir_str = "auto";
+  reader.get("direction", dir_str);
+  start_dir = str2dir( dir_str );
+  dir = start_dir;
+
   sound_manager->preload("sounds/squish.wav");
   sound_manager->preload("sounds/fall.wav");
 }
@@ -105,8 +119,8 @@ BadGuy::update(float elapsed_time)
 Direction
 BadGuy::str2dir( std::string dir_str )
 {
-  if( dir_str == "auto" || dir_str == "" )
-    return dir;
+  if( dir_str == "auto" )
+    return AUTO;
   if( dir_str == "left" )
     return LEFT;
   if( dir_str == "right" ) 
@@ -322,7 +336,7 @@ BadGuy::try_activate()
       start_position.x < scroll_x - bbox.get_width() &&
       start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
       start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) {
-    dir = RIGHT;
+    if (start_dir != AUTO) dir = start_dir; else dir = RIGHT;
     set_state(STATE_ACTIVE);
     activate();
   //Badguy right of screen
@@ -330,7 +344,7 @@ BadGuy::try_activate()
       start_position.x < scroll_x + SCREEN_WIDTH + X_OFFSCREEN_DISTANCE &&
       start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
       start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) {
-    dir = LEFT;
+    if (start_dir != AUTO) dir = start_dir; else dir = LEFT;
     set_state(STATE_ACTIVE);
     activate();
   //Badguy over or under screen
@@ -340,7 +354,7 @@ BadGuy::try_activate()
          start_position.y < scroll_y + SCREEN_HEIGHT + Y_OFFSCREEN_DISTANCE) ||
         (start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
          start_position.y < scroll_y - bbox.get_height()  ))) {
-     dir = start_position.x < scroll_x ? RIGHT : LEFT;
+     if (start_dir != AUTO) dir = start_dir; else dir = start_position.x < scroll_x ? RIGHT : LEFT;
      set_state(STATE_ACTIVE);
      activate();
   } else if(state == STATE_INIT
@@ -348,7 +362,7 @@ BadGuy::try_activate()
       && start_position.x < scroll_x + X_OFFSCREEN_DISTANCE
       && start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE
       && start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) {
-    dir = LEFT;
+    if (start_dir != AUTO) dir = start_dir; else dir = LEFT;
     set_state(STATE_ACTIVE);
     activate();
   } 
index ebcee69..0b8d8de 100644 (file)
@@ -42,6 +42,7 @@ class BadGuy : public MovingSprite, public Serializable
 {
 public:
   BadGuy(const Vector& pos, const std::string& sprite_name, int layer = LAYER_OBJECTS);
+  BadGuy(const Vector& pos, Direction direction, const std::string& sprite_name, int layer = LAYER_OBJECTS);
   BadGuy(const lisp::Lisp& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS);
 
   /** Called when the badguy is drawn. The default implementation simply draws
@@ -154,9 +155,17 @@ protected:
 
   Vector start_position;
 
+  /**
+   * The direction we currently face in
+   */
   Direction dir;
 
   /**
+   * The direction we initially faced in
+   */
+  Direction start_dir;
+
+  /**
    *  Get Direction from String.
    */ 
   Direction str2dir( std::string dir_str );
index d7e4caa..4135159 100644 (file)
 #include "object/sprite_particle.hpp"
 
 Bomb::Bomb(const Vector& pos, Direction dir)
-       : BadGuy(pos, "images/creatures/mr_cherry/cherry.sprite")
+       : BadGuy(pos, dir, "images/creatures/mr_cherry/cherry.sprite")
 {
   state = STATE_TICKING;
-  this->dir = dir;
   set_action(dir == LEFT ? "ticking-left" : "ticking-right", 1);
   countMe = false;
 
index 5fce3cf..c0af31d 100644 (file)
@@ -27,19 +27,11 @@ static const float WALKSPEED = 80;
 BouncingSnowball::BouncingSnowball(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/bouncing_snowball/bouncing_snowball.sprite")
 { 
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){ 
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 BouncingSnowball::BouncingSnowball(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/bouncing_snowball/bouncing_snowball.sprite")
+       : BadGuy(pos, d, "images/creatures/bouncing_snowball/bouncing_snowball.sprite")
 {
-   set_direction = true;
-   initial_direction = d;
 }
 
 void
@@ -47,7 +39,6 @@ BouncingSnowball::write(lisp::Writer& writer)
 {
   writer.start_list("bouncingsnowball");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -57,7 +48,6 @@ BouncingSnowball::write(lisp::Writer& writer)
 void
 BouncingSnowball::activate()
 {
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
 }
index 6ba417d..1bcb8ab 100644 (file)
@@ -37,9 +37,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index 5e70e26..cd251c8 100644 (file)
@@ -29,7 +29,7 @@ namespace {
 static const std::string SOUNDFILE = "sounds/flame.wav";
 
 Dart::Dart(const lisp::Lisp& reader) 
-       : BadGuy(reader, "images/creatures/dart/dart.sprite"), set_direction(false), parent(0)
+       : BadGuy(reader, "images/creatures/dart/dart.sprite"), parent(0)
 {
   physic.enable_gravity(false);
   countMe = false;
@@ -38,7 +38,7 @@ Dart::Dart(const lisp::Lisp& reader)
 }
 
 Dart::Dart(const Vector& pos, Direction d, const BadGuy* parent = 0)
-       : BadGuy(pos, "images/creatures/dart/dart.sprite"), set_direction(true), initial_direction(d), parent(parent)
+       : BadGuy(pos, d, "images/creatures/dart/dart.sprite"), parent(parent)
 {
   physic.enable_gravity(false);
   countMe = false;
@@ -47,7 +47,7 @@ Dart::Dart(const Vector& pos, Direction d, const BadGuy* parent = 0)
 }
 
 Dart::Dart(const Dart& other)
-       : BadGuy(other), set_direction(other.set_direction), initial_direction(other.initial_direction), parent(other.parent)
+       : BadGuy(other), parent(other.parent)
 {
   sound_source.reset(sound_manager->create_sound_source(SOUNDFILE));
   sound_manager->preload("sounds/darthit.wav");
@@ -79,8 +79,7 @@ Dart::write(lisp::Writer& writer)
 
 void
 Dart::activate()
-{  
-  if (set_direction) dir = initial_direction;
+{ 
   physic.set_velocity_x(dir == LEFT ? -::SPEED : ::SPEED);
   sprite->set_action(dir == LEFT ? "flying-left" : "flying-right");
 
index 1c6a3d3..670a0d6 100644 (file)
@@ -49,8 +49,6 @@ public:
   virtual bool updatePointers(const GameObject* from_object, GameObject* to_object);
 
 protected:
-  bool set_direction;
-  Direction initial_direction;
   const BadGuy* parent; /**< collisions with this BadGuy will be ignored */
   std::auto_ptr<SoundSource> sound_source; /**< SoundSource for ambient sound */
 };
index 6add158..0cd6249 100644 (file)
@@ -27,12 +27,8 @@ namespace {
 }
 
 DartTrap::DartTrap(const lisp::Lisp& reader) 
-       : BadGuy(reader, "images/creatures/darttrap/darttrap.sprite"), set_direction(true), initial_direction(LEFT), initial_delay(0), fire_delay(2), ammo(-1), state(IDLE)
+       : BadGuy(reader, "images/creatures/darttrap/darttrap.sprite"), initial_delay(0), fire_delay(2), ammo(-1), state(IDLE)
 {
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    initial_direction = str2dir( direction );
-  }
   reader.get("initial-delay", initial_delay);
   reader.get("fire-delay", fire_delay);
   reader.get("ammo", ammo);
@@ -44,7 +40,6 @@ void
 DartTrap::write(lisp::Writer& writer)
 {
   writer.start_list("darttrap");
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
   writer.write_float("initial-delay", initial_delay);
@@ -56,7 +51,6 @@ DartTrap::write(lisp::Writer& writer)
 void
 DartTrap::activate()
 {
-  if (set_direction) dir = initial_direction;
   state = IDLE;
   sprite->set_action(dir == LEFT ? "idle-left" : "idle-right");
 
index 09ac5fd..b891de4 100644 (file)
@@ -46,15 +46,12 @@ protected:
   void load(); /**< load a shot */
   void fire(); /**< fire a shot */
   
-  bool set_direction;
-  Direction initial_direction;  
   float initial_delay; /**< time to wait before firing first shot */
   float fire_delay; /**< reload time */
   int ammo; /**< ammo left (-1 means unlimited) */
 
   State state; /**< current state */
   Timer fire_timer; /**< time until new shot is fired */
-  std::string direction;
 };
 
 #endif
index b06c18d..1bcf021 100644 (file)
 Dispenser::Dispenser(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/dispenser/dispenser.sprite")
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-    dir = str2dir( direction );
-  }
   reader.get("cycle", cycle);
   reader.get("badguy", badguy);
   if (badguy == "mrrocket") {
@@ -55,7 +48,6 @@ Dispenser::write(lisp::Writer& writer)
 {
   writer.start_list("dispenser");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
   writer.write_float("cycle", cycle);
@@ -95,9 +87,6 @@ Dispenser::active_update(float )
 void
 Dispenser::launch_badguy()
 {
-  if( set_direction ){
-    dir = initial_direction;
-  }
   //FIXME: Does is_offscreen() work right here?
   if (!is_offscreen()) {
     if (badguy == "snowball")
index 2ba8ba2..f79e8e6 100644 (file)
@@ -40,9 +40,6 @@ protected:
   float cycle;
   std::string badguy;
   Timer dispense_timer;
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index 78d067a..f7d5e1d 100644 (file)
@@ -1,4 +1,4 @@
-//  $Id: igel.cpp 3478 2006-04-30 23:14:15Z sommer $
+//  $Id$
 //
 //  SuperTux - Badguy "Igel"
 //  Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
@@ -33,14 +33,11 @@ namespace {
 Igel::Igel(const lisp::Lisp& reader)
   : BadGuy(reader, "images/creatures/igel/igel.sprite"), state(STATE_NORMAL)
 {
-  set_direction = false;
 }
 
 Igel::Igel(const Vector& pos, Direction d)
-  : BadGuy(pos, "images/creatures/igel/igel.sprite"), state(STATE_NORMAL)
+  : BadGuy(pos, d, "images/creatures/igel/igel.sprite"), state(STATE_NORMAL)
 {
-  set_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -57,8 +54,6 @@ Igel::write(lisp::Writer& writer)
 void
 Igel::activate()
 {
-  if (set_direction) {dir = initial_direction;}
-
   be_normal();
 }
 
index bdb7b75..a824620 100644 (file)
@@ -1,4 +1,4 @@
-//  $Id: igel.hpp 3452 2006-04-27 18:19:15Z sommer $
+//  $Id$
 //
 //  SuperTux - Badguy "Igel"
 //  Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
@@ -54,8 +54,6 @@ private:
   };
   State state;
   Timer turn_recover_timer; /**< wait time until we will turn around again when shot at */
-  bool set_direction;
-  Direction initial_direction;  
 };
 
 #endif
index 0421edd..80d4c54 100644 (file)
@@ -27,19 +27,11 @@ static const float WALKSPEED = 80;
 MrBomb::MrBomb(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/mr_cherry/mr_cherry.sprite")
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 MrBomb::MrBomb(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/mr_cherry/mr_cherry.sprite")
+       : BadGuy(pos, d, "images/creatures/mr_cherry/mr_cherry.sprite")
 {
-  set_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -47,7 +39,6 @@ MrBomb::write(lisp::Writer& writer)
 {
   writer.start_list("mrbomb");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -57,7 +48,6 @@ MrBomb::write(lisp::Writer& writer)
 void
 MrBomb::activate()
 {
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
 }
index 4759f8b..6e49d0b 100644 (file)
@@ -39,9 +39,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index ca0431a..95fd17f 100644 (file)
@@ -31,22 +31,14 @@ namespace {
 MrIceBlock::MrIceBlock(const lisp::Lisp& reader)
   : BadGuy(reader, "images/creatures/mr_iceblock/mr_iceblock.sprite"), ice_state(ICESTATE_NORMAL), squishcount(0)
 {
-  reader.get("direction", direction);
-  set_direction = false;
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
   sound_manager->preload("sounds/iceblock_bump.wav");
   sound_manager->preload("sounds/stomp.wav");
   sound_manager->preload("sounds/kick.wav");
 }
 
 MrIceBlock::MrIceBlock(const Vector& pos, Direction d)
-  : BadGuy(pos, "images/creatures/mr_iceblock/mr_iceblock.sprite"), ice_state(ICESTATE_NORMAL), squishcount(0)
+  : BadGuy(pos, d, "images/creatures/mr_iceblock/mr_iceblock.sprite"), ice_state(ICESTATE_NORMAL), squishcount(0)
 {
-  set_direction = true;
-  initial_direction = d;
   sound_manager->preload("sounds/iceblock_bump.wav");
   sound_manager->preload("sounds/stomp.wav");
   sound_manager->preload("sounds/kick.wav");
@@ -57,7 +49,6 @@ MrIceBlock::write(lisp::Writer& writer)
 {
   writer.start_list("mriceblock");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -67,10 +58,6 @@ MrIceBlock::write(lisp::Writer& writer)
 void
 MrIceBlock::activate()
 {
-  if (set_direction) {
-    dir = initial_direction;
-  }
-
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
   set_state(ICESTATE_NORMAL);
index ca6c59d..ea55065 100644 (file)
@@ -59,9 +59,6 @@ private:
   IceState ice_state;
   Timer flat_timer;
   int squishcount;
-  bool set_direction;
-  Direction initial_direction;
-  std::string direction;
 };
 
 #endif
index cbe72b5..cfa4faf 100644 (file)
@@ -26,14 +26,11 @@ static const float SPEED = 200;
 MrRocket::MrRocket(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/mr_rocket/mr_rocket.sprite")
 {
-  set_direction = false;
 }
 
 MrRocket::MrRocket(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/mr_rocket/mr_rocket.sprite")
+       : BadGuy(pos, d, "images/creatures/mr_rocket/mr_rocket.sprite")
 {
-  set_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -50,7 +47,6 @@ MrRocket::write(lisp::Writer& writer)
 void
 MrRocket::activate()
 {
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -SPEED : SPEED);
   physic.enable_gravity(false);
   sprite->set_action(dir == LEFT ? "left" : "right");
index 5cb37b7..f756d02 100644 (file)
@@ -39,8 +39,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;
   Timer collision_timer;
 };
 
index 40ed356..14062c2 100644 (file)
@@ -36,13 +36,6 @@ static const float POISONIVY_Y_OFFSET = 24;
 MrTree::MrTree(const lisp::Lisp& reader)
   : BadGuy(reader, "images/creatures/mr_tree/mr_tree.sprite"), mystate(STATE_BIG)
 {
-  reader.get("direction", direction);
-  set_direction = false;
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-    dir = str2dir( direction );
-  }
   sprite->set_action(dir == LEFT ? "large-left" : "large-right");
   sound_manager->preload("sounds/mr_tree.ogg");
   sound_manager->preload("sounds/mr_treehit.ogg");
@@ -53,7 +46,6 @@ MrTree::write(lisp::Writer& writer)
 {
   writer.start_list("mrtree");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -63,9 +55,6 @@ MrTree::write(lisp::Writer& writer)
 void
 MrTree::activate()
 {
-  if( set_direction ){
-      dir = initial_direction;
-  }
   if (mystate == STATE_BIG) {
     physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
     sprite->set_action(dir == LEFT ? "large-left" : "large-right");
@@ -189,7 +178,6 @@ MrTree::collision_solid(GameObject& , const CollisionHit& hit)
     physic.set_velocity_y(0);
   } else {
     dir = dir == LEFT ? RIGHT : LEFT;
-    set_direction = false;
     activate();
   }
 
@@ -201,7 +189,6 @@ MrTree::collision_badguy(BadGuy& , const CollisionHit& hit)
 {
   if(fabsf(hit.normal.x) > .8) { // left or right hit
     dir = dir == LEFT ? RIGHT : LEFT;
-    set_direction = false;
     activate();
   }
 
index 9795a6d..652a00e 100644 (file)
@@ -44,9 +44,6 @@ protected:
   Timer invincible_timer;
 
   bool collision_squished(Player& player);
-  std::string direction;
-  bool set_direction;
-  Direction initial_direction;  
 };
 
 #endif
index dfcfa3d..ae11827 100644 (file)
@@ -28,19 +28,11 @@ static const float WALKSPEED = 80;
 PoisonIvy::PoisonIvy(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/poison_ivy/poison_ivy.sprite")
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 PoisonIvy::PoisonIvy(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/poison_ivy/poison_ivy.sprite")
+       : BadGuy(pos, d, "images/creatures/poison_ivy/poison_ivy.sprite")
 {
-  set_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -48,7 +40,6 @@ PoisonIvy::write(lisp::Writer& writer)
 {
   writer.start_list("poisonivy");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -58,7 +49,6 @@ PoisonIvy::write(lisp::Writer& writer)
 void
 PoisonIvy::activate()
 {
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
 }
index 6ee178d..09b6af6 100644 (file)
@@ -37,9 +37,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index dcc6120..a1497ee 100644 (file)
@@ -24,9 +24,8 @@
 static const float EXPLOSIONTIME = 1;
 
 RocketExplosion::RocketExplosion(const Vector& pos, Direction dir)
-       : BadGuy(pos, "images/creatures/mr_rocket/explosion.sprite")
+       : BadGuy(pos, dir, "images/creatures/mr_rocket/explosion.sprite")
 {
-  this->dir = dir;
   countMe = false;
   explode();
 }
index fb12d75..a5ba2ca 100644 (file)
@@ -32,14 +32,11 @@ namespace {
 SkullyHop::SkullyHop(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/skullyhop/skullyhop.sprite")
 {
-  has_initial_direction = false;
 }
 
 SkullyHop::SkullyHop(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/skullyhop/skullyhop.sprite")
+       : BadGuy(pos, d, "images/creatures/skullyhop/skullyhop.sprite")
 {
-  has_initial_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -54,8 +51,6 @@ SkullyHop::write(lisp::Writer& writer)
 void
 SkullyHop::activate()
 {
-  if (has_initial_direction) dir = initial_direction;
-
   // initial state is JUMPING, because we might start airborne
   state = JUMPING;
   sprite->set_action(dir == LEFT ? "jumping-left" : "jumping-right");
index b3acd86..c12962c 100644 (file)
@@ -48,9 +48,6 @@ protected:
     JUMPING
   };
 
-  bool has_initial_direction;
-  Direction initial_direction;  
-
   Timer recover_timer;
   SkullyHopState state;
 
index d53e914..6f1e1e9 100644 (file)
@@ -32,22 +32,14 @@ namespace {
 Snail::Snail(const lisp::Lisp& reader)
   : BadGuy(reader, "images/creatures/snail/snail.sprite"), state(STATE_NORMAL), squishcount(0)
 {
-  reader.get("direction", direction);
-  set_direction = false;
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
   sound_manager->preload("sounds/iceblock_bump.wav");
   sound_manager->preload("sounds/stomp.wav");
   sound_manager->preload("sounds/kick.wav");
 }
 
 Snail::Snail(const Vector& pos, Direction d)
-  : BadGuy(pos, "images/creatures/snail/snail.sprite"), state(STATE_NORMAL), squishcount(0)
+  : BadGuy(pos, d, "images/creatures/snail/snail.sprite"), state(STATE_NORMAL), squishcount(0)
 {
-  set_direction = true;
-  initial_direction = d;
   sound_manager->preload("sounds/iceblock_bump.wav");
   sound_manager->preload("sounds/stomp.wav");
   sound_manager->preload("sounds/kick.wav");
@@ -58,7 +50,6 @@ Snail::write(lisp::Writer& writer)
 {
   writer.start_list("snail");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -68,8 +59,6 @@ Snail::write(lisp::Writer& writer)
 void
 Snail::activate()
 {
-  if (set_direction) {dir = initial_direction;}
-
   be_normal();
 }
 
index 50e2301..5d259f0 100644 (file)
@@ -57,9 +57,6 @@ private:
   Timer flat_timer; /**< wait time until flipping right-side-up again */
   Timer kicked_delay_timer; /**< wait time until switching from STATE_KICKED_DELAY to STATE_KICKED */
   int squishcount;
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index 22dce8e..889578e 100644 (file)
@@ -26,19 +26,11 @@ static const float WALKSPEED = 80;
 SnowBall::SnowBall(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/snowball/snowball.sprite")
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 SnowBall::SnowBall(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/snowball/snowball.sprite")
+       : BadGuy(pos, d, "images/creatures/snowball/snowball.sprite")
 {
-  set_direction = true;
-  initial_direction = d;
 }
 
 void
@@ -46,7 +38,6 @@ SnowBall::write(lisp::Writer& writer)
 {
   writer.start_list("snowball");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
   /*
@@ -60,7 +51,6 @@ SnowBall::write(lisp::Writer& writer)
 void
 SnowBall::activate()
 {
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
 }
index eab2c06..49bfa9f 100644 (file)
@@ -37,9 +37,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index cf498c3..fbe27ee 100644 (file)
@@ -26,12 +26,6 @@ static const float WALKSPEED = 80;
 Spiky::Spiky(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/spiky/spiky.sprite")
 {
-  reader.get("direction", direction);
-  set_direction = false;
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 void
@@ -39,7 +33,6 @@ Spiky::write(lisp::Writer& writer)
 {
   writer.start_list("spiky");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -49,9 +42,6 @@ Spiky::write(lisp::Writer& writer)
 void
 Spiky::activate()
 {
-  if( set_direction ){
-      dir = initial_direction;
-  }
   physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
   sprite->set_action(dir == LEFT ? "left" : "right");
 }
index 75d2f5f..fd86096 100644 (file)
@@ -36,9 +36,6 @@ public:
   virtual Spiky* clone() const { return new Spiky(*this); }
 
 private:
-  bool set_direction;
-  Direction initial_direction;  
-  std::string direction;
 };
 
 #endif
index a70d2f7..3379c0b 100644 (file)
@@ -27,12 +27,6 @@ static const float WAKE_TIME = .5;
 SSpiky::SSpiky(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/spiky/sleepingspiky.sprite"), state(SSPIKY_SLEEPING)
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
 }
 
 void
@@ -40,7 +34,6 @@ SSpiky::write(lisp::Writer& writer)
 {
   writer.start_list("sspiky");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -50,9 +43,6 @@ SSpiky::write(lisp::Writer& writer)
 void
 SSpiky::activate()
 {
-  if( set_direction ){
-      dir = initial_direction;
-  }
   state = SSPIKY_SLEEPING;
   physic.set_velocity_x(0);
   sprite->set_action(dir == LEFT ? "sleeping-left" : "sleeping-right");
index aa6c795..bb77419 100644 (file)
@@ -44,9 +44,6 @@ protected:
     SSPIKY_WALKING
   };
   SSpikyState state;
-  std::string direction;
-  bool set_direction;
-  Direction initial_direction;  
 };
 
 #endif
index 479643a..3d3a539 100644 (file)
 Zeekling::Zeekling(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite")
 {
-  set_direction = false;
-  reader.get("direction", direction);
-  if( direction != "auto" && direction != ""){
-    set_direction = true;
-    initial_direction = str2dir( direction );
-  }
   state = FLYING;
 }
 
 Zeekling::Zeekling(const Vector& pos, Direction d)
-       : BadGuy(pos, "images/creatures/zeekling/zeekling.sprite")
+       : BadGuy(pos, d, "images/creatures/zeekling/zeekling.sprite")
 {
-  set_direction = true;
-  initial_direction = d;
   state = FLYING;
 }
 
@@ -50,7 +42,6 @@ Zeekling::write(lisp::Writer& writer)
 {
   writer.start_list("zeekling");
 
-  writer.write_string("direction", direction);
   writer.write_float("x", start_position.x);
   writer.write_float("y", start_position.y);
 
@@ -61,7 +52,6 @@ void
 Zeekling::activate()
 {
   speed = systemRandom.rand(130, 171);
-  if (set_direction) {dir = initial_direction;}
   physic.set_velocity_x(dir == LEFT ? -speed : speed);
   physic.enable_gravity(false);
   sprite->set_action(dir == LEFT ? "left" : "right");
index 0b3532e..fd6b519 100644 (file)
@@ -39,8 +39,6 @@ public:
 
 protected:
   bool collision_squished(Player& player);
-  bool set_direction;
-  Direction initial_direction;
   float speed;
 
   Timer diveRecoverTimer;
@@ -56,7 +54,6 @@ private:
   bool should_we_dive();
   void onBumpHorizontal();
   void onBumpVertical();
-  std::string direction;
 };
 
 #endif
index a0a0771..c7bb2e1 100644 (file)
@@ -20,6 +20,6 @@
 #ifndef SUPERTUX_DIRECTION_H
 #define SUPERTUX_DIRECTION_H
 
-enum Direction { LEFT = 0, RIGHT = 1 };
+enum Direction { AUTO, LEFT, RIGHT };
 
 #endif