X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=cb20718a8b4ef5cf284feae7d7599387b5906764;hb=bf769796df5b8899eadaff544409f0ee20882530;hp=058f045e54488803f9488800a69acff29d7bdb64;hpb=2237dafae013852906fe1e15ae82eb38e555dec7;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index 058f045e5..cb20718a8 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -26,43 +26,43 @@ #include #include -#include "sector.h" -#include "player_status.h" -#include "object/gameobjs.h" -#include "object/camera.h" -#include "object/background.h" -#include "object/particlesystem.h" -#include "object/particlesystem_interactive.h" -#include "object/tilemap.h" -#include "lisp/parser.h" -#include "lisp/lisp.h" -#include "lisp/writer.h" -#include "lisp/list_iterator.h" -#include "tile.h" -#include "audio/sound_manager.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 "collision.h" -#include "spawn_point.h" -#include "math/rect.h" -#include "math/aatriangle.h" -#include "object/coin.h" -#include "object/block.h" -#include "object/invisible_block.h" -#include "object/bullet.h" -#include "object/text_object.h" -#include "badguy/jumpy.h" -#include "badguy/spike.h" -#include "trigger/sequence_trigger.h" -#include "player_status.h" -#include "scripting/script_interpreter.h" -#include "scripting/sound.h" -#include "scripting/scripted_object.h" -#include "scripting/text.h" +#include "sector.hpp" +#include "player_status.hpp" +#include "object/gameobjs.hpp" +#include "object/camera.hpp" +#include "object/background.hpp" +#include "object/particlesystem.hpp" +#include "object/particlesystem_interactive.hpp" +#include "object/tilemap.hpp" +#include "lisp/parser.hpp" +#include "lisp/lisp.hpp" +#include "lisp/writer.hpp" +#include "lisp/list_iterator.hpp" +#include "tile.hpp" +#include "audio/sound_manager.hpp" +#include "game_session.hpp" +#include "resources.hpp" +#include "statistics.hpp" +#include "collision_grid.hpp" +#include "collision_grid_iterator.hpp" +#include "object_factory.hpp" +#include "collision.hpp" +#include "spawn_point.hpp" +#include "math/rect.hpp" +#include "math/aatriangle.hpp" +#include "object/coin.hpp" +#include "object/block.hpp" +#include "object/invisible_block.hpp" +#include "object/bullet.hpp" +#include "object/text_object.hpp" +#include "badguy/jumpy.hpp" +#include "badguy/spike.hpp" +#include "trigger/sequence_trigger.hpp" +#include "player_status.hpp" +#include "scripting/script_interpreter.hpp" +#include "scripting/sound.hpp" +#include "scripting/scripted_object.hpp" +#include "scripting/text.hpp" //#define USE_GRID @@ -72,11 +72,15 @@ Sector::Sector() : gravity(10), player(0), solids(0), camera(0), currentmusic(LEVEL_MUSIC) { - song_title = "Mortimers_chipdisko.mod"; + song_title = "chipdisko.ogg"; player = new Player(&player_status); add_object(player); +#ifdef USE_GRID grid = new CollisionGrid(32000, 32000); +#else + grid = 0; +#endif } Sector::~Sector() @@ -153,7 +157,6 @@ Sector::parse(const lisp::Lisp& sector) iter.value()->get(gravity); } else if(token == "music") { iter.value()->get(song_title); - load_music(); } else if(token == "spawnpoint") { SpawnPoint* sp = new SpawnPoint(iter.lisp()); spawnpoints.push_back(sp); @@ -238,9 +241,8 @@ Sector::parse_old_format(const lisp::Lisp& reader) spawn->name = "main"; spawnpoints.push_back(spawn); - song_title = "Mortimers_chipdisko.mod"; + song_title = "chipdisko.ogg"; reader.get("music", song_title); - load_music(); int width, height = 15; reader.get("width", width); @@ -323,18 +325,6 @@ Sector::fix_old_tiles() if(tile->getID() == 112) { add_object(new InvisibleBlock(pos)); solids->change(x, y, 0); - } else if(tile->getID() == 295) { - add_object(new Spike(pos, Spike::NORTH)); - solids->change(x, y, 0); - } else if(tile->getID() == 296) { - add_object(new Spike(pos, Spike::EAST)); - solids->change(x, y, 0); - } else if(tile->getID() == 297) { - add_object(new Spike(pos, Spike::SOUTH)); - solids->change(x, y, 0); - } else if(tile->getID() == 298) { - add_object(new Spike(pos, Spike::WEST)); - solids->change(x, y, 0); } else if(tile->getAttributes() & Tile::COIN) { add_object(new Coin(pos)); solids->change(x, y, 0); @@ -497,10 +487,12 @@ Sector::update_game_objects() std::remove(bullets.begin(), bullets.end(), bullet), bullets.end()); } +#ifdef USE_GRID MovingObject* movingobject = dynamic_cast (object); if(movingobject) { grid->remove_object(movingobject); } +#endif delete *i; i = gameobjects.erase(i); } @@ -515,9 +507,11 @@ Sector::update_game_objects() if(bullet) bullets.push_back(bullet); +#ifdef USE_GRID MovingObject* movingobject = dynamic_cast (object); if(movingobject) grid->add_object(movingobject); +#endif TileMap* tilemap = dynamic_cast (object); if(tilemap && tilemap->is_solid()) { @@ -607,9 +601,10 @@ Sector::collision_tilemap(MovingObject* object, int depth) int max_x = int(x2+1); int max_y = int(y2+1); - CollisionHit temphit, hit; + TilemapCollisionHit temphit, hit; Rect dest = object->get_bbox(); dest.move(object->movement); + hit.tileflags = 0; hit.time = -1; // represents an invalid value for(int x = starttilex; x*32 < max_x; ++x) { for(int y = starttiley; y*32 < max_y; ++y) { @@ -617,7 +612,7 @@ Sector::collision_tilemap(MovingObject* object, int depth) if(!tile) continue; // skip non-solid tiles - if(!(tile->getAttributes() & Tile::SOLID)) + if(tile->getAttributes() == 0) continue; // only handle unisolid when the player is falling down and when he was // above the tile before @@ -634,15 +629,21 @@ Sector::collision_tilemap(MovingObject* object, int depth) if(Collision::rectangle_aatriangle(temphit, dest, object->movement, triangle)) { - if(temphit.time > hit.time) + hit.tileflags |= tile->getAttributes(); + if(temphit.time > hit.time) { + temphit.tileflags = hit.tileflags; hit = temphit; + } } } else { // normal rectangular tile Rect rect(x*32, y*32, (x+1)*32, (y+1)*32); if(Collision::rectangle_rectangle(temphit, dest, object->movement, rect)) { - if(temphit.time > hit.time) + hit.tileflags |= tile->getAttributes(); + if(temphit.time > hit.time) { + temphit.tileflags = hit.tileflags; hit = temphit; + } } } } @@ -763,7 +764,7 @@ Sector::add_bullet(const Vector& pos, float xm, Direction dir) } add_object(new_bullet); - sound_manager->play_sound("shoot"); + sound_manager->play("sounds/shoot.wav"); return true; } @@ -782,25 +783,18 @@ Sector::add_floating_text(const Vector& pos, const std::string& text) } void -Sector::load_music() -{ - level_song = sound_manager->load_music( - get_resource_filename("/music/" + song_title)); -} - -void Sector::play_music(MusicType type) { currentmusic = type; switch(currentmusic) { case LEVEL_MUSIC: - sound_manager->play_music(level_song); + sound_manager->play_music(std::string("music/") + song_title); break; case HERRING_MUSIC: - sound_manager->play_music(herring_song); + sound_manager->play_music("music/salcon.ogg"); break; default: - sound_manager->halt_music(); + sound_manager->play_music(""); break; } }