X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fmoving_sprite.cpp;h=9e5d8553958fc68928aad17242a23268a36a633b;hb=75acd4b141f45e851a492f089aa9ad24a9552409;hp=aad264ac05e68439b2e85ce57260126cb66ac470;hpb=4a486d92343d1824b311c234e9321e08f280fe68;p=supertux.git diff --git a/src/object/moving_sprite.cpp b/src/object/moving_sprite.cpp index aad264ac0..9e5d85539 100644 --- a/src/object/moving_sprite.cpp +++ b/src/object/moving_sprite.cpp @@ -23,20 +23,12 @@ #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,7 +37,7 @@ 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)) @@ -57,25 +49,22 @@ MovingSprite::MovingSprite(const lisp::Lisp& reader, const Vector& pos, int laye } 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"); + reader.get("x", bbox.p1.x); + reader.get("y", bbox.p1.y); + reader.get("sprite", this->sprite_name); - sprite = sprite_manager->create(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"); + 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"); @@ -85,7 +74,7 @@ MovingSprite::MovingSprite(const lisp::Lisp& reader, int layer, CollisionGroup c } MovingSprite::MovingSprite(const MovingSprite& other) - : MovingObject(other), layer(other.layer) + : MovingObject(other), layer(other.layer) { sprite = new Sprite(*other.sprite); } @@ -135,3 +124,14 @@ MovingSprite::set_action_centered(const std::string& action, int loops) set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); 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)); +}