// $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
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)
- : BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS), mystate(STATE_IDLE), target_sector("main"), target_spawnpoint("main"), soundSource(sound_manager, "sounds/willowisp.wav")
+ : BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS), mystate(STATE_IDLE), target_sector("main"), target_spawnpoint("main")
{
reader.get("sector", target_sector);
reader.get("spawnpoint", target_spawnpoint);
countMe = false;
+ sound_manager->preload(SOUNDFILE);
}
void
WillOWisp::draw(DrawingContext& context)
{
sprite->draw(context, get_pos(), layer);
-
+
context.push_target();
context.set_target(DrawingContext::LIGHTMAP);
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");
- 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()
{
- soundSource.stop();
- soundSource.release();
+ sound_source.reset(NULL);
switch (mystate) {
case STATE_IDLE:
}
IMPLEMENT_FACTORY(WillOWisp, "willowisp")
-