X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftrigger%2Fdoor.cpp;h=442351191c49ebfcb1f7c2c7e08de2ec15e11567;hb=HEAD;hp=c1418d89d552471a8f9b4671dc7446cf4812b595;hpb=729bc6717bf68314dc9fad25db3a9f728062263e;p=supertux.git
diff --git a/src/trigger/door.cpp b/src/trigger/door.cpp
index c1418d89d..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,7 +159,7 @@ Door::collision(GameObject& other, const CollisionHit& hit)
break;
}
- return TriggerBase::collision(other, hit);
+ return TriggerBase::collision(other, hit_);
}
/* EOF */