X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fsector.cpp;h=c9879c9c0056c7f3d8d7dc1cb50d67f3d960d219;hb=4d73312184d671950928b48db4b940def45eaa1e;hp=409ec87c1b000a1abd4d2e4bee2fd472e4d477f5;hpb=e117cc5199ebd6c494864a8cbcec7ac583267440;p=supertux.git diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index 409ec87c1..c9879c9c0 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -110,15 +110,20 @@ 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() { using namespace scripting; + try + { + deactivate(); + } + catch(const std::exception& err) + { + log_warning << err.what() << std::endl; + } - deactivate(); for(auto i = scripts.begin(); i != scripts.end(); ++i) { HSQOBJECT& object = *i; @@ -238,6 +243,7 @@ Sector::parse(const Reader& sector) } update_game_objects(); + foremost_layer = calculate_foremost_layer(); } void @@ -588,7 +594,8 @@ Sector::activate(const Vector& player_pos) // spawning tux in the ground would kill him if(!is_free_of_tiles(p->get_bbox())) { - log_warning << "Tried spawning Tux in solid matter. Compensating." << std::endl; + std::string current_level = "[" + Sector::current()->get_level()->filename + "] "; + log_warning << current_level << "Tried spawning Tux in solid matter. Compensating." << std::endl; Vector npos = p->get_bbox().p1; npos.y-=32; p->move(npos); @@ -659,28 +666,24 @@ Sector::get_active_region() 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()); - } - + int layer = LAYER_BACKGROUND0; 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(tm->get_layer() > layer) { - if (std::find(secret_area_tilemaps.begin(), secret_area_tilemaps.end(), tm->get_name()) - != secret_area_tilemaps.end() || tm->is_solid()) + if( (tm->get_alpha() < 1.0) ) + { + layer = tm->get_layer() - 1; + } + else { - layer = tm->get_layer(); + layer = tm->get_layer() + 1; } } } + log_debug << "Calculated baduy falling layer was: " << layer << std::endl; return layer; }