+ public:
+ Level* level;
+
+ Player tux;
+
+ std::vector<BouncyDistro> bouncy_distros;
+ std::vector<BrokenBrick> broken_bricks;
+ std::vector<BouncyBrick> bouncy_bricks;
+ std::vector<FloatingScore> floating_scores;
+
+ std::vector<BadGuy> bad_guys;
+ std::vector<Upgrade> upgrades;
+ std::vector<Bullet> bullets;
+ std::vector<ParticleSystem*> particle_systems;
+
+ int distro_counter;
+ bool counting_distros;
+
+ static World* current_;
+ public:
+ static World* current() { return current_; }
+ static void set_current(World* w) { current_ = w; }
+
+ World(const std::string& filename);
+ World(const std::string& subset, int level_nr);
+ World();
+ ~World();
+
+ Level* get_level() { return level; }
+ Player* get_tux() { return &tux; }
+
+ void set_defaults();
+
+ void draw();
+ void action(double frame_ratio);
+
+ /** Checks for all possible collisions. And calls the
+ collision_handlers, which the collision_objects provide for this
+ case (or not). */
+ void collision_handler();
+
+ void activate_particle_systems();
+ void activate_bad_guys();
+
+ void add_score(float x, float y, int s);
+ void add_bouncy_distro(float x, float y);
+ void add_broken_brick(Tile* tile, float x, float y);
+ void add_broken_brick_piece(Tile* tile, float x, float y, float xm, float ym);
+ void add_bouncy_brick(float x, float y);
+ void add_bad_guy(float x, float y, BadGuyKind kind);
+ void add_upgrade(float x, float y, Direction dir, UpgradeKind kind);
+ void add_bullet(float x, float y, float xm, Direction dir);
+
+ /** Try to grab the coin at the given coordinates */
+ void trygrabdistro(float x, float y, int bounciness);
+
+ /** Try to break the brick at the given coordinates */
+ void trybreakbrick(float x, float y, bool small);
+
+ /** Try to get the content out of a bonus box, thus emptying it */
+ void tryemptybox(float x, float y, Direction col_side);
+
+ /** Try to bumb a badguy that might we walking above Tux, thus shaking
+ the tile which the badguy is walking on an killing him this way */
+ void trybumpbadguy(float x, float y);