X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fdart.cpp;h=bfed64a6d42596eec38ab35b51ff66664ebf42aa;hb=198f758764fff064a47630b5d0f1e3d6aabe95a8;hp=8e508d9db66bee15f9bbe866153a0fe8f690cd45;hpb=58eb3364f724b2100859fd39da9bba5a9a09cafc;p=supertux.git diff --git a/src/badguy/dart.cpp b/src/badguy/dart.cpp index 8e508d9db..bfed64a6d 100644 --- a/src/badguy/dart.cpp +++ b/src/badguy/dart.cpp @@ -1,7 +1,7 @@ // $Id$ // // Dart - Your average poison dart -// Copyright (C) 2006 Christoph Sommer +// 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 @@ -26,38 +26,41 @@ namespace { const float SPEED = 200; } -Dart::Dart(const lisp::Lisp& reader) : set_direction(false), parent(0), soundSource(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); - sprite = sprite_manager->create("images/creatures/dart/dart.sprite"); - bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); physic.enable_gravity(false); countMe = false; + sound_manager->preload(SOUNDFILE); + 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), soundSource(0) +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; - sprite = sprite_manager->create("images/creatures/dart/dart.sprite"); - bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); physic.enable_gravity(false); countMe = false; + sound_manager->preload(SOUNDFILE); + sound_manager->preload("sounds/darthit.wav"); + sound_manager->preload("sounds/stomp.wav"); } Dart::Dart(const Dart& other) - : BadGuy(other), set_direction(other.set_direction), initial_direction(other.initial_direction), parent(other.parent) + : BadGuy(other), parent(other.parent) { - soundSource = sound_manager->create_sound_source("sounds/flame.wav"); + sound_manager->preload(SOUNDFILE); + sound_manager->preload("sounds/darthit.wav"); + sound_manager->preload("sounds/stomp.wav"); } Dart::~Dart() { - delete soundSource; } -bool +bool Dart::updatePointers(const GameObject* from_object, GameObject* to_object) { if (from_object == parent) { @@ -77,50 +80,45 @@ Dart::write(lisp::Writer& writer) } void -Dart::activate() -{ - if (set_direction) dir = initial_direction; +Dart::initialize() +{ physic.set_velocity_x(dir == LEFT ? -::SPEED : ::SPEED); sprite->set_action(dir == LEFT ? "flying-left" : "flying-right"); +} - delete soundSource; - soundSource = sound_manager->create_sound_source("sounds/flame.wav"); - if(soundSource) { - soundSource->set_position(get_pos()); - soundSource->set_looping(true); - soundSource->set_gain(1.0); - soundSource->set_reference_distance(32); - soundSource->play(); - } else { - log_warning << "Couldn't start Dart ambient sound" << std::endl; - } +void +Dart::activate() +{ + 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() -{ - delete soundSource; - soundSource = 0; +{ + sound_source.reset(); remove_me(); } -void +void Dart::active_update(float elapsed_time) { BadGuy::active_update(elapsed_time); - if (soundSource) soundSource->set_position(get_pos()); + sound_source->set_position(get_pos()); } - -HitResponse -Dart::collision_solid(GameObject& , const CollisionHit& ) +void +Dart::collision_solid(const CollisionHit& ) { - sound_manager->play("sounds/stomp.wav", get_pos()); + sound_manager->play("sounds/darthit.wav", get_pos()); remove_me(); - return ABORT_MOVE; } -HitResponse +HitResponse Dart::collision_badguy(BadGuy& badguy, const CollisionHit& ) { // ignore collisions with parent @@ -133,7 +131,7 @@ Dart::collision_badguy(BadGuy& badguy, const CollisionHit& ) return ABORT_MOVE; } -HitResponse +HitResponse Dart::collision_player(Player& player, const CollisionHit& hit) { sound_manager->play("sounds/stomp.wav", get_pos()); @@ -142,4 +140,3 @@ Dart::collision_player(Player& player, const CollisionHit& hit) } IMPLEMENT_FACTORY(Dart, "dart") -