aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/backgroundresource.cpp
diff options
context:
space:
mode:
authorjohndoe1232014-03-11 19:54:22 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit21e1b08b8399bad5a8b88cf6e30b2db9edd0ad60 (patch)
tree468d6b9b3ecdfec301f30ef289ba9e863469a66b /engines/illusions/backgroundresource.cpp
parent12645cbb8cb90adb5917b554e14142bf33d0f70a (diff)
downloadscummvm-rg350-21e1b08b8399bad5a8b88cf6e30b2db9edd0ad60.tar.gz
scummvm-rg350-21e1b08b8399bad5a8b88cf6e30b2db9edd0ad60.tar.bz2
scummvm-rg350-21e1b08b8399bad5a8b88cf6e30b2db9edd0ad60.zip
ILLUSIONS: More work on the camera and background classes
Diffstat (limited to 'engines/illusions/backgroundresource.cpp')
-rw-r--r--engines/illusions/backgroundresource.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/engines/illusions/backgroundresource.cpp b/engines/illusions/backgroundresource.cpp
index 11a5957f28..3ac2a58bda 100644
--- a/engines/illusions/backgroundresource.cpp
+++ b/engines/illusions/backgroundresource.cpp
@@ -22,6 +22,7 @@
#include "illusions/illusions.h"
#include "illusions/backgroundresource.h"
+#include "illusions/camera.h"
#include "common/str.h"
namespace Illusions {
@@ -215,8 +216,27 @@ void BackgroundItem::unpause() {
/* TODO
currTime = krnxxxGetCurrentTime();
_vm->_camera.panStartTime = currTime;
- _vm->backgroundItem_refreshPan();
*/
+ _vm->_backgroundItems->refreshPan();
+ }
+}
+
+void BackgroundItem::refreshPan(WidthHeight &dimensions) {
+ Common::Point screenOffs = _vm->_camera->getScreenOffset();
+ int x = dimensions._width - 640;
+ int y = dimensions._height - 480;
+ for (uint i = 0; i < _bgRes->_bgInfosCount; ++i) {
+ const BgInfo &bgInfo = _bgRes->_bgInfos[i];
+ if (bgInfo._flags & 1) {
+ _panPoints[i] = screenOffs;
+ } else {
+ Common::Point newOffs(0, 0);
+ if (x > 0 && bgInfo._surfInfo._dimensions._width - 640 > 0)
+ newOffs.x = screenOffs.x * (bgInfo._surfInfo._dimensions._width - 640) / x;
+ if (y > 0 && bgInfo._surfInfo._dimensions._height - 480 > 0)
+ newOffs.y = screenOffs.y * (bgInfo._surfInfo._dimensions._height - 480) / y;
+ _panPoints[i] = newOffs;
+ }
}
}
@@ -261,6 +281,20 @@ BackgroundResource *BackgroundItems::getActiveBgResource() {
return 0;
}
+WidthHeight BackgroundItems::getMasterBgDimensions() {
+ BackgroundItem *backgroundItem = findActiveBackground();
+ int16 index = backgroundItem->_bgRes->findMasterBgIndex();
+ return backgroundItem->_bgRes->_bgInfos[index - 1]._surfInfo._dimensions;
+}
+
+void BackgroundItems::refreshPan() {
+ BackgroundItem *backgroundItem = findActiveBackground();
+ if (backgroundItem) {
+ WidthHeight dimensions = getMasterBgDimensions();
+ backgroundItem->refreshPan(dimensions);
+ }
+}
+
BackgroundItem *BackgroundItems::debugFirst() {
return *(_items.begin());
}