X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fdart.cpp;h=37389fca58a1e9686768234b713bb306744ded3a;hb=1f5ff04e5283398473b4ac033258b17af0ed08f0;hp=1c60a4448f2c73c94e87b8d630d80281e4c713d7;hpb=78e9b27b7059c9b9b16a7f871ab71f751ec75323;p=supertux.git diff --git a/src/badguy/dart.cpp b/src/badguy/dart.cpp index 1c60a4448..37389fca5 100644 --- a/src/badguy/dart.cpp +++ b/src/badguy/dart.cpp @@ -1,12 +1,10 @@ -// $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 -// 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,44 +12,50 @@ // 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 "badguy/dart.hpp" -#include "dart.hpp" +#include "audio/sound_manager.hpp" +#include "audio/sound_source.hpp" +#include "sprite/sprite.hpp" +#include "supertux/object_factory.hpp" namespace { - const float SPEED = 200; +const float DART_SPEED = 200; } -Dart::Dart(const lisp::Lisp& reader) - : BadGuy(reader, "images/creatures/dart/dart.sprite"), set_direction(false), parent(0), soundSource(0) +static const std::string DART_SOUND = "sounds/flame.wav"; + +Dart::Dart(const Reader& reader) : + BadGuy(reader, "images/creatures/dart/dart.sprite"), + parent(0), + sound_source() { physic.enable_gravity(false); countMe = false; + SoundManager::current()->preload(DART_SOUND); + SoundManager::current()->preload("sounds/darthit.wav"); + SoundManager::current()->preload("sounds/stomp.wav"); } -Dart::Dart(const Vector& pos, Direction d, const BadGuy* parent = 0) - : BadGuy(pos, "images/creatures/dart/dart.sprite"), set_direction(false), parent(0), soundSource(0) +Dart::Dart(const Vector& pos, Direction d, const BadGuy* parent_ = 0) : + BadGuy(pos, d, "images/creatures/dart/dart.sprite"), + parent(parent_), + sound_source() { physic.enable_gravity(false); countMe = false; -} - -Dart::Dart(const Dart& other) - : BadGuy(other), set_direction(other.set_direction), initial_direction(other.initial_direction), parent(other.parent) -{ - soundSource = sound_manager->create_sound_source("sounds/flame.wav"); + SoundManager::current()->preload(DART_SOUND); + SoundManager::current()->preload("sounds/darthit.wav"); + SoundManager::current()->preload("sounds/stomp.wav"); } Dart::~Dart() { - delete soundSource; } -bool +bool Dart::updatePointers(const GameObject* from_object, GameObject* to_object) { if (from_object == parent) { @@ -62,78 +66,63 @@ Dart::updatePointers(const GameObject* from_object, GameObject* to_object) } void -Dart::write(lisp::Writer& writer) +Dart::initialize() { - writer.start_list("dart"); - writer.write_float("x", start_position.x); - writer.write_float("y", start_position.y); - writer.end_list("dart"); + physic.set_velocity_x(dir == LEFT ? -::DART_SPEED : ::DART_SPEED); + sprite->set_action(dir == LEFT ? "flying-left" : "flying-right"); } 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"); - - 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; - } +{ + sound_source = SoundManager::current()->create_sound_source(DART_SOUND); + 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()); + SoundManager::current()->play("sounds/darthit.wav", get_pos()); remove_me(); - return ABORT_MOVE; } -HitResponse +HitResponse Dart::collision_badguy(BadGuy& badguy, const CollisionHit& ) { // ignore collisions with parent if (&badguy == parent) { return FORCE_MOVE; } - sound_manager->play("sounds/stomp.wav", get_pos()); + SoundManager::current()->play("sounds/stomp.wav", get_pos()); remove_me(); badguy.kill_fall(); return ABORT_MOVE; } -HitResponse +HitResponse Dart::collision_player(Player& player, const CollisionHit& hit) { - sound_manager->play("sounds/stomp.wav", get_pos()); + SoundManager::current()->play("sounds/stomp.wav", get_pos()); remove_me(); return BadGuy::collision_player(player, hit); } -IMPLEMENT_FACTORY(Dart, "dart") - +/* EOF */