projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Updated addon repository URL and improved debug output on download
[supertux.git]
/
src
/
trigger
/
door.cpp
diff --git
a/src/trigger/door.cpp
b/src/trigger/door.cpp
index
2f44ac2
..
4423511
100644
(file)
--- 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 <http://www.gnu.org/licenses/>.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
+#include "trigger/door.hpp"
+
+#include <sstream>
+
#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 "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(),
Door::Door(const Reader& reader) :
state(CLOSED),
target_sector(),
target_spawnpoint(),
+ script(),
sprite(),
stay_open_timer()
{
sprite(),
stay_open_timer()
{
@@
-33,17
+39,20
@@
Door::Door(const Reader& reader) :
reader.get("sector", target_sector);
reader.get("spawnpoint", target_spawnpoint);
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());
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(),
}
Door::Door(int x, int y, std::string sector, std::string spawnpoint) :
state(CLOSED),
target_sector(),
target_spawnpoint(),
+ script(),
sprite(),
stay_open_timer()
{
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;
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());
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()
}
Door::~Door()
@@
-107,7
+116,7
@@
Door::event(Player& , EventType type)
// if door was activated, start opening it
if (type == EVENT_ACTIVATE) {
state = OPENING;
// 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;
sprite->set_action("opening", 1);
}
break;
@@
-121,7
+130,7
@@
Door::event(Player& , EventType type)
}
HitResponse
}
HitResponse
-Door::collision(GameObject& other, const CollisionHit& hit)
+Door::collision(GameObject& other, const CollisionHit& hit
_
)
{
switch (state) {
case CLOSED:
{
switch (state) {
case CLOSED:
@@
-135,7
+144,14
@@
Door::collision(GameObject& other, const CollisionHit& hit)
if (player) {
state = CLOSING;
sprite->set_action("closing", 1);
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;
}
}
break;
@@
-143,9
+159,7
@@
Door::collision(GameObject& other, const CollisionHit& hit)
break;
}
break;
}
- return TriggerBase::collision(other, hit);
+ return TriggerBase::collision(other, hit
_
);
}
}
-IMPLEMENT_FACTORY(Door, "door");
-
/* EOF */
/* EOF */