X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftrigger%2Fdoor.cpp;h=442351191c49ebfcb1f7c2c7e08de2ec15e11567;hb=HEAD;hp=2f44ac28039b97d349827d19ef0594ac1f3a6459;hpb=c1277f5b7db9f55d1d28f658b4e804f32b76f0ce;p=supertux.git
diff --git a/src/trigger/door.cpp b/src/trigger/door.cpp
index 2f44ac280..442351191 100644
--- a/src/trigger/door.cpp
+++ b/src/trigger/door.cpp
@@ -14,17 +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()
{
@@ -33,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()
{
@@ -51,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()
@@ -107,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;
@@ -121,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:
@@ -135,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;
@@ -143,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 */