Added a bottom and top section to grumbel's blue mountain background. Extended 23...
[supertux.git] / src / badguy / totem.cpp
index 7ec6693..2f1327d 100644 (file)
@@ -24,8 +24,8 @@
 #include "log.hpp"
 
 static const float WALKSPEED = 100;
-static const float JUMP_ON_SPEED_Y = 400;
-static const float JUMP_OFF_SPEED_Y = 500;
+static const float JUMP_ON_SPEED_Y = -400;
+static const float JUMP_OFF_SPEED_Y = -500;
 
 Totem::Totem(const lisp::Lisp& reader)
        : BadGuy(reader, "images/creatures/totem/totem.sprite")
@@ -90,7 +90,7 @@ Totem::active_update(float elapsed_time)
   BadGuy::active_update(elapsed_time);
 
   if (!carried_by) {
-    if (might_fall())
+    if (on_ground() && might_fall())
     {
       dir = (dir == LEFT ? RIGHT : LEFT);
       activate();
@@ -151,31 +151,31 @@ Totem::collision_squished(Player& player)
   return true;
 }
 
-HitResponse
-Totem::collision_solid(GameObject& object, const CollisionHit& hit)
+void
+Totem::collision_solid(const CollisionHit& hit)
 {
+  update_on_ground_flag(hit);
+
   // if we are being carried around, pass event to bottom of stack and ignore it
   if (carried_by) {
-    carried_by->collision_solid(object, hit);
-    return CONTINUE;
+    carried_by->collision_solid(hit);
+    return;
   }
 
   // If we hit something from above or below: stop moving in this direction 
-  if (hit.normal.y != 0) {
+  if (hit.top || hit.bottom) {
     physic.set_velocity_y(0);
   }
 
   // If we are hit from the direction we are facing: turn around
-  if ((hit.normal.x > .8) && (dir == LEFT)) {
+  if (hit.left && (dir == LEFT)) {
     dir = RIGHT;
     activate();
   }
-  if ((hit.normal.x < -.8) && (dir == RIGHT)) {
+  if (hit.right && (dir == RIGHT)) {
     dir = LEFT;
     activate();
   }
-
-  return CONTINUE;
 }
 
 HitResponse
@@ -199,11 +199,11 @@ Totem::collision_badguy(BadGuy& badguy, const CollisionHit& hit)
   }
 
   // If we are hit from the direction we are facing: turn around
-  if ((hit.normal.x > .8) && (dir == LEFT)) {
+  if(hit.left && (dir == LEFT)) {
     dir = RIGHT;
     activate();
   }
-  if ((hit.normal.x < -.8) && (dir == RIGHT)) {
+  if(hit.right && (dir == RIGHT)) {
     dir = LEFT;
     activate();
   }