updating Nolok contrib templates
[supertux.git] / lib / special / moving_object.h
index 0399600..0103878 100644 (file)
 #ifndef SUPERTUX_MOVING_OBJECT_H
 #define SUPERTUX_MOVING_OBJECT_H
 
-#include "../special/base.h"
-#include "../special/game_object.h"
-#include "../math/vector.h"
-//#include "rectangle.h"
+#include "game_object.h"
+#include "collision_hit.h"
+#include "math/vector.h"
+#include "math/rectangle.h"
+
+class FlipLevelTransformer;
+class Sector;
+class CollisionGrid;
 
 namespace SuperTux
   {
@@ -40,26 +44,45 @@ namespace SuperTux
 
       /** this function is called when the object collided with any other object
        */
-      virtual void collision(const MovingObject& other_object,
-                             int collision_type) = 0;
+      virtual HitResponse collision(GameObject& other,
+          const CollisionHit& hit) = 0;
 
-      Vector get_pos() const
+      const Vector& get_pos() const
         {
-          return Vector(base.x, base.y);
+          return bbox.p1;
         }
 
-      base_type base;
-      base_type old_base;
+      /** returns the bounding box of the Object */
+      const Rectangle& get_bbox() const
+      {
+        return bbox;
+      }
+
+      const Vector& get_movement() const
+      {
+        return movement;
+      }
+
+      /** places the moving object at a specific position. Be carefull when
+       * using this function. There are no collision detection checks performed
+       * here so bad things could happen.
+       */
+      virtual void set_pos(const Vector& pos)
+      {
+        bbox.set_pos(pos);
+      }
 
     protected:
-#if 0 // this will be used in my collision detection rewrite later
-      /// the current position of the object
-      Vector pos;
-      /// the position we want to move until next frame
-      Vector new_pos;
-      /// the bounding box relative to the current position
-      Rectangle bounding_box;
-#endif
+      friend class Sector;
+      friend class CollisionGrid;
+      
+      /** The bounding box of the object (as used for collision detection, this
+       * isn't necessarily the bounding box for graphics)
+       */
+      Rectangle bbox;
+      /** The movement that will happen till next frame
+       */
+      Vector movement;
     };
 
 } //namespace SuperTux