// 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 <config.h>
+
#include <stdexcept>
#include "moving_sprite.hpp"
: 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)
{
- 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);
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);
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);
sprite->draw(context, get_pos(), layer);
}
-void
+void
MovingSprite::update(float )
{
}
+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
+MovingSprite::set_action_centered(const std::string& action, int loops)
+{
+ Vector old_size = bbox.get_size();
+ sprite->set_action(action, loops);
+ set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height());
+ set_pos(get_pos() - (bbox.get_size() - old_size) / 2);
+}