aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/game.cpp
diff options
context:
space:
mode:
authorStrangerke2015-11-16 00:31:09 +0100
committerStrangerke2015-11-16 00:31:09 +0100
commitec3a4b994af521dd2f15c74d0aebcb4034157d9d (patch)
tree9d254f87f4d1e5b2064d14a797d06af14d0efb7e /engines/mads/game.cpp
parent03fe7c6b86a0191845398284beb5d2daa3fc2eaa (diff)
downloadscummvm-rg350-ec3a4b994af521dd2f15c74d0aebcb4034157d9d.tar.gz
scummvm-rg350-ec3a4b994af521dd2f15c74d0aebcb4034157d9d.tar.bz2
scummvm-rg350-ec3a4b994af521dd2f15c74d0aebcb4034157d9d.zip
MADS: Some work on Camera
Diffstat (limited to 'engines/mads/game.cpp')
-rw-r--r--engines/mads/game.cpp69
1 files changed, 64 insertions, 5 deletions
diff --git a/engines/mads/game.cpp b/engines/mads/game.cpp
index 71750075a9..5ffe3ec9e6 100644
--- a/engines/mads/game.cpp
+++ b/engines/mads/game.cpp
@@ -58,7 +58,7 @@ Game *Game::init(MADSEngine *vm) {
Game::Game(MADSEngine *vm)
: _vm(vm), _surface(nullptr), _objects(vm), _scene(vm),
- _screenObjects(vm), _player(vm) {
+ _screenObjects(vm), _player(vm) {
_sectionNumber = 1;
_priorSectionNumber = 0;
_loadGameSlot = -1;
@@ -82,6 +82,7 @@ Game::Game(MADSEngine *vm)
_winStatus = 0;
_widepipeCtr = 0;
_fx = kTransitionNone;
+ _panningSpeed = 1; // Medium speed
// Load the inventory object list
_objects.load();
@@ -218,6 +219,10 @@ void Game::sectionLoop() {
}
_scene.loadScene(_scene._nextSceneId, _aaName, 0);
+ camInitDefault();
+ camSetSpeed();
+
+
_vm->_sound->pauseNewCommands();
if (!_player._spritesLoaded) {
@@ -640,10 +645,64 @@ void Game::syncTimers(SyncType slaveType, int slaveId, SyncType masterType, int
}
void Game::camPanTo(Camera *camera, int target) {
- warning("TODO: Game::camPanTo");
- if (camera) {
- // Incomplete
- camera->_panMode = 1;
+ if (!camera)
+ return;
+
+ if (camera->_panAllowedFl) {
+ camera->_activeFl = true;
+ camera->_manualFl = true;
+ camera->_target = target;
+ camera->_timer = _scene._frameStartTime;
}
}
+
+void Game::camInitDefault() {
+ _camX._activeFl = false;
+ _camY._activeFl = false;
+
+ _camX._panAllowedFl = (_scene._sceneInfo->_width > MADS_SCREEN_WIDTH);
+ _camY._panAllowedFl = (_scene._sceneInfo->_height > MADS_SCENE_HEIGHT);
+
+ if (_camX._panAllowedFl) {
+ _camX._manualFl = false;
+ _camX._rate = 4;
+ _camX._speed = 4;
+ _camX._target = 0;
+ _camX._distOffCenter = 80;
+ _camX._startTolerance = 80;
+ _camX._endTolerance = 4;
+ _camX._timer = _scene._frameStartTime;
+ }
+
+ if (_camY._panAllowedFl) {
+ _camY._manualFl = true;
+ _camY._rate = 4;
+ _camY._speed = 2;
+ _camY._target = 0;
+ _camY._distOffCenter = 80;
+ _camY._startTolerance = 60;
+ _camY._endTolerance = 4;
+ _camY._timer = _scene._frameStartTime;
+ }
+}
+
+void Game::camSetSpeed() {
+ switch (_panningSpeed) {
+ case 1:
+ _camX._speed = 8;
+ _camY._speed = 4;
+ break;
+
+ case 2:
+ _camX._speed = 320;
+ _camY._speed = 160;
+ break;
+
+ default:
+ _camX._speed = 4;
+ _camY._speed = 2;
+ break;
+ }
+}
+
} // End of namespace MADS