#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"
sector_table(),
scripts(),
ambient_light( 1.0f, 1.0f, 1.0f, 1.0f ),
+ foremost_layer(),
gameobjects(),
moving_objects(),
spawnpoints(),
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;
update_game_objects();
- if(solid_tilemaps.size() < 1) { log_warning << "sector '" << name << "' does not contain a solid tile layer." << std::endl; }
+ if(solid_tilemaps.empty()) { log_warning << "sector '" << name << "' does not contain a solid tile layer." << std::endl; }
fix_old_tiles();
if(!camera) {
}
update_game_objects();
+ foremost_layer = calculate_foremost_layer();
}
void
update_game_objects();
- if(solid_tilemaps.size() < 1) { log_warning << "sector '" << name << "' does not contain a solid tile layer." << std::endl; }
+ if(solid_tilemaps.empty()) { log_warning << "sector '" << name << "' does not contain a solid tile layer." << std::endl; }
fix_old_tiles();
update_game_objects();
add_object(std::make_shared<BonusBlock>(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<Brick>(pos, tile->getData(), "images/objects/bonus_block/brickWeb.sprite") );
+ } else if( ( id == 78 ) || ( id == 105 ) ){
add_object( std::make_shared<Brick>(pos, tile->getData(), "images/objects/bonus_block/brickIce.sprite") );
} else if( ( id == 77 ) || ( id == 104 ) ){
add_object( std::make_shared<Brick>(pos, tile->getData(), "images/objects/bonus_block/brick.sprite") );
// 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);
camera->get_translation() + Vector(1600, 1200) + Vector(SCREEN_WIDTH,SCREEN_HEIGHT));
}
+int
+Sector::calculate_foremost_layer()
+{
+ int layer = LAYER_BACKGROUND0;
+ for(auto i = gameobjects.begin(); i != gameobjects.end(); ++i)
+ {
+ TileMap* tm = dynamic_cast<TileMap*>(i->get());
+ if (!tm) continue;
+ if(tm->get_layer() > layer)
+ {
+ if( (tm->get_alpha() < 1.0) )
+ {
+ layer = tm->get_layer() - 1;
+ }
+ else
+ {
+ layer = tm->get_layer() + 1;
+ }
+ }
+ }
+ log_debug << "Calculated baduy falling layer was: " << layer << std::endl;
+ return layer;
+}
+
+int
+Sector::get_foremost_layer()
+{
+ return foremost_layer;
+}
+
void
Sector::update(float elapsed_time)
{
}
bool
-Sector::add_bullet(const Vector& pos, const PlayerStatus* player_status, float xm, Direction dir)
-{
- // TODO remove this function and move these checks elsewhere...
- if((player_status->bonus == FIRE_BONUS &&
- (int)bullets.size() >= player_status->max_fire_bullets) ||
- (player_status->bonus == ICE_BONUS &&
- (int)bullets.size() >= player_status->max_ice_bullets))
- return false;
- auto new_bullet = std::make_shared<Bullet>(pos, xm, dir, player_status->bonus);
- add_object(new_bullet);
-
- SoundManager::current()->play("sounds/shoot.wav");
-
- return true;
-}
-
-bool
Sector::add_smoke_cloud(const Vector& pos)
{
add_object(std::make_shared<SmokeCloud>(pos));
}
}
+void
+Sector::resume_music()
+{
+ if(SoundManager::current()->get_current_music() == music)
+ {
+ SoundManager::current()->resume_music(3.2f);
+ }
+ else
+ {
+ SoundManager::current()->stop_music();
+ SoundManager::current()->play_music(music, true);
+ }
+}
+
MusicType
Sector::get_music_type()
{