[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