aboutsummaryrefslogtreecommitdiff
path: root/engines/draci/animation.h
diff options
context:
space:
mode:
authorDenis Kasak2009-07-05 03:24:46 +0000
committerDenis Kasak2009-07-05 03:24:46 +0000
commit6c3e9f5151fac4906c2fabc2e26ee39bc7043664 (patch)
tree3b27df90db22f61f7b6b6d2c05b8e7717f05146f /engines/draci/animation.h
parent960740fe83ee1d1e4cea33f732df4b698d22c479 (diff)
downloadscummvm-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.h61
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;
};
}