X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fsector.cpp;h=3e0c44eadeb383c07f16f108f2bf35017bfcb17d;hb=f6e1091adcf8415061c5586ba332278869837189;hp=2a7dc37e28277255d26d45503fe4baee83aa4f5c;hpb=26316f3548bc819f817918a79dbee7ce9f7270c5;p=supertux.git diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index 2a7dc37e2..3e0c44ead 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -58,6 +58,7 @@ #include "supertux/savegame.hpp" #include "supertux/spawn_point.hpp" #include "supertux/tile.hpp" +#include "trigger/secretarea_trigger.hpp" #include "trigger/sequence_trigger.hpp" #include "util/file_system.hpp" @@ -76,6 +77,7 @@ Sector::Sector(Level* parent) : sector_table(), scripts(), ambient_light( 1.0f, 1.0f, 1.0f, 1.0f ), + foremost_layer(), gameobjects(), moving_objects(), spawnpoints(), @@ -108,6 +110,8 @@ Sector::Sector(Level* parent) : throw scripting::SquirrelError(global_vm, "Couldn't get sector table"); sq_addref(global_vm, §or_table); sq_pop(global_vm, 1); + + foremost_layer = calculate_foremost_layer(); } Sector::~Sector() @@ -416,7 +420,9 @@ Sector::fix_old_tiles() add_object(std::make_shared(pos, tile->getData())); solids->change(x, y, 0); } else if(tile->getAttributes() & Tile::BRICK) { - if( ( id == 78 ) || ( id == 105 ) ){ + if( ( id == 3159 ) || ( id == 3160 ) ){ + add_object( std::make_shared(pos, tile->getData(), "images/objects/bonus_block/brickWeb.sprite") ); + } else if( ( id == 78 ) || ( id == 105 ) ){ add_object( std::make_shared(pos, tile->getData(), "images/objects/bonus_block/brickIce.sprite") ); } else if( ( id == 77 ) || ( id == 104 ) ){ add_object( std::make_shared(pos, tile->getData(), "images/objects/bonus_block/brick.sprite") ); @@ -650,6 +656,40 @@ Sector::get_active_region() camera->get_translation() + Vector(1600, 1200) + Vector(SCREEN_WIDTH,SCREEN_HEIGHT)); } +int +Sector::calculate_foremost_layer() +{ + int layer = 0; + std::vector secret_area_tilemaps; + for(auto i = gameobjects.begin(); i != gameobjects.end(); ++i) + { + SecretAreaTrigger* trigger = dynamic_cast(i->get()); + if (!trigger) continue; + secret_area_tilemaps.push_back(trigger->get_fade_tilemap_name()); + } + + for(auto i = gameobjects.begin(); i != gameobjects.end(); ++i) + { + TileMap* tm = dynamic_cast(i->get()); + if (!tm) continue; + if(tm->get_layer() > foremost_layer) + { + if (std::find(secret_area_tilemaps.begin(), secret_area_tilemaps.end(), tm->get_name()) + != secret_area_tilemaps.end() || tm->is_solid()) + { + layer = tm->get_layer(); + } + } + } + return layer; +} + +int +Sector::get_foremost_layer() +{ + return foremost_layer; +} + void Sector::update(float elapsed_time) {