X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsprite%2Fsprite.cpp;h=7b818279a641bea00a5fc2d94ea67c4e58f88f3b;hb=6f5f82abb84b33fd400c3b82a5e2be2a6cf8ce21;hp=3ab455423ea437e83977e9548557ad894fa46ab5;hpb=3715e3bc1c852448660c443876b3e3054d332d82;p=supertux.git diff --git a/src/sprite/sprite.cpp b/src/sprite/sprite.cpp index 3ab455423..7b818279a 100644 --- a/src/sprite/sprite.cpp +++ b/src/sprite/sprite.cpp @@ -24,13 +24,19 @@ #include #include + +#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) @@ -41,6 +47,8 @@ Sprite::Sprite(SpriteData& newdata) 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; @@ -86,7 +94,7 @@ Sprite::update() if(frame >= get_frames()) { frame = fmodf(frame, get_frames()); - + animation_loops--; if(animation_done()) frame = get_frames()-1; @@ -103,8 +111,11 @@ Sprite::draw(DrawingContext& context, const Vector& pos, int layer) 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 @@ -115,16 +126,16 @@ Sprite::draw_part(DrawingContext& context, const Vector& source, 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 // number sometimes... - log_warning << "frame out of range: " << frameidx << "/" << get_frames() << " at sprite: " << get_name() << "/" << get_action_name() << std::endl; + log_warning << "frame out of range: " << frameidx << "/" << get_frames() << " at sprite: " << get_name() << "/" << get_action() << std::endl; #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); @@ -142,10 +153,76 @@ Sprite::get_height() const return (int) action->surfaces[get_frame()]->get_height(); } +float +Sprite::get_current_hitbox_x_offset() const +{ + return action->x_offset; +} + +float +Sprite::get_current_hitbox_y_offset() const +{ + return action->y_offset; +} + +float +Sprite::get_current_hitbox_width() const +{ + return action->hitbox_w; +} + +float +Sprite::get_current_hitbox_height() const +{ + return action->hitbox_h; +} + +Rect +Sprite::get_current_hitbox() const +{ + return Rect(action->x_offset, action->y_offset, action->x_offset + action->hitbox_w, action->y_offset + action->hitbox_h); +} + void Sprite::set_fps(float new_fps) { 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 */