X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftrigger%2Fdoor.cpp;h=442351191c49ebfcb1f7c2c7e08de2ec15e11567;hb=HEAD;hp=b86fa0fbaf655d06cd1120eb5ff752fbf8cee9da;hpb=08813a74da6ac1fd045a105e4e8105f1d7f716f0;p=supertux.git
diff --git a/src/trigger/door.cpp b/src/trigger/door.cpp
index b86fa0fba..442351191 100644
--- a/src/trigger/door.cpp
+++ b/src/trigger/door.cpp
@@ -14,40 +14,57 @@
// 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)
+ state(CLOSED),
+ target_sector(),
+ target_spawnpoint(),
+ script(),
+ sprite(),
+ stay_open_timer()
{
reader.get("x", bbox.p1.x);
reader.get("y", bbox.p1.y);
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)
+ state(CLOSED),
+ target_sector(),
+ target_spawnpoint(),
+ script(),
+ sprite(),
+ stay_open_timer()
{
bbox.set_pos(Vector(x, y));
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()
@@ -99,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;
@@ -113,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:
@@ -127,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;
@@ -135,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 */