From: Stephen Groundwater Date: Thu, 31 Mar 2005 12:13:42 +0000 (+0000) Subject: hatch door trigger files X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=51a7e63b70778ff98cb63066f618b2a9e32cb684;p=supertux.git hatch door trigger files SVN-Revision: 2306 --- diff --git a/src/trigger/hatch.cpp b/src/trigger/hatch.cpp new file mode 100644 index 000000000..6019642bf --- /dev/null +++ b/src/trigger/hatch.cpp @@ -0,0 +1,100 @@ +// $Id$ +// +// SuperTux - A Jump'n Run +// Copyright (C) 2004 Matthias Braun + +#include "hatch.h" +#include "gameloop.h" +#include "resources.h" +#include "object_factory.h" +#include "special/sprite.h" +#include "special/sprite_manager.h" +#include "video/drawing_context.h" +#include "app/globals.h" +#include "lisp/lisp.h" +#include "lisp/writer.h" + +using namespace SuperTux; + +Hatch::Hatch(const lisp::Lisp& reader) +{ + reader.get("x", bbox.p1.x); + reader.get("y", bbox.p1.y); + bbox.set_size(64, 64); + + reader.get("sector", target_sector); + reader.get("spawnpoint", target_spawnpoint); + + sprite = sprite_manager->create("hatch"); +} + +Hatch::Hatch(int x, int y, std::string sector, std::string spawnpoint) +{ + bbox.set_pos(Vector(x, y)); + bbox.set_size(64, 64); + target_sector = sector; + target_spawnpoint = spawnpoint; + + sprite = sprite_manager->create("hatch"); +} + +Hatch::~Hatch() +{ + delete sprite; +} + +void +Hatch::write(lisp::Writer& writer) +{ + writer.start_list("hatch"); + + writer.write_float("x", bbox.p1.x); + writer.write_float("y", bbox.p1.y); + writer.write_float("width", bbox.get_width()); + writer.write_float("height", bbox.get_height()); + + writer.write_string("sector", target_sector); + writer.write_string("spawnpoint", target_spawnpoint); + + writer.end_list("hatch"); +} + +void +Hatch::action(float ) +{ + //Check if hatch animation is complete + if(sprite->check_animation()) { + GameSession::current()->respawn(target_sector, target_spawnpoint); + } +} + +void +Hatch::draw(DrawingContext& context) +{ + sprite->draw(context, bbox.p1, LAYER_TILES); +} + +void +Hatch::event(Player& , EventType type) +{ + if(type == EVENT_ACTIVATE) { + sprite->set_action("open", 1); + } +} + +IMPLEMENT_FACTORY(Hatch, "hatch"); diff --git a/src/trigger/hatch.h b/src/trigger/hatch.h new file mode 100644 index 000000000..a759e1f53 --- /dev/null +++ b/src/trigger/hatch.h @@ -0,0 +1,49 @@ +// $Id$ +// +// SuperTux - A Jump'n Run +// Copyright (C) 2004 Matthias Braun + +#include "video/surface.h" +#include "special/sprite.h" +#include "trigger_base.h" +#include "serializable.h" +#include "timer.h" + +class Hatch : public TriggerBase, public Serializable +{ +public: + Hatch(const lisp::Lisp& reader); + Hatch(int x, int y, std::string sector, std::string spawnpoint); + virtual ~Hatch(); + + virtual void write(lisp::Writer& writer); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + virtual void event(Player& player, EventType type); + +private: + std::string target_sector; + std::string target_spawnpoint; + Sprite* sprite; +}; + +#endif