X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ftrigger%2Fdoor.cpp;h=442351191c49ebfcb1f7c2c7e08de2ec15e11567;hb=5f860f41a3f362de0a5dda951ff2ba4ebff95681;hp=59091f781f5cc27941337b07c4536f47f5e069e1;hpb=18c69f4aa24d496f84a088d60c18b180c293dace;p=supertux.git diff --git a/src/trigger/door.cpp b/src/trigger/door.cpp index 59091f781..442351191 100644 --- a/src/trigger/door.cpp +++ b/src/trigger/door.cpp @@ -14,18 +14,23 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include "trigger/door.hpp" + +#include + #include "audio/sound_manager.hpp" #include "object/player.hpp" #include "sprite/sprite_manager.hpp" #include "supertux/game_session.hpp" #include "supertux/object_factory.hpp" -#include "trigger/door.hpp" +#include "supertux/sector.hpp" #include "util/reader.hpp" Door::Door(const Reader& reader) : state(CLOSED), target_sector(), target_spawnpoint(), + script(), sprite(), stay_open_timer() { @@ -34,17 +39,20 @@ Door::Door(const Reader& reader) : reader.get("sector", target_sector); reader.get("spawnpoint", target_spawnpoint); - sprite = sprite_manager->create("images/objects/door/door.sprite"); + reader.get("script", script); + + sprite = SpriteManager::current()->create("images/objects/door/door.sprite"); sprite->set_action("closed"); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); - sound_manager->preload("sounds/door.wav"); + SoundManager::current()->preload("sounds/door.wav"); } Door::Door(int x, int y, std::string sector, std::string spawnpoint) : state(CLOSED), target_sector(), target_spawnpoint(), + script(), sprite(), stay_open_timer() { @@ -52,11 +60,11 @@ Door::Door(int x, int y, std::string sector, std::string spawnpoint) : target_sector = sector; target_spawnpoint = spawnpoint; - sprite = sprite_manager->create("images/objects/door/door.sprite"); + sprite = SpriteManager::current()->create("images/objects/door/door.sprite"); sprite->set_action("closed"); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); - sound_manager->preload("sounds/door.wav"); + SoundManager::current()->preload("sounds/door.wav"); } Door::~Door() @@ -108,7 +116,7 @@ Door::event(Player& , EventType type) // if door was activated, start opening it if (type == EVENT_ACTIVATE) { state = OPENING; - sound_manager->play("sounds/door.wav"); + SoundManager::current()->play("sounds/door.wav"); sprite->set_action("opening", 1); } break; @@ -122,7 +130,7 @@ Door::event(Player& , EventType type) } HitResponse -Door::collision(GameObject& other, const CollisionHit& hit) +Door::collision(GameObject& other, const CollisionHit& hit_) { switch (state) { case CLOSED: @@ -136,7 +144,14 @@ Door::collision(GameObject& other, const CollisionHit& hit) if (player) { state = CLOSING; sprite->set_action("closing", 1); - GameSession::current()->respawn(target_sector, target_spawnpoint); + if(!script.empty()) { + std::istringstream stream(script); + Sector::current()->run_script(stream, "Door"); + } + + if(!target_sector.empty()) { + GameSession::current()->respawn(target_sector, target_spawnpoint); + } } } break; @@ -144,9 +159,7 @@ Door::collision(GameObject& other, const CollisionHit& hit) break; } - return TriggerBase::collision(other, hit); + return TriggerBase::collision(other, hit_); } -IMPLEMENT_FACTORY(Door, "door"); - /* EOF */