X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=lib%2Fspecial%2Fsprite.h;h=e8b79374f9882aabc0763a40c9146ff3b69856df;hb=d88eb6fed051a3c6bea58857955ec5d902e63e04;hp=3e03ee2db572ec6a1373400e16971db92b99edd3;hpb=9c511ea692d3a2339597211f08f18ea74fad35ec;p=supertux.git diff --git a/lib/special/sprite.h b/lib/special/sprite.h index 3e03ee2db..e8b79374f 100644 --- a/lib/special/sprite.h +++ b/lib/special/sprite.h @@ -22,56 +22,91 @@ #include #include - -#include "utils/lispreader.h" -#include "video/surface.h" -#include "math/vector.h" - -class Sprite -{ - private: - std::string name; - - int x_hotspot; - int y_hotspot; - - /** Frames per second */ - float fps; - - /** Number of seconds that a frame is displayed until it is switched - to the next frame */ - float frame_delay; - - float time; - - std::vector surfaces; - - void init_defaults(); - public: - /** cur has to be a pointer to data in the form of ((x-hotspot 5) - (y-hotspot 10) ...) */ - Sprite(lisp_object_t* cur); - ~Sprite(); - - void reset(); - - /** Update the sprite and process to the next frame */ - void update(float delta); - void draw(DrawingContext& context, const Vector& pos, int layer, - Uint32 drawing_effect = NONE_EFFECT); - int get_current_frame() const; - - float get_fps() { return fps; } ; - int get_frames() { return surfaces.size(); } ; - - std::string get_name() const { return name; } - int get_width() const; - int get_height() const; - - Surface* get_frame(unsigned int frame) - { if(frame < surfaces.size()) return surfaces[frame]; - else return surfaces[0]; } -}; +#include + +#include "../utils/lispreader.h" +#include "../video/surface.h" +#include "../math/vector.h" + +namespace SuperTux + { + + class Sprite + { + private: + + struct Action + { + std::string name; + + int x_hotspot; + int y_hotspot; + + /** 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; + }; + + public: + /** cur has to be a pointer to data in the form of ((x-hotspot 5) + (y-hotspot 10) ...) */ + Sprite(lisp_object_t* cur); + ~Sprite(); + + void reset(); + + /** Update the sprite and process to the next frame */ + void update(float delta); + 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); + + float get_fps() + { + return action->fps; + } ; + int get_frames() + { + return action->surfaces.size(); + } ; + + std::string get_name() const + { + return name; + } + int get_width() const; + int get_height() const; + + Surface* get_frame(unsigned int frame) + { + if(frame < action->surfaces.size()) + return action->surfaces[frame]; + else + return action->surfaces[0]; + } + private: + void init_defaults(Action* act); + void parse_action(LispReader& lispreader); + + std::string name; + + float time; + + typedef std::map Actions; + Actions actions; + + Action* action; + }; + +} //namespace SuperTux #endif /*SUPERTUX_SPRITE_H*/