aboutsummaryrefslogtreecommitdiff
path: root/engines/sword1/mouse.cpp
diff options
context:
space:
mode:
authordhewg2011-03-12 12:24:14 +0100
committerdhewg2011-03-13 08:24:19 +0100
commit40333617ee4a0fede7c8cdec81a025ccab06e9e3 (patch)
treec4e35b9eb1f921f527469d82f3b973c683c17343 /engines/sword1/mouse.cpp
parent1566ef32b6bfd321415df09cc5e7b83ce56a1de0 (diff)
downloadscummvm-rg350-40333617ee4a0fede7c8cdec81a025ccab06e9e3.tar.gz
scummvm-rg350-40333617ee4a0fede7c8cdec81a025ccab06e9e3.tar.bz2
scummvm-rg350-40333617ee4a0fede7c8cdec81a025ccab06e9e3.zip
SWORD1: Don't set the same cursor on every frame
Removes unnecessary overhead on the backend when the cursor has just one frame.
Diffstat (limited to 'engines/sword1/mouse.cpp')
-rw-r--r--engines/sword1/mouse.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/engines/sword1/mouse.cpp b/engines/sword1/mouse.cpp
index 751b27efc0..87e476e504 100644
--- a/engines/sword1/mouse.cpp
+++ b/engines/sword1/mouse.cpp
@@ -197,6 +197,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
free(_currentPtr);
_currentPtr = NULL;
}
+
if (ptrId) {
MousePtr *lugg = NULL;
MousePtr *ptr = (MousePtr*)_resMan->openFetchRes(ptrId);
@@ -284,6 +285,7 @@ void Mouse::createPointer(uint32 ptrId, uint32 luggageId) {
void Mouse::setPointer(uint32 resId, uint32 rate) {
_currentPtrId = resId;
_frame = 0;
+ _activeFrame = -1;
createPointer(resId, _currentLuggageId);
@@ -298,15 +300,24 @@ void Mouse::setPointer(uint32 resId, uint32 rate) {
void Mouse::setLuggage(uint32 resId, uint32 rate) {
_currentLuggageId = resId;
_frame = 0;
+ _activeFrame = -1;
+
createPointer(_currentPtrId, resId);
}
void Mouse::animate() {
if ((Logic::_scriptVars[MOUSE_STATUS] == 1) || (_mouseOverride && _currentPtr)) {
_frame = (_frame + 1) % _currentPtr->numFrames;
+
+ if (_activeFrame == _frame)
+ return;
+
uint8 *ptrData = (uint8*)_currentPtr + sizeof(MousePtr);
ptrData += _frame * _currentPtr->sizeX * _currentPtr->sizeY;
+
CursorMan.replaceCursor(ptrData, _currentPtr->sizeX, _currentPtr->sizeY, _currentPtr->hotSpotX, _currentPtr->hotSpotY, 255);
+
+ _activeFrame = _frame;
}
}