X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=bd4f16d2ca1c9ba90c5bc27e5c2234544902dbb9;hb=ac9e53e5d668d20fcae8c6ac728602d5359a6004;hp=e09742071d1cbbcab256612a513c7fb3230a0672;hpb=fcae2511a70217bb8ca6e7fb13e0dab639a062f1;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index e09742071..bd4f16d2c 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -44,6 +44,7 @@ #include "math/aatriangle.h" #include "object/coin.h" #include "object/block.h" +#include "object/invisible_block.h" #include "object/platform.h" #include "trigger/door.h" #include "object/bullet.h" @@ -54,6 +55,7 @@ #include "badguy/mriceblock.h" #include "badguy/mrbomb.h" #include "trigger/sequence_trigger.h" +#include "trigger/secretarea_trigger.h" Sector* Sector::_current = 0; @@ -121,6 +123,7 @@ Sector::parseObject(const std::string& name, LispReader& reader) return 0; } solids = tilemap; + fix_old_tiles(); } return tilemap; } else if(name == "particles-snow") { @@ -133,6 +136,8 @@ Sector::parseObject(const std::string& name, LispReader& reader) return partsys; } else if(name == "door") { return new Door(reader); + } else if(name == "secretarea") { + return new SecretAreaTrigger(reader); } else if(name == "platform") { return new Platform(reader); } else if(name == "jumpy" || name == "money") { @@ -157,8 +162,8 @@ Sector::parseObject(const std::string& name, LispReader& reader) return new FlyingPlatform(reader); #endif - std::cerr << "Unknown object type '" << name << "'.\n"; - return 0; + std::cerr << "Unknown object type '" << name << "'.\n"; + return 0; } void @@ -275,31 +280,7 @@ Sector::parse_old_format(LispReader& reader) solids = tilemap; add_object(tilemap); - // hack for now... - for(size_t x=0; x < solids->get_width(); ++x) { - for(size_t y=0; y < solids->get_height(); ++y) { - const Tile* tile = solids->get_tile(x, y); - - if(tile->attributes & Tile::COIN) { - Coin* coin = new Coin(Vector(x*32, y*32)); - add_object(coin); - solids->change(x, y, 0); - } else if(tile->attributes & Tile::FULLBOX) { - BonusBlock* block = new BonusBlock(Vector(x*32, y*32), tile->data); - add_object(block); - solids->change(x, y, 0); - } else if(tile->attributes & Tile::BRICK) { - Brick* brick = new Brick(Vector(x*32, y*32), tile->data); - add_object(brick); - solids->change(x, y, 0); - } else if(tile->attributes & Tile::GOAL) { - SequenceTrigger* trigger = new SequenceTrigger(Vector(x*32, y*32), - "endsequence"); - add_object(trigger); - solids->change(x, y, 0); - } - } - } + fix_old_tiles(); } if(reader.read_int_vector("background-tm", tiles)) { @@ -364,6 +345,35 @@ Sector::parse_old_format(LispReader& reader) } void +Sector::fix_old_tiles() +{ + // hack for now... + for(size_t x=0; x < solids->get_width(); ++x) { + for(size_t y=0; y < solids->get_height(); ++y) { + const Tile* tile = solids->get_tile(x, y); + Vector pos(x*32, y*32); + + if(tile->id == 112) { + add_object(new InvisibleBlock(pos)); + solids->change(x, y, 0); + } else if(tile->attributes & Tile::COIN) { + add_object(new Coin(pos)); + solids->change(x, y, 0); + } else if(tile->attributes & Tile::FULLBOX) { + add_object(new BonusBlock(pos, tile->data)); + solids->change(x, y, 0); + } else if(tile->attributes & Tile::BRICK) { + add_object(new Brick(pos, tile->data)); + solids->change(x, y, 0); + } else if(tile->attributes & Tile::GOAL) { + add_object(new SequenceTrigger(pos, "endsequence")); + solids->change(x, y, 0); + } + } + } +} + +void Sector::write(LispWriter& writer) { writer.write_string("name", name); @@ -791,13 +801,6 @@ Sector::add_smoke_cloud(const Vector& pos) return true; } -bool -Sector::add_particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color, int size, int life_time, int drawing_layer) -{ - add_object(new Particles(epicenter, min_angle, max_angle, initial_velocity, acceleration, number, color, size, life_time, drawing_layer)); - return true; -} - void Sector::add_floating_text(const Vector& pos, const std::string& text) {