class ScriptInterpreter;
class SpawnPoint;
class MovingObject;
+class CollisionHit;
enum MusicType {
LEVEL_MUSIC,
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);
/** 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;
std::string name;
public:
- std::string song_title;
+ std::string music;
float gravity;
// some special objects, where we need direct access