Bugfix: enemies below half the screen were not appearing and were causing problems...
authorRicardo Cruz <rick2@aeiou.pt>
Thu, 21 Oct 2004 18:34:13 +0000 (18:34 +0000)
committerRicardo Cruz <rick2@aeiou.pt>
Thu, 21 Oct 2004 18:34:13 +0000 (18:34 +0000)
Dunno how did this bug only showed up after my changes, since it doesn't seem to be related.

SVN-Revision: 2046

src/badguy.cpp

index e4f04ff..8b152cd 100644 (file)
@@ -159,13 +159,12 @@ BadGuy::~BadGuy()
 void
 BadGuy::init()
 {
-  base.x = 0;
-  base.y = 0;
+  base.x = start_position.x;
+  base.y = start_position.y;
   base.width  = 32;
   base.height = 32;
   
   mode     = NORMAL;
-  dying    = DYING_NOT;
   old_base = base;
   dir      = LEFT;
   seen     = false;
@@ -177,8 +176,6 @@ BadGuy::init()
 
   specs = badguyspecs_manager->load(badguykind_to_string(kind));
 
-  set_action("hide", "hide");
-
   // if we're in a solid tile at start correct that now
   if(Sector::current()) {
   if(kind != BAD_FLAME && kind != BAD_FISH && kind != BAD_FLAMEFISH && collision_object_map(base)) 
@@ -869,12 +866,12 @@ BadGuy::action(float elapsed_time)
     if (start_position.x > scroll_x - X_OFFSCREEN_DISTANCE &&
         start_position.x < scroll_x - base.width &&
         start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
-        start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE)
+        start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE)
       activate(RIGHT);
     else if (start_position.x > scroll_x + screen->w &&
         start_position.x < scroll_x + screen->w + X_OFFSCREEN_DISTANCE &&
         start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
-        start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE)
+        start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE)
       activate(LEFT);
     /* Special case for badguys on start of the level.
      * If in the future, it's possible to set Tux start pos, this case
@@ -962,6 +959,9 @@ BadGuy::action(float elapsed_time)
 void
 BadGuy::draw(DrawingContext& context)
 {
+  if(!seen)
+    return;
+
   if((dir == LEFT && action_left == "hide") ||
      (dir == RIGHT && action_right == "hide"))
     return;
@@ -1217,6 +1217,9 @@ BadGuy::collision(const MovingObject&, int)
 void
 BadGuy::collision(void *p_c_object, int c_object, CollisionType type)
 {
+  if(!seen)
+    return;
+
   BadGuy* pbad_c    = NULL;
   Bullet* pbullet_c = NULL;