X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fmoving_sprite.cpp;h=9e5d8553958fc68928aad17242a23268a36a633b;hb=75acd4b141f45e851a492f089aa9ad24a9552409;hp=853de73ff004f783c2af9825e490983c71728040;hpb=6e7c8fafae2311b22c78b1ea597a408396873560;p=supertux.git diff --git a/src/object/moving_sprite.cpp b/src/object/moving_sprite.cpp index 853de73ff..9e5d85539 100644 --- a/src/object/moving_sprite.cpp +++ b/src/object/moving_sprite.cpp @@ -16,27 +16,19 @@ // 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. - #include + #include #include "moving_sprite.hpp" #include "video/drawing_context.hpp" #include "sprite/sprite_manager.hpp" -#include "player.hpp" #include "sector.hpp" -#include "player_status.hpp" -#include "gameobjs.hpp" -#include "statistics.hpp" #include "object_factory.hpp" -#include "level.hpp" -#include "random_generator.hpp" -#include "audio/sound_source.hpp" -#include "audio/sound_manager.hpp" -#include "timer.hpp" +#include "sprite/sprite.hpp" MovingSprite::MovingSprite(const Vector& pos, const std::string& sprite_name, int layer, CollisionGroup collision_group) - : sprite_name(sprite_name), layer(layer) + : sprite_name(sprite_name), layer(layer) { bbox.set_pos(pos); sprite = sprite_manager->create(sprite_name); @@ -45,46 +37,53 @@ MovingSprite::MovingSprite(const Vector& pos, const std::string& sprite_name, in } MovingSprite::MovingSprite(const lisp::Lisp& reader, const Vector& pos, int layer, CollisionGroup collision_group) - : layer(layer) + : layer(layer) { bbox.set_pos(pos); - if (!reader.get("sprite", sprite_name)) throw std::runtime_error("no sprite name set"); + if (!reader.get("sprite", sprite_name)) + throw std::runtime_error("no sprite name set"); + sprite = sprite_manager->create(sprite_name); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); set_group(collision_group); } MovingSprite::MovingSprite(const lisp::Lisp& reader, const std::string& sprite_name, int layer, CollisionGroup collision_group) - : sprite_name(sprite_name), layer(layer) + : sprite_name(sprite_name), layer(layer) { - if (!reader.get("x", bbox.p1.x)) throw std::runtime_error("no x position set"); - if (!reader.get("y", bbox.p1.y)) throw std::runtime_error("no y position set"); - sprite = sprite_manager->create(sprite_name); + reader.get("x", bbox.p1.x); + reader.get("y", bbox.p1.y); + reader.get("sprite", this->sprite_name); + + sprite = sprite_manager->create(this->sprite_name); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); set_group(collision_group); } MovingSprite::MovingSprite(const lisp::Lisp& reader, int layer, CollisionGroup collision_group) - : layer(layer) + : layer(layer) { - if (!reader.get("x", bbox.p1.x)) throw std::runtime_error("no x position set"); - if (!reader.get("y", bbox.p1.y)) throw std::runtime_error("no y position set"); - if (!reader.get("sprite", sprite_name)) throw std::runtime_error("no sprite name set"); + reader.get("x", bbox.p1.x); + reader.get("y", bbox.p1.y); + if (!reader.get("sprite", sprite_name)) + throw std::runtime_error("no sprite name set"); + sprite = sprite_manager->create(sprite_name); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); set_group(collision_group); } MovingSprite::MovingSprite(const MovingSprite& other) - : MovingObject(other), layer(other.layer) + : MovingObject(other), layer(other.layer) { sprite = new Sprite(*other.sprite); } -MovingSprite& +MovingSprite& MovingSprite::operator=(const MovingSprite& other) { - if (this == &other) return *this; + if (this == &other) + return *this; delete sprite; sprite = new Sprite(*other.sprite); @@ -105,19 +104,19 @@ MovingSprite::draw(DrawingContext& context) sprite->draw(context, get_pos(), layer); } -void +void MovingSprite::update(float ) { } -void +void MovingSprite::set_action(const std::string& action, int loops) { sprite->set_action(action, loops); set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); } -void +void MovingSprite::set_action_centered(const std::string& action, int loops) { Vector old_size = bbox.get_size(); @@ -126,3 +125,13 @@ MovingSprite::set_action_centered(const std::string& action, int loops) set_pos(get_pos() - (bbox.get_size() - old_size) / 2); } +void +MovingSprite::set_action(const std::string& action, int loops, AnchorPoint anchorPoint) +{ + Rect old_bbox = bbox; + sprite->set_action(action, loops); + float w = sprite->get_current_hitbox_width(); + float h = sprite->get_current_hitbox_height(); + set_size(w, h); + set_pos(get_anchor_pos(old_bbox, w, h, anchorPoint)); +}