X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fdart.cpp;h=992d7749cec4199ce085469ff28c527d706568fe;hb=e7042da286e68756298cc205910b35c1da551167;hp=99d5bb774c496e32277630a16dab644ae59b5f98;hpb=1ac057dac68afefe6e602f1d114becf8d7f535f2;p=supertux.git diff --git a/src/badguy/dart.cpp b/src/badguy/dart.cpp index 99d5bb774..992d7749c 100644 --- a/src/badguy/dart.cpp +++ b/src/badguy/dart.cpp @@ -1,4 +1,4 @@ -// $Id: dart.cpp 3327 2006-04-13 15:02:40Z sommer $ +// $Id$ // // Dart - Your average poison dart // Copyright (C) 2006 Christoph Sommer @@ -26,24 +26,46 @@ namespace { const float SPEED = 200; } -Dart::Dart(const lisp::Lisp& reader) : set_direction(false), parent(0) +static const std::string SOUNDFILE = "sounds/flame.wav"; + +Dart::Dart(const lisp::Lisp& reader) + : BadGuy(reader, "images/creatures/dart/dart.sprite"), parent(0) { - reader.get("x", start_position.x); - reader.get("y", start_position.y); - bbox.set_size(9, 1); - sprite = sprite_manager->create("images/creatures/dart/dart.sprite"); physic.enable_gravity(false); countMe = false; + sound_manager->preload("sounds/darthit.wav"); + sound_manager->preload("sounds/stomp.wav"); } -Dart::Dart(float pos_x, float pos_y, Direction d, const BadGuy* parent = 0) : set_direction(true), initial_direction(d), parent(parent) +Dart::Dart(const Vector& pos, Direction d, const BadGuy* parent = 0) + : BadGuy(pos, d, "images/creatures/dart/dart.sprite"), parent(parent) { - start_position.x = pos_x; - start_position.y = pos_y; - bbox.set_size(9, 1); - sprite = sprite_manager->create("images/creatures/dart/dart.sprite"); physic.enable_gravity(false); countMe = false; + sound_manager->preload("sounds/darthit.wav"); + sound_manager->preload("sounds/stomp.wav"); +} + +Dart::Dart(const Dart& other) + : BadGuy(other), parent(other.parent) +{ + sound_source.reset(sound_manager->create_sound_source(SOUNDFILE)); + sound_manager->preload("sounds/darthit.wav"); + sound_manager->preload("sounds/stomp.wav"); +} + +Dart::~Dart() +{ +} + +bool +Dart::updatePointers(const GameObject* from_object, GameObject* to_object) +{ + if (from_object == parent) { + parent = dynamic_cast(to_object); + return true; + } + return false; } void @@ -57,23 +79,37 @@ Dart::write(lisp::Writer& writer) void Dart::activate() -{ - if (set_direction) dir = initial_direction; +{ physic.set_velocity_x(dir == LEFT ? -::SPEED : ::SPEED); sprite->set_action(dir == LEFT ? "flying-left" : "flying-right"); + + sound_source.reset(sound_manager->create_sound_source(SOUNDFILE)); + sound_source->set_position(get_pos()); + sound_source->set_looping(true); + sound_source->set_gain(1.0); + sound_source->set_reference_distance(32); + sound_source->play(); } void Dart::deactivate() { + sound_source.reset(); remove_me(); } -HitResponse -Dart::collision_solid(GameObject& , const CollisionHit& ) +void +Dart::active_update(float elapsed_time) +{ + BadGuy::active_update(elapsed_time); + sound_source->set_position(get_pos()); +} + +void +Dart::collision_solid(const CollisionHit& ) { + sound_manager->play("sounds/darthit.wav", get_pos()); remove_me(); - return ABORT_MOVE; } HitResponse @@ -83,6 +119,7 @@ Dart::collision_badguy(BadGuy& badguy, const CollisionHit& ) if (&badguy == parent) { return FORCE_MOVE; } + sound_manager->play("sounds/stomp.wav", get_pos()); remove_me(); badguy.kill_fall(); return ABORT_MOVE; @@ -91,11 +128,10 @@ Dart::collision_badguy(BadGuy& badguy, const CollisionHit& ) HitResponse Dart::collision_player(Player& player, const CollisionHit& hit) { + sound_manager->play("sounds/stomp.wav", get_pos()); remove_me(); return BadGuy::collision_player(player, hit); } - - IMPLEMENT_FACTORY(Dart, "dart")