-// $Id: willowisp.cpp 3117 2006-03-25 17:19:54Z sommer $
-//
+// $Id$
+//
// SuperTux - "Will-O-Wisp" Badguy
// Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
//
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// 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
#include <config.h>
#include "willowisp.hpp"
-#include "msg.hpp"
+#include "log.hpp"
#include "game_session.hpp"
static const float FLYSPEED = 64; /**< speed in px per second */
static const float TRACK_RANGE = 384; /**< at what distance to start tracking the player */
static const float VANISH_RANGE = 512; /**< at what distance to stop tracking and vanish */
+static const std::string SOUNDFILE = "sounds/willowisp.wav";
WillOWisp::WillOWisp(const lisp::Lisp& reader)
- : mystate(STATE_IDLE), target_sector("main"), target_spawnpoint("main"), soundSource(0)
+ : BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS), mystate(STATE_IDLE), target_sector("main"), target_spawnpoint("main")
{
- reader.get("x", start_position.x);
- reader.get("y", start_position.y);
reader.get("sector", target_sector);
reader.get("spawnpoint", target_spawnpoint);
- bbox.set_size(32, 32);
- sprite = sprite_manager->create("images/creatures/willowisp/willowisp.sprite");
countMe = false;
-}
-
-WillOWisp::~WillOWisp()
-{
- delete soundSource;
+ sound_manager->preload(SOUNDFILE);
}
void
void
WillOWisp::draw(DrawingContext& context)
{
- sprite->draw(context, get_pos(), LAYER_OBJECTS);
-
+ sprite->draw(context, get_pos(), layer);
+
context.push_target();
context.set_target(DrawingContext::LIGHTMAP);
- sprite->draw(context, get_pos(), LAYER_OBJECTS);
-
+ sprite->draw(context, get_pos(), layer);
+
context.pop_target();
}
mystate = STATE_TRACKING;
}
}
-
+
if (mystate == STATE_TRACKING) {
if (dist.norm() <= VANISH_RANGE) {
Vector dir = dist.unit();
mystate = STATE_VANISHING;
sprite->set_action("vanishing", 1);
}
- soundSource->set_position(get_pos());
+ sound_source->set_position(get_pos());
}
if (mystate == STATE_WARPING) {
remove_me();
}
}
-
+
}
void
{
sprite->set_action("idle");
- delete soundSource;
- soundSource = sound_manager->create_sound_source("sounds/willowisp.ogg");
- if(!soundSource) {
- msg_warning("Couldn't start WillOWisp sound");
- return;
- }
- soundSource->set_position(get_pos());
- soundSource->set_looping(true);
- soundSource->set_gain(2.0);
- soundSource->set_reference_distance(32);
- soundSource->play();
+ sound_source.reset(sound_manager->create_sound_source(SOUNDFILE));
+ sound_source->set_position(get_pos());
+ sound_source->set_looping(true);
+ sound_source->set_gain(2.0);
+ sound_source->set_reference_distance(32);
+ sound_source->play();
}
void
WillOWisp::deactivate()
{
- delete soundSource;
- soundSource = 0;
+ sound_source.reset(NULL);
+
+ switch (mystate) {
+ case STATE_IDLE:
+ break;
+ case STATE_TRACKING:
+ mystate = STATE_IDLE;
+ break;
+ case STATE_WARPING:
+ case STATE_VANISHING:
+ remove_me();
+ break;
+ }
}
void
}
IMPLEMENT_FACTORY(WillOWisp, "willowisp")
-