#include <cassert>
#include <stdexcept>
+
+#include "video/surface.hpp"
#include "sprite.hpp"
#include "video/drawing_context.hpp"
#include "log.hpp"
#include "timer.hpp"
Sprite::Sprite(SpriteData& newdata)
- : data(newdata), frame(0), animation_loops(-1)
+ : data(newdata),
+ frame(0),
+ animation_loops(-1),
+ angle(0.0f),
+ color(1.0f, 1.0f, 1.0f, 1.0f)
{
action = data.get_action("normal");
if(!action)
action = data.actions.begin()->second;
- last_ticks = real_time;
+ last_ticks = game_time;
}
Sprite::Sprite(const Sprite& other)
: data(other.data), frame(other.frame),
animation_loops(other.animation_loops),
+ angle(0.0f),
+ color(1.0f, 1.0f, 1.0f, 1.0f),
action(other.action)
{
- last_ticks = real_time;
+ last_ticks = game_time;
}
Sprite::~Sprite()
if(animation_done())
return;
- float frame_inc = action->fps * (real_time - last_ticks);
- last_ticks = real_time;
+ float frame_inc = action->fps * (game_time - last_ticks);
+ last_ticks = game_time;
frame += frame_inc;
if(frame >= get_frames()) {
frame = fmodf(frame, get_frames());
-
+
animation_loops--;
if(animation_done())
frame = get_frames()-1;
log_warning << "frame out of range: " << (int)frame << "/" << get_frames() << " at " << get_name() << "/" << get_action() << std::endl;
else
context.draw_surface(action->surfaces[(int)frame],
- pos - Vector(action->x_offset, action->y_offset),
- layer + action->z_order);
+ pos - Vector(action->x_offset, action->y_offset),
+ angle,
+ color,
+ blend,
+ layer + action->z_order);
}
void
update();
int frameidx = (int) frame;
-
+
if(frameidx >= get_frames() || frameidx < 0) {
#ifndef DEBUG
// in optimized mode we get some small rounding errors in floating point
#endif
frameidx = get_frames() - 1;
}
-
+
context.draw_surface_part(action->surfaces[frameidx], source, size,
pos - Vector(action->x_offset, action->y_offset),
layer + action->z_order);
action->fps = new_fps;
}
+void
+Sprite::set_angle(float a)
+{
+ angle = a;
+}
+
+float
+Sprite::get_angle() const
+{
+ return angle;
+}
+
+void
+Sprite::set_color(const Color& c)
+{
+ color = c;
+}
+
+Color
+Sprite::get_color() const
+{
+ return color;
+}
+
+void
+Sprite::set_blend(const Blend& b)
+{
+ blend = b;
+}
+
+Blend
+Sprite::get_blend() const
+{
+ return blend;
+}
+/* EOF */