X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsprite%2Fsprite.hpp;h=a43df0a16d7154dc1882ab569c95f0c0e3a88e70;hb=eca1813742e9f0fc71268a0a2c0071380e9b850d;hp=1c166326f250e15ffa562b2397e2b2d9f7f3b4fc;hpb=86181b0a14d89cf45daf97199c3556c4dd1ee7b7;p=supertux.git diff --git a/src/sprite/sprite.hpp b/src/sprite/sprite.hpp index 1c166326f..a43df0a16 100644 --- a/src/sprite/sprite.hpp +++ b/src/sprite/sprite.hpp @@ -1,7 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -12,7 +12,7 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// +// // 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. @@ -24,11 +24,16 @@ #include #include -#include "video/surface.hpp" #include "math/vector.hpp" +#include "math/rect.hpp" #include "sprite_data.hpp" +#include "video/color.hpp" +#include "video/drawing_context.hpp" +class Surface; class DrawingContext; +class Color; +class Blend; class Sprite { @@ -46,11 +51,18 @@ public: /** Set action (or state) */ void set_action(const std::string& act, int loops = -1); + /** Set number of animation cycles until animation stops */ + void set_animation_loops(int loops = -1) + { animation_loops = loops; } + + /** Set framerate */ + void set_fps(float new_fps); + /* Stop animation */ void stop_animation() { animation_loops = 0; } /** Check if animation is stopped or not */ - bool check_animation(); + bool animation_done(); float get_fps() const { return action->fps; } @@ -61,18 +73,45 @@ public: const std::string& get_name() const { return data.name; } /** Get current action name */ - const std::string& get_action_name() const + const std::string& get_action() const { return action->name; } int get_width() const; int get_height() const; + /** return x-offset of current action's hitbox, relative to start of image */ + float get_current_hitbox_x_offset() const; + /** return y-offset of current action's hitbox, relative to start of image */ + float get_current_hitbox_y_offset() const; + /** return width of current action's hitbox */ + float get_current_hitbox_width() const; + /** return height of current action's hitbox */ + float get_current_hitbox_height() const; + /** return current action's hitbox, relative to 0,0 */ + Rect get_current_hitbox() const; + + /** Set the angle of the sprite rotation in degree */ + void set_angle(float angle); + + /** Get the angle of the sprite rotation in degree */ + float get_angle() const; + + void set_color(const Color& color); + + Color get_color() const; + + void set_blend(const Blend& blend); + + Blend get_blend() const; + /** Get current frame */ int get_frame() const { return (int)frame; } /** Set current frame */ - void set_frame(int frame_) - { if(frame_ > get_frames()) frame = 0; else frame = frame_; } + void set_frame(int frame) + { + this->frame = (frame % get_frames()); + } Surface* get_frame(unsigned int frame) { assert(frame < action->surfaces.size()); @@ -85,8 +124,11 @@ private: SpriteData& data; float frame; - int animation_loops; - Uint32 last_ticks; + int animation_loops; + float last_ticks; + float angle; + Color color; + Blend blend; SpriteData::Action* action; };