X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=1470654e2f1a366a5830a97ccc67feb4c1935823;hb=0e7fc4cada952c242f4915e9d424eda094583e21;hp=53edbf4abd6f1e3c68e18f07601d757f9689e84f;hpb=626ab69641b179048b9d0fc528cd1626886fe9db;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index 53edbf4ab..1470654e2 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -26,7 +26,6 @@ #include #include -#include "app/globals.h" #include "sector.h" #include "player_status.h" #include "object/gameobjs.h" @@ -40,13 +39,13 @@ #include "lisp/list_iterator.h" #include "tile.h" #include "audio/sound_manager.h" -#include "gameloop.h" +#include "game_session.h" #include "resources.h" #include "statistics.h" #include "collision_grid.h" #include "collision_grid_iterator.h" #include "object_factory.h" -#include "special/collision.h" +#include "collision.h" #include "math/rectangle.h" #include "math/aatriangle.h" #include "object/coin.h" @@ -56,6 +55,7 @@ #include "badguy/jumpy.h" #include "badguy/spike.h" #include "trigger/sequence_trigger.h" +#include "player_status.h" //#define USE_GRID @@ -66,7 +66,7 @@ Sector::Sector() currentmusic(LEVEL_MUSIC) { song_title = "Mortimers_chipdisko.mod"; - player = new Player(); + player = new Player(&player_status); add_object(player); grid = new CollisionGrid(32000, 32000); @@ -157,14 +157,15 @@ Sector::parse(const lisp::Lisp& sector) update_game_objects(); fix_old_tiles(); - update_game_objects(); if(!camera) { std::cerr << "sector '" << name << "' does not contain a camera.\n"; - camera = new Camera(this); - add_object(camera); + update_game_objects(); + add_object(new Camera(this)); } if(!solids) throw std::runtime_error("sector does not contain a solid tile layer."); + + update_game_objects(); } void @@ -417,24 +418,6 @@ Sector::activate(const Vector& player_pos) { _current = this; - // Apply bonuses from former levels - switch (player_status.bonus) { - case PlayerStatus::NO_BONUS: - break; - - case PlayerStatus::FLOWER_BONUS: - player->got_power = Player::FIRE_POWER; // FIXME: add ice power to here - // fall through - - case PlayerStatus::GROWUP_BONUS: - player->grow(false); - break; - - default: - std::cerr << "Unknown bonus in PlayerStatus?!?\n"; - break; - } - player->move(player_pos); camera->reset(player->get_pos()); } @@ -742,25 +725,22 @@ Sector::add_bullet(const Vector& pos, float xm, Direction dir) // TODO remove this function and move these checks elsewhere... static const size_t MAX_FIRE_BULLETS = 2; static const size_t MAX_ICE_BULLETS = 1; - - if(player->got_power == Player::FIRE_POWER) { + + Bullet* new_bullet = 0; + if(player_status.bonus == FIRE_BONUS) { if(bullets.size() > MAX_FIRE_BULLETS-1) return false; - } else if(player->got_power == Player::ICE_POWER) { + new_bullet = new Bullet(pos, xm, dir, FIRE_BULLET); + } else if(player_status.bonus == ICE_BONUS) { if(bullets.size() > MAX_ICE_BULLETS-1) return false; - } - - Bullet* new_bullet = 0; - if(player->got_power == Player::FIRE_POWER) - new_bullet = new Bullet(pos, xm, dir, FIRE_BULLET); - else if(player->got_power == Player::ICE_POWER) new_bullet = new Bullet(pos, xm, dir, ICE_BULLET); - else - throw std::runtime_error("wrong bullet type."); + } else { + return false; + } add_object(new_bullet); - SoundManager::get()->play_sound(IDToSound(SND_SHOOT)); + sound_manager->play_sound("shoot"); return true; } @@ -781,47 +761,28 @@ Sector::add_floating_text(const Vector& pos, const std::string& text) void Sector::load_music() { - char* song_path; - char* song_subtitle; - - level_song = SoundManager::get()->load_music(datadir + "/music/" + song_title); - - song_path = (char *) malloc(sizeof(char) * datadir.length() + - strlen(song_title.c_str()) + 8 + 5); - song_subtitle = strdup(song_title.c_str()); - strcpy(strstr(song_subtitle, "."), "\0"); - sprintf(song_path, "%s/music/%s-fast%s", datadir.c_str(), - song_subtitle, strstr(song_title.c_str(), ".")); - if(!SoundManager::get()->exists_music(song_path)) { - level_song_fast = level_song; - } else { - level_song_fast = SoundManager::get()->load_music(song_path); - } - free(song_subtitle); - free(song_path); + level_song = sound_manager->load_music( + get_resource_filename("/music/" + song_title)); } void -Sector::play_music(int type) +Sector::play_music(MusicType type) { currentmusic = type; switch(currentmusic) { - case HURRYUP_MUSIC: - SoundManager::get()->play_music(level_song_fast); - break; case LEVEL_MUSIC: - SoundManager::get()->play_music(level_song); + sound_manager->play_music(level_song); break; case HERRING_MUSIC: - SoundManager::get()->play_music(herring_song); + sound_manager->play_music(herring_song); break; default: - SoundManager::get()->halt_music(); + sound_manager->halt_music(); break; } } -int +MusicType Sector::get_music_type() { return currentmusic;