aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/animator_v2.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2008-05-02 17:14:59 +0000
committerJohannes Schickel2008-05-02 17:14:59 +0000
commita829244b8ce5f5444e5c109aba6b8744d6327d7b (patch)
treef2a59570bece7b9d401f1a3b56fd889ca4786f4b /engines/kyra/animator_v2.cpp
parentc84b3719575cc26ad8f68c41191bd6e9f79f5249 (diff)
downloadscummvm-rg350-a829244b8ce5f5444e5c109aba6b8744d6327d7b.tar.gz
scummvm-rg350-a829244b8ce5f5444e5c109aba6b8744d6327d7b.tar.bz2
scummvm-rg350-a829244b8ce5f5444e5c109aba6b8744d6327d7b.zip
- Renamed ScreenAnimator -> Animator_v1
- Moved addItemToAnimList and deleteItemAnimEntry to KyraEngine_v2. svn-id: r31831
Diffstat (limited to 'engines/kyra/animator_v2.cpp')
-rw-r--r--engines/kyra/animator_v2.cpp64
1 files changed, 63 insertions, 1 deletions
diff --git a/engines/kyra/animator_v2.cpp b/engines/kyra/animator_v2.cpp
index ed2c37dae2..10f7b02579 100644
--- a/engines/kyra/animator_v2.cpp
+++ b/engines/kyra/animator_v2.cpp
@@ -24,13 +24,23 @@
*/
#include "kyra/kyra_v2.h"
-#include "kyra/screen.h"
+#include "kyra/screen_v2.h"
#include "kyra/wsamovie.h"
#include "common/endian.h"
namespace Kyra {
+void KyraEngine_v2::allocAnimObjects(int actors, int anims, int items) {
+ debugC(9, kDebugLevelAnimator, "KyraEngine_v2::allocAnimObjects(%d, %d, %d)", actors, anims, items);
+ _animObjects = new AnimObj[actors+anims+items];
+ assert(_animObjects);
+
+ _animActor = _animObjects;
+ _animAnims = _animObjects + actors;
+ _animItems = _animObjects + actors + anims;
+}
+
KyraEngine_v2::AnimObj *KyraEngine_v2::initAnimList(AnimObj *list, AnimObj *entry) {
debugC(9, kDebugLevelAnimator, "KyraEngine_v2::initAnimList(%p, %p)", (const void*)list, (const void*)entry);
entry->nextObject = list;
@@ -135,5 +145,57 @@ void KyraEngine_v2::flagAnimObjsSpecialRefresh() {
curEntry->specialRefresh = 1;
}
+void KyraEngine_v2::addItemToAnimList(int item) {
+ debugC(9, kDebugLevelAnimator, "KyraEngine_v2::addItemToAnimList(%d)", item);
+ assert(item < _itemListSize);
+
+ restorePage3();
+
+ AnimObj *animObj = _animItems + item;
+
+ animObj->enabled = 1;
+ animObj->needRefresh = 1;
+
+ int itemId = _itemList[item].id;
+
+ animObj->xPos2 = animObj->xPos1 = _itemList[item].x;
+ animObj->yPos2 = animObj->yPos1 = _itemList[item].y;
+
+ animObj->shapePtr = getShapePtr(getItemShape(itemId));
+ animSetupPaletteEntry(animObj);
+ animObj->shapeIndex2 = animObj->shapeIndex1 = getItemShape(itemId);
+
+ int scaleY, scaleX;
+ scaleY = scaleX = getScale(animObj->xPos1, animObj->yPos1);
+
+ uint8 *shapePtr = getShapePtr(getItemShape(itemId));
+ animObj->xPos3 = (animObj->xPos2 -= (screen_v2()->getShapeScaledWidth(shapePtr, scaleX) >> 1));
+ animObj->yPos3 = (animObj->yPos2 -= screen_v2()->getShapeScaledHeight(shapePtr, scaleY));
+
+ animObj->width2 = animObj->height2 = 0;
+
+ _animList = addToAnimListSorted(_animList, animObj);
+ animObj->needRefresh = 1;
+}
+
+void KyraEngine_v2::deleteItemAnimEntry(int item) {
+ debugC(9, kDebugLevelAnimator, "KyraEngine_v2::deleteItemAnimEntry(%d)", item);
+ assert(item < _itemListSize);
+
+ AnimObj *animObj = _animItems + item;
+
+ restorePage3();
+
+ animObj->shapePtr = 0;
+ animObj->shapeIndex1 = 0xFFFF;
+ animObj->shapeIndex2 = 0xFFFF;
+ animObj->needRefresh = 1;
+
+ refreshAnimObjectsIfNeed();
+
+ animObj->enabled = 0;
+ _animList = deleteAnimListEntry(_animList, animObj);
+}
+
} // end of namespace Kyra