00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_VIDEO_ANIMATION_H
00023 #define FIFE_VIDEO_ANIMATION_H
00024
00025
00026 #include <cassert>
00027 #include <map>
00028 #include <vector>
00029
00030
00031 #include "util/base/fife_stdint.h"
00032 #include "util/base/fifeclass.h"
00033 #include "util/base/sharedptr.h"
00034
00035 #include "image.h"
00036
00037
00038
00039
00040
00041
00042
00043
00044 namespace FIFE {
00045
00046 class Image;
00047
00056 class Animation : public FifeClass {
00057 public:
00060 explicit Animation();
00061
00064 ~Animation();
00065
00072 void addFrame(ImagePtr image, uint32_t duration);
00073
00080 int32_t getFrameIndex(uint32_t timestamp);
00081
00084 ImagePtr getFrame(int32_t index);
00085
00088 ImagePtr getFrameByTimestamp(uint32_t timestamp);
00089
00093 int32_t getFrameDuration(int32_t index) const;
00094
00097 uint32_t getFrameCount() const;
00098
00105 void setActionFrame(int32_t num) { m_action_frame = num; }
00106
00110 int32_t getActionFrame() const { return m_action_frame; }
00111
00119 void setDirection(uint32_t direction);
00120
00125 uint32_t getDirection() const { return m_direction; }
00126
00129 uint32_t getDuration() const { return m_animation_endtime; }
00130
00131 private:
00134 struct FrameInfo {
00135 uint32_t index;
00136 uint32_t duration;
00137 ImagePtr image;
00138 };
00139
00142 bool isValidIndex(int32_t index) const;
00143
00144
00145 std::map<uint32_t, FrameInfo> m_framemap;
00146
00147 std::vector<FrameInfo> m_frames;
00148
00149 int32_t m_action_frame;
00150
00151 int32_t m_animation_endtime;
00152
00153 uint32_t m_direction;
00154
00155 };
00156
00157 typedef SharedPtr<Animation> AnimationPtr;
00158
00159 }
00160
00161 #endif
00162