class ScriptInterpreter;
class SpawnPoint;
class MovingObject;
+class CollisionHit;
enum MusicType {
LEVEL_MUSIC,
/** Checks for all possible collisions. And calls the
collision_handlers, which the collision_objects provide for this
case (or not). */
- void collision_handler();
+ void handle_collisions();
bool add_bullet(const Vector& pos, float xm, Direction dir);
bool add_smoke_cloud(const Vector& pos);
/** Get total number of badguys */
int get_total_badguys();
- // make this private again soon
- void collision_tilemap(MovingObject* object, int depth);
+ void collision_tilemap(MovingObject* object, CollisionHit& hit) const;
+ uint32_t collision_tile_attributes(MovingObject* object) 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;
private:
- void collision_object(MovingObject* object1, MovingObject* object2);
-
+ void collision_object(MovingObject* object1, MovingObject* object2) const;
GameObject* parse_object(const std::string& name, const lisp::Lisp& lisp);
static Sector* _current;
std::string name;
public:
- std::string song_title;
+ std::string music;
float gravity;
// some special objects, where we need direct access
public: // TODO make this private again
typedef std::vector<GameObject*> GameObjects;
GameObjects gameobjects;
+ typedef std::vector<MovingObject*> MovingObjects;
+ MovingObjects moving_objects;
typedef std::vector<SpawnPoint*> SpawnPoints;
SpawnPoints spawnpoints;