X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=lib%2Fspecial%2Fsprite.h;h=4906aff5f3763ed5dcaaf033d540d51ee5ee78b4;hb=be7f9f65018ed21515d389e8bd50f6f1eb988375;hp=e8b79374f9882aabc0763a40c9146ff3b69856df;hpb=d88eb6fed051a3c6bea58857955ec5d902e63e04;p=supertux.git diff --git a/lib/special/sprite.h b/lib/special/sprite.h index e8b79374f..4906aff5f 100644 --- a/lib/special/sprite.h +++ b/lib/special/sprite.h @@ -45,10 +45,6 @@ namespace SuperTux /** Frames per second */ float fps; - /** Number of seconds that a frame is displayed until it is switched - to the next frame */ - float frame_delay; - std::vector surfaces; }; @@ -58,33 +54,43 @@ namespace SuperTux Sprite(lisp_object_t* cur); ~Sprite(); - void reset(); - - /** Update the sprite and process to the next frame */ - void update(float delta); + /** Draw sprite, automatically calculates next frame */ void draw(DrawingContext& context, const Vector& pos, int layer, Uint32 drawing_effect = NONE_EFFECT); - int get_current_frame() const; /** Set action (or state) */ - void set_action(std::string& act); + void set_action(std::string act); + + /* Start an animation + -1 - for infinite + 0 - stopped + 1,2,3 - one, two, three times... */ + void start_animation(int loops); + /** Check if animation is stopped or not */ + bool check_animation(); + /** Reverse the animation */ + void reverse_animation(); float get_fps() - { - return action->fps; - } ; + { return action->fps; } + /** Get current action total frames */ int get_frames() - { - return action->surfaces.size(); - } ; - + { return action->surfaces.size(); } + /** Get sprite's name */ std::string get_name() const - { - return name; - } - int get_width() const; - int get_height() const; - + { return name; } + /** Get current action name */ + std::string get_action_name() const + { return action->name; } + int get_width(); + int get_height(); + + /** Get current frame */ + int get_frame() + { return (int)frame; } + /** Set current frame */ + void set_frame(int frame_) + { if(frame_ > get_frames()) frame = 0; else frame = frame_; } Surface* get_frame(unsigned int frame) { if(frame < action->surfaces.size()) @@ -96,14 +102,21 @@ namespace SuperTux void init_defaults(Action* act); void parse_action(LispReader& lispreader); + void update(); + void reset(); + std::string name; - float time; + float frame; + int animation_loops; + bool animation_reversed; + float last_tick; typedef std::map Actions; Actions actions; Action* action; + std::string next_action; }; } //namespace SuperTux