diff options
author | Denis Kasak | 2009-07-05 03:24:46 +0000 |
---|---|---|
committer | Denis Kasak | 2009-07-05 03:24:46 +0000 |
commit | 6c3e9f5151fac4906c2fabc2e26ee39bc7043664 (patch) | |
tree | 3b27df90db22f61f7b6b6d2c05b8e7717f05146f /engines/draci/animation.h | |
parent | 960740fe83ee1d1e4cea33f732df4b698d22c479 (diff) | |
download | scummvm-rg350-6c3e9f5151fac4906c2fabc2e26ee39bc7043664.tar.gz scummvm-rg350-6c3e9f5151fac4906c2fabc2e26ee39bc7043664.tar.bz2 scummvm-rg350-6c3e9f5151fac4906c2fabc2e26ee39bc7043664.zip |
* API change for Animation and AnimObj; AnimObj is now a proper class and each instance handles its own animation. Animation handles adding, fetching and deleting of AnimObjs (probably needs a namechange).
* Implemented actual animation (previously only the first frame was display)
* Implemented animation starting, stoping, looping
* Loaded looping dragon animation as a test
svn-id: r42114
Diffstat (limited to 'engines/draci/animation.h')
-rw-r--r-- | engines/draci/animation.h | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/engines/draci/animation.h b/engines/draci/animation.h index c69947ea28..d4be8b5ba3 100644 --- a/engines/draci/animation.h +++ b/engines/draci/animation.h @@ -30,44 +30,81 @@ namespace Draci { -enum { kOverlayImage = -1 }; +enum { kOverlayImage = -1, kUnused = -2 }; class DraciEngine; -struct AnimObj { - uint _id; +class AnimObj { +public: + AnimObj(DraciEngine *vm); + ~AnimObj(); + + uint getZ(); + void setZ(uint z); + + void setID(int id); + int getID(); + + void setDelay(uint delay); + + void nextFrame(bool force = false); + void drawFrame(Surface *surface); + + void addFrame(Drawable *frame); + uint getFramesNum(); + void deleteFrames(); + + bool isPlaying(); + void setPlaying(bool playing); + + bool isLooping(); + void setLooping(bool looping); + + +private: + + uint nextFrameNum(); + + int _id; uint _currentFrame; uint _z; - bool _playing; + uint _delay; + uint _tick; + bool _playing; + bool _looping; Common::Array<Drawable*> _frames; + + DraciEngine *_vm; }; +// TODO: Probably needs a namechange to AnimationManager or similar since AnimObj now +// acts as an animation object + class Animation { public: Animation(DraciEngine *vm) : _vm(vm) {}; ~Animation() { deleteAll(); } - void addAnimation(uint id, uint z, bool playing = false); - void addFrame(uint id, Drawable *frame); + AnimObj *addAnimation(int id, uint z, bool playing = false); void addOverlay(Drawable *overlay, uint z); - void play(uint id); - void stop(uint id); + void play(int id); + void stop(int id); - void deleteAnimation(uint id); + void deleteAnimation(int id); void deleteAll(); void drawScene(Surface *surf); - Common::List<AnimObj>::iterator getAnimation(uint id); + AnimObj *getAnimation(int id); private: - void insertAnimation(AnimObj &animObj); + void insertAnimation(AnimObj *animObj); DraciEngine *_vm; - Common::List<AnimObj> _animObjects; + Common::List<AnimObj *> _animObjects; }; } |