aboutsummaryrefslogtreecommitdiff
path: root/engines/sludge/cursors.cpp
diff options
context:
space:
mode:
authorSimei Yin2017-07-21 08:16:17 +0200
committerSimei Yin2017-07-21 11:21:45 +0200
commitfd2cf90bb3eab1050d0513813c72a9e26a8166d5 (patch)
tree3179a75e87527fffaec880b2876beec2b88ddfb6 /engines/sludge/cursors.cpp
parent6858d3c6aefe1f39089a56ef3f2521b86d8abeb0 (diff)
downloadscummvm-rg350-fd2cf90bb3eab1050d0513813c72a9e26a8166d5.tar.gz
scummvm-rg350-fd2cf90bb3eab1050d0513813c72a9e26a8166d5.tar.bz2
scummvm-rg350-fd2cf90bb3eab1050d0513813c72a9e26a8166d5.zip
SLUDGE: Objectify cursor manager
Diffstat (limited to 'engines/sludge/cursors.cpp')
-rw-r--r--engines/sludge/cursors.cpp91
1 files changed, 64 insertions, 27 deletions
diff --git a/engines/sludge/cursors.cpp b/engines/sludge/cursors.cpp
index 87a2bf7179..7c16e8fa19 100644
--- a/engines/sludge/cursors.cpp
+++ b/engines/sludge/cursors.cpp
@@ -23,7 +23,9 @@
#include "sludge/allfiles.h"
#include "sludge/cursors.h"
#include "sludge/event.h"
+#include "sludge/freeze.h"
#include "sludge/graphics.h"
+#include "sludge/newfatal.h"
#include "sludge/people.h"
#include "sludge/sprites.h"
#include "sludge/sprbanks.h"
@@ -32,58 +34,93 @@
namespace Sludge {
-PersonaAnimation *mouseCursorAnim;
-int mouseCursorFrameNum = 0;
-int mouseCursorCountUp = 0;
+CursorManager::CursorManager(SludgeEngine *vm) {
+ _vm = vm;
+ _mouseCursorAnim = makeNullAnim();
+ _mouseCursorFrameNum = 0;
+ _mouseCursorCountUp = 0;
+}
+
+CursorManager::~CursorManager() {
+
+}
-void pickAnimCursor(PersonaAnimation *pp) {
- deleteAnim(mouseCursorAnim);
- mouseCursorAnim = pp;
- mouseCursorFrameNum = 0;
- mouseCursorCountUp = 0;
+void CursorManager::pickAnimCursor(PersonaAnimation *pp) {
+ deleteAnim(_mouseCursorAnim);
+ _mouseCursorAnim = pp;
+ _mouseCursorFrameNum = 0;
+ _mouseCursorCountUp = 0;
}
-void displayCursor() {
- if (mouseCursorAnim && mouseCursorAnim->numFrames) {
+void CursorManager::displayCursor() {
+ if (_mouseCursorAnim && _mouseCursorAnim->numFrames) {
- int spriteNum = mouseCursorAnim->frames[mouseCursorFrameNum].frameNum;
+ int spriteNum = _mouseCursorAnim->frames[_mouseCursorFrameNum].frameNum;
int flipMe = 0;
if (spriteNum < 0) {
spriteNum = -spriteNum;
flipMe = 1;
- if (spriteNum >= mouseCursorAnim->theSprites->bank.total)
+ if (spriteNum >= _mouseCursorAnim->theSprites->bank.total)
spriteNum = 0;
} else {
- if (spriteNum >= mouseCursorAnim->theSprites->bank.total)
+ if (spriteNum >= _mouseCursorAnim->theSprites->bank.total)
flipMe = 2;
}
if (flipMe != 2) {
if (flipMe) {
- g_sludge->_gfxMan->flipFontSprite(
- g_sludge->_evtMan->mouseX(), g_sludge->_evtMan->mouseY(),
- mouseCursorAnim->theSprites->bank.sprites[spriteNum],
- mouseCursorAnim->theSprites->bank.myPalette /* ( spritePalette&) NULL*/);
+ _vm->_gfxMan->flipFontSprite(
+ _vm->_evtMan->mouseX(), _vm->_evtMan->mouseY(),
+ _mouseCursorAnim->theSprites->bank.sprites[spriteNum],
+ _mouseCursorAnim->theSprites->bank.myPalette /* ( spritePalette&) NULL*/);
} else {
- g_sludge->_gfxMan->fontSprite(
- g_sludge->_evtMan->mouseX(), g_sludge->_evtMan->mouseY(),
- mouseCursorAnim->theSprites->bank.sprites[spriteNum],
- mouseCursorAnim->theSprites->bank.myPalette /* ( spritePalette&) NULL*/);
+ _vm->_gfxMan->fontSprite(
+ _vm->_evtMan->mouseX(), _vm->_evtMan->mouseY(),
+ _mouseCursorAnim->theSprites->bank.sprites[spriteNum],
+ _mouseCursorAnim->theSprites->bank.myPalette /* ( spritePalette&) NULL*/);
}
}
- if (++mouseCursorCountUp >= mouseCursorAnim->frames[mouseCursorFrameNum].howMany) {
- mouseCursorCountUp = 0;
- mouseCursorFrameNum++;
- mouseCursorFrameNum %= mouseCursorAnim->numFrames;
+ if (++_mouseCursorCountUp >= _mouseCursorAnim->frames[_mouseCursorFrameNum].howMany) {
+ _mouseCursorCountUp = 0;
+ _mouseCursorFrameNum++;
+ _mouseCursorFrameNum %= _mouseCursorAnim->numFrames;
}
}
}
-void pasteCursor(int x, int y, PersonaAnimation *c) {
+void CursorManager::pasteCursor(int x, int y, PersonaAnimation *c) {
if (c->numFrames)
- g_sludge->_gfxMan->pasteSpriteToBackDrop(x, y, c->theSprites->bank.sprites[c->frames[0].frameNum], c->theSprites->bank.myPalette);
+ _vm->_gfxMan->pasteSpriteToBackDrop(x, y, c->theSprites->bank.sprites[c->frames[0].frameNum], c->theSprites->bank.myPalette);
+}
+
+void CursorManager::freeze(FrozenStuffStruct *frozenStuff) {
+ frozenStuff->mouseCursorAnim = _mouseCursorAnim;
+ frozenStuff->mouseCursorFrameNum = _mouseCursorFrameNum;
+ _mouseCursorAnim = makeNullAnim();
+ _mouseCursorFrameNum = 0;
+}
+
+void CursorManager::resotre(FrozenStuffStruct *frozenStuff) {
+ deleteAnim(_mouseCursorAnim);
+ _mouseCursorAnim = frozenStuff->mouseCursorAnim;
+ _mouseCursorFrameNum = frozenStuff->mouseCursorFrameNum;
+}
+
+void CursorManager::saveCursor(Common::WriteStream *stream) {
+ saveAnim(_mouseCursorAnim, stream);
+ stream->writeUint16BE(_mouseCursorFrameNum);
+}
+
+bool CursorManager::loadCursor(Common::SeekableReadStream *stream) {
+ _mouseCursorAnim = new PersonaAnimation;
+ if (!checkNew(_mouseCursorAnim))
+ return false;
+ if (!loadAnim(_mouseCursorAnim, stream))
+ return false;
+ _mouseCursorFrameNum = stream->readUint16BE();
+ return true;
}
} // End of namespace Sludge