X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fobject%2Fmoving_sprite.cpp;h=0c746a5bd52345503ae218beb86693a325656e23;hb=a99e13623a367ffcd0a4f125d16f90b928237f34;hp=853de73ff004f783c2af9825e490983c71728040;hpb=6e7c8fafae2311b22c78b1ea597a408396873560;p=supertux.git diff --git a/src/object/moving_sprite.cpp b/src/object/moving_sprite.cpp index 853de73ff..0c746a5bd 100644 --- a/src/object/moving_sprite.cpp +++ b/src/object/moving_sprite.cpp @@ -16,8 +16,8 @@ // 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" @@ -48,7 +48,9 @@ MovingSprite::MovingSprite(const lisp::Lisp& reader, const Vector& pos, int laye : 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); @@ -57,8 +59,11 @@ 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) { - 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("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); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); set_group(collision_group); @@ -67,9 +72,13 @@ MovingSprite::MovingSprite(const lisp::Lisp& reader, const std::string& sprite_n MovingSprite::MovingSprite(const lisp::Lisp& reader, int layer, CollisionGroup collision_group) : 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"); + 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"); + sprite = sprite_manager->create(sprite_name); bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height()); set_group(collision_group); @@ -81,10 +90,11 @@ MovingSprite::MovingSprite(const MovingSprite& other) 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 +115,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 +136,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)); +}