- Yet another try in the endless quest for perfect collision detection.
[supertux.git] / src / sector.hpp
index 265fccf..5bf497a 100644 (file)
@@ -42,6 +42,7 @@ class CollisionGrid;
 class ScriptInterpreter;
 class SpawnPoint;
 class MovingObject;
+class CollisionHit;
 
 enum MusicType {
   LEVEL_MUSIC,
@@ -86,11 +87,6 @@ public:
   void play_music(MusicType musictype);
   MusicType get_music_type();
   
-  /** Checks for all possible collisions. And calls the
-      collision_handlers, which the collision_objects provide for this
-      case (or not). */
-  void handle_collisions();
-
   bool add_bullet(const Vector& pos, float xm, Direction dir);
   bool add_smoke_cloud(const Vector& pos);
   void add_floating_text(const Vector& pos, const std::string& text);
@@ -102,12 +98,31 @@ public:
   /** Get total number of badguys */
   int get_total_badguys();
 
-  // make this private again soon
-  void collision_tilemap(MovingObject* object, int depth);
+  void collision_tilemap(const Rect& dest, const Vector& movement, CollisionHit& hit) const;
+
+  /** Checks if at the specified rectangle are gameobjects with STATIC flag set
+   * (or solid tiles from the tilemap)
+   */
+  bool is_free_space(const Rect& rect) const;
+
+  /**
+   * returns a list of players currently in the sector
+   */
+  std::vector<Player*> get_players() {
+    return std::vector<Player*>(1, this->player);
+  }
 
 private:
-  void collision_object(MovingObject* object1, MovingObject* object2);
+  uint32_t collision_tile_attributes(const Rect& dest) const;
+  
+  bool collision_static(MovingObject* object, const Vector& movement);
+  
+  /** Checks for all possible collisions. And calls the
+      collision_handlers, which the collision_objects provide for this
+      case (or not). */
+  void handle_collisions();
   
+  void collision_object(MovingObject* object1, MovingObject* object2) const;
   GameObject* parse_object(const std::string& name, const lisp::Lisp& lisp);
   
   static Sector* _current;
@@ -115,7 +130,7 @@ private:
   std::string name;
 
 public:
-  std::string song_title;
+  std::string music;
   float gravity;
 
   // some special objects, where we need direct access