[Scummvm-cvs-logs] SF.net SVN: scummvm:[42068] scummvm/branches/gsoc2009-draci/engines/draci
dkasak13 at users.sourceforge.net
dkasak13 at users.sourceforge.net
Fri Jul 3 19:50:22 CEST 2009
Revision: 42068
http://scummvm.svn.sourceforge.net/scummvm/?rev=42068&view=rev
Author: dkasak13
Date: 2009-07-03 17:50:22 +0000 (Fri, 03 Jul 2009)
Log Message:
-----------
Implemented beginning of the animation engine.
Modified Paths:
--------------
scummvm/branches/gsoc2009-draci/engines/draci/animation.cpp
scummvm/branches/gsoc2009-draci/engines/draci/animation.h
Modified: scummvm/branches/gsoc2009-draci/engines/draci/animation.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/animation.cpp 2009-07-03 17:39:13 UTC (rev 42067)
+++ scummvm/branches/gsoc2009-draci/engines/draci/animation.cpp 2009-07-03 17:50:22 UTC (rev 42068)
@@ -23,7 +23,87 @@
*
*/
+#include "draci/draci.h"
+#include "draci/animation.h"
+
namespace Draci {
+void Animation::addAnimation(uint id, uint z) {
+
+ AnimObj *obj = new AnimObj();
+ obj->_id = id;
+ obj->_z = z;
+ obj->_currentFrame = 0;
+
+ insertAnimation(*obj);
}
+Common::List<AnimObj>::iterator Animation::getAnimation(uint id) {
+
+ Common::List<AnimObj>::iterator it;
+
+ for (it = _animObjects.begin(); it != _animObjects.end(); ++it) {
+ if (it->_id == id) {
+ return it;
+ }
+ }
+
+ return _animObjects.end();
+}
+
+void Animation::insertAnimation(AnimObj &animObj) {
+
+ Common::List<AnimObj>::iterator it;
+
+ for (it = _animObjects.begin(); it != _animObjects.end(); ++it) {
+ if (animObj._z < it->_z)
+ break;
+ }
+
+ _animObjects.insert(it, animObj);
+}
+
+void Animation::addFrame(uint id, Drawable *frame) {
+
+ Common::List<AnimObj>::iterator it = getAnimation(id);
+
+ it->_frames.push_back(frame);
+}
+
+void Animation::addOverlay(Drawable *overlay, uint z) {
+ AnimObj *obj = new AnimObj();
+ obj->_id = kOverlayImage;
+ obj->_z = z;
+ obj->_currentFrame = 0;
+ obj->_frames.push_back(overlay);
+
+ insertAnimation(*obj);
+}
+
+void Animation::drawScene(Surface *surf) {
+
+ Common::List<AnimObj>::iterator it;
+
+ for (it = _animObjects.begin(); it != _animObjects.end(); ++it) {
+ if(it->_id == kOverlayImage) {
+ it->_frames[it->_currentFrame]->draw(surf, false);
+ }
+ else {
+ it->_frames[it->_currentFrame]->draw(surf, true);
+ }
+ }
+}
+
+void Animation::deleteAnimation(uint id) {
+
+ Common::List<AnimObj>::iterator it = getAnimation(id);
+
+ _animObjects.erase(it);
+}
+
+void Animation::deleteAll() {
+
+ _animObjects.clear();
+}
+
+}
Modified: scummvm/branches/gsoc2009-draci/engines/draci/animation.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/animation.h 2009-07-03 17:39:13 UTC (rev 42067)
+++ scummvm/branches/gsoc2009-draci/engines/draci/animation.h 2009-07-03 17:50:22 UTC (rev 42068)
@@ -26,8 +26,42 @@
#ifndef DRACI_ANIMATION_H
#define DRACI_ANIMATION_H
+#include "draci/sprite.h"
+
namespace Draci {
+enum { kOverlayImage = -1 };
+
+class DraciEngine;
+
+struct AnimObj {
+ uint _id;
+ uint _currentFrame;
+ uint _z;
+ Common::Array<Drawable*> _frames;
+};
+
+class Animation {
+
+public:
+ Animation(DraciEngine *vm) : _vm(vm) {};
+
+ void addAnimation(uint id, uint z = 0);
+ void addFrame(uint id, Drawable *frame);
+ void addOverlay(Drawable *overlay, uint z = 0);
+ void deleteAnimation(uint id);
+ void deleteAll();
+ void drawScene(Surface *surf);
+ Common::List<AnimObj>::iterator getAnimation(uint id);
+
+private:
+
+ void insertAnimation(AnimObj &animObj);
+
+ DraciEngine *_vm;
+ Common::List<AnimObj> _animObjects;
+};
+
}
#endif // DRACI_ANIMATION_H
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list