supertux/sector.[ch]pp: Implemented the get_nearby_objects() method.
authorflorianf <florianf@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Tue, 2 Mar 2010 11:22:41 +0000 (11:22 +0000)
committerflorianf <florianf@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Tue, 2 Mar 2010 11:22:41 +0000 (11:22 +0000)
This method returns all moving objects close to a given point. Among other
things, this may be the player and walking badguys.

git-svn-id: http://supertux.lethargik.org/svn/supertux/trunk/supertux@6509 837edb03-e0f3-0310-88ca-d4d4e8b29345

src/supertux/sector.cpp
src/supertux/sector.hpp

index 6cc7c7a..e57058f 100644 (file)
@@ -1923,5 +1923,26 @@ Sector::get_nearest_player (const Vector& pos)
   return (nearest_player);
 } /* Player *get_nearest_player */
 
+std::vector<MovingObject*>
+Sector::get_nearby_objects (const Vector& center, float max_distance)
+{
+  std::vector<MovingObject*> ret;
+  std::vector<Player*> players = Sector::current()->get_players();
+
+  for (size_t i = 0; i < players.size (); i++) {
+    float distance = players[i]->get_bbox ().distance (center);
+    if (distance <= max_distance)
+      ret.push_back (players[i]);
+  }
+
+  for (size_t i = 0; i < moving_objects.size (); i++) {
+    float distance = moving_objects[i]->get_bbox ().distance (center);
+    if (distance <= max_distance)
+      ret.push_back (moving_objects[i]);
+  }
+
+  return (ret);
+}
+
 /* vim: set sw=2 sts=2 et : */
 /* EOF */
index 69f2d70..7016653 100644 (file)
@@ -165,6 +165,8 @@ public:
     return (get_nearest_player (get_anchor_pos (pos, ANCHOR_MIDDLE)));
   }
 
+  std::vector<MovingObject*> get_nearby_objects (const Vector& center, float max_distance);
+
   Rectf get_active_region();
 
   /**