more tuning of badguy activation
[supertux.git] / src / badguy.cpp
index 4f8175e..aa092ca 100644 (file)
@@ -215,9 +215,16 @@ BadGuy::init()
         --base.y;
     }
 
-  // just activate the badguy, since he might be on screen already. If not he
-  // gets deactivated anyway
-  activate(LEFT);
+  if(World::current()->camera) {
+    Vector scroll = World::current()->camera->get_translation();
+
+    if(start_position.x > scroll.x - X_OFFSCREEN_DISTANCE &&
+        start_position.x < scroll.x + screen->w + X_OFFSCREEN_DISTANCE &&
+        start_position.y > scroll.y - Y_OFFSCREEN_DISTANCE &&
+        start_position.y < scroll.y + screen->h + Y_OFFSCREEN_DISTANCE) {
+      activate(LEFT);
+    }
+  }
 }
 
 void
@@ -841,10 +848,10 @@ BadGuy::action(float elapsed_time)
         start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE)
       activate(LEFT);
   } else {
-    if(base.x + base.width < scroll_x - X_OFFSCREEN_DISTANCE
-      || base.x > scroll_x + screen->w + X_OFFSCREEN_DISTANCE
-      || base.y + base.height < scroll_y - Y_OFFSCREEN_DISTANCE
-      || base.y > scroll_y + screen->h + Y_OFFSCREEN_DISTANCE) {
+    if(base.x + base.width < scroll_x - X_OFFSCREEN_DISTANCE*4
+      || base.x > scroll_x + screen->w + X_OFFSCREEN_DISTANCE*4
+      || base.y + base.height < scroll_y - Y_OFFSCREEN_DISTANCE*4
+      || base.y > scroll_y + screen->h + Y_OFFSCREEN_DISTANCE*4) {
       seen = false;
       if(dying != DYING_NOT)
         remove_me();