X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftrigger%2Fswitch.cpp;h=e01e887ee05855d8bdabbf0bd26520ce101bf7be;hb=84abfaeb33c5bf8dac0cfd9499d9d4c3e7d39881;hp=068b0f45b5e1f47c6b5292eb6c11dc6b0874f2c2;hpb=173b5b4d42c3ad52d1563e6a631390b3390dadbe;p=supertux.git diff --git a/src/trigger/switch.cpp b/src/trigger/switch.cpp index 068b0f45b..e01e887ee 100644 --- a/src/trigger/switch.cpp +++ b/src/trigger/switch.cpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux - Switch Trigger // Copyright (C) 2006 Christoph Sommer // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,19 +12,24 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// along with this program. If not, see . #include +#include -#include "switch.hpp" -#include "object_factory.hpp" +#include "audio/sound_manager.hpp" #include "sprite/sprite.hpp" #include "sprite/sprite_manager.hpp" -#include "sector.hpp" +#include "supertux/object_factory.hpp" +#include "supertux/sector.hpp" +#include "trigger/switch.hpp" + +namespace { +const std::string SWITCH_SOUND = "sounds/switch.ogg"; +} -Switch::Switch(const lisp::Lisp& reader) - : state(OFF) +Switch::Switch(const Reader& reader) : + state(OFF) { if (!reader.get("x", bbox.p1.x)) throw std::runtime_error("no x position set"); if (!reader.get("y", bbox.p1.y)) throw std::runtime_error("no y position set"); @@ -35,22 +38,11 @@ Switch::Switch(const lisp::Lisp& reader) bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); if (!reader.get("script", script)) throw std::runtime_error("no script set"); + sound_manager->preload( SWITCH_SOUND ); } Switch::~Switch() { - delete sprite; -} - -void -Switch::write(lisp::Writer& writer) -{ - writer.start_list("switch"); - writer.write_float("x", bbox.p1.x); - writer.write_float("y", bbox.p1.y); - writer.write_string("sprite", sprite_name); - writer.write_string("script", script); - writer.end_list("switch"); } void @@ -61,23 +53,25 @@ Switch::update(float ) break; case TURN_ON: if(sprite->animation_done()) { - std::istringstream stream(script); - Sector::current()->run_script(stream, "Switch"); + std::istringstream stream(script); + std::ostringstream location; + location << "switch" << bbox.p1; + Sector::current()->run_script(stream, location.str()); - sprite->set_action("on", 1); - state = ON; + sprite->set_action("on", 1); + state = ON; } break; case ON: if(sprite->animation_done()) { - sprite->set_action("turnoff", 1); - state = TURN_OFF; + sprite->set_action("turnoff", 1); + state = TURN_OFF; } break; case TURN_OFF: if(sprite->animation_done()) { - sprite->set_action("off"); - state = OFF; + sprite->set_action("off"); + state = OFF; } break; } @@ -96,8 +90,9 @@ Switch::event(Player& , EventType type) switch (state) { case OFF: - sprite->set_action("turnon", 1); - state = TURN_ON; + sprite->set_action("turnon", 1); + sound_manager->play( SWITCH_SOUND ); + state = TURN_ON; break; case TURN_ON: break; @@ -111,3 +106,4 @@ Switch::event(Player& , EventType type) IMPLEMENT_FACTORY(Switch, "switch"); +/* EOF */