diff options
author | johndoe123 | 2014-03-11 19:54:22 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2018-07-20 06:43:33 +0000 |
commit | 21e1b08b8399bad5a8b88cf6e30b2db9edd0ad60 (patch) | |
tree | 468d6b9b3ecdfec301f30ef289ba9e863469a66b /engines/illusions/backgroundresource.cpp | |
parent | 12645cbb8cb90adb5917b554e14142bf33d0f70a (diff) | |
download | scummvm-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.cpp | 36 |
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()); } |