1 // $Id: world.h 1696 2004-08-03 18:47:15Z rmcruz $ 2 // 3 // SuperTux 4 // Copyright (C) 2000 Bill Kendrick <bill@newbreedsoftware.com> 5 // Copyright (C) 2004 Tobias Glaesser <tobi.web@gmx.de> 6 // Copyright (C) 2004 Ingo Ruhnke <grumbel@gmx.de> 7 // 8 // This program is free software; you can redistribute it and/or 9 // modify it under the terms of the GNU General Public License 10 // as published by the Free Software Foundation; either version 2 11 // of the License, or (at your option) any later version. 12 // 13 // This program is distributed in the hope that it will be useful, 14 // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 // GNU General Public License for more details. 17 // 18 // You should have received a copy of the GNU General Public License 19 // along with this program; if not, write to the Free Software 20 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 22 #ifndef SUPERTUX_WORLD_H 23 #define SUPERTUX_WORLD_H 24 25 #include <vector> 26 #include <SDL.h> 27 #include "type.h" 28 #include "scene.h" 29 #include "special.h" 30 #include "badguy.h" 31 #include "particlesystem.h" 32 #include "gameobjs.h" 33 34 class Level; 35 36 /** The World class holds a level and all the game objects (badguys, 37 bouncy distros, etc) that are needed to run a game. */ 38 class World 39 { 40 private: 41 typedef std::list<BadGuy*> BadGuys; 42 BadGuys bad_guys_to_add; 43 Level* level; 44 Player tux; 45 46 Timer scrolling_timer; 47 48 int distro_counter; 49 bool counting_distros; 50 int currentmusic; 51 52 static World* current_; 53 public: 54 BadGuys bad_guys; 55 std::vector<BouncyDistro*> bouncy_distros; 56 std::vector<BrokenBrick*> broken_bricks; 57 std::vector<BouncyBrick*> bouncy_bricks; 58 std::vector<FloatingScore*> floating_scores; 59 60 std::vector<Upgrade> upgrades; 61 std::vector<Bullet> bullets; 62 typedef std::vector<ParticleSystem*> ParticleSystems; 63 ParticleSystems particle_systems; 64 65 public: current()66 static World* current() { return current_; } set_current(World * w)67 static void set_current(World* w) { current_ = w; } 68 69 World(const std::string& filename); 70 World(const std::string& subset, int level_nr); World()71 World() {}; 72 ~World(); 73 get_level()74 Level* get_level() { return level; } get_tux()75 Player* get_tux() { return &tux; } 76 77 void set_defaults(); 78 79 void draw(); 80 void action(double frame_ratio); 81 void scrolling(double frame_ratio); // camera scrolling 82 83 void play_music(int musictype); 84 int get_music_type(); 85 86 87 /** Checks for all possible collisions. And calls the 88 collision_handlers, which the collision_objects provide for this 89 case (or not). */ 90 void collision_handler(); 91 92 void activate_particle_systems(); 93 void activate_bad_guys(); 94 95 void add_score(float x, float y, int s); 96 void add_bouncy_distro(float x, float y); 97 void add_broken_brick(Tile* tile, float x, float y); 98 void add_broken_brick_piece(Tile* tile, float x, float y, float xm, float ym); 99 void add_bouncy_brick(float x, float y); 100 101 BadGuy* add_bad_guy(float x, float y, BadGuyKind kind, bool stay_on_platform = false); 102 103 void add_upgrade(float x, float y, Direction dir, UpgradeKind kind); 104 void add_bullet(float x, float y, float xm, Direction dir); 105 106 /** Try to grab the coin at the given coordinates */ 107 void trygrabdistro(float x, float y, int bounciness); 108 109 /** Try to break the brick at the given coordinates */ 110 void trybreakbrick(float x, float y, bool small, Direction col_side); 111 112 /** Try to get the content out of a bonus box, thus emptying it */ 113 void tryemptybox(float x, float y, Direction col_side); 114 115 /** Try to bumb a badguy that might we walking above Tux, thus shaking 116 the tile which the badguy is walking on an killing him this way */ 117 void trybumpbadguy(float x, float y); 118 119 /** Apply bonuses active in the player status, used to reactivate 120 bonuses from former levels */ 121 void apply_bonuses(); 122 }; 123 124 /** FIMXE: Workaround for the leveleditor mainly */ 125 extern World global_world; 126 127 #endif /*SUPERTUX_WORLD_H*/ 128 129 /* Local Variables: */ 130 /* mode:c++ */ 131 /* End: */ 132 133