From d0b2e561947b24455b71c9686240bdaa63427b7c Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 29 May 2003 23:44:24 +0000 Subject: more camera spliting svn-id: r8121 --- scumm/camera.cpp | 257 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 129 insertions(+), 128 deletions(-) (limited to 'scumm/camera.cpp') diff --git a/scumm/camera.cpp b/scumm/camera.cpp index 5e21944ef1..7a9fab4714 100644 --- a/scumm/camera.cpp +++ b/scumm/camera.cpp @@ -147,167 +147,168 @@ void Scumm::clampCameraPos(ScummVM::Point *pt) { } void Scumm::moveCamera() { - if (_features & GF_AFTER_V7) { - ScummVM::Point old = camera._cur; - Actor *a = NULL; + int pos = camera._cur.x; + int actorx, t; + Actor *a = NULL; + + camera._cur.x &= 0xFFF8; - if (camera._follows) { - a = derefActor(camera._follows, "moveCamera"); - if (abs(camera._cur.x - a->x) > VAR(VAR_CAMERA_THRESHOLD_X) || - abs(camera._cur.y - a->y) > VAR(VAR_CAMERA_THRESHOLD_Y)) { + if (camera._cur.x < VAR(VAR_CAMERA_MIN_X)) { + if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) + camera._cur.x = (short) VAR(VAR_CAMERA_MIN_X); + else + camera._cur.x += 8; + cameraMoved(); + return; + } + + if (camera._cur.x > VAR(VAR_CAMERA_MAX_X)) { + if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) + camera._cur.x = (short) VAR(VAR_CAMERA_MAX_X); + else + camera._cur.x -= 8; + cameraMoved(); + return; + } + + if (camera._mode == CM_FOLLOW_ACTOR) { + a = derefActor(camera._follows, "moveCamera"); + + actorx = a->x; + t = (actorx >> 3) - _screenStartStrip; + + if (t < camera._leftTrigger || t > camera._rightTrigger) { + if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) { + if (t > 35) + camera._dest.x = actorx + 80; + if (t < 5) + camera._dest.x = actorx - 80; + } else camera._movingToActor = true; - if (VAR(VAR_CAMERA_THRESHOLD_X) == 0) - camera._cur.x = a->x; - if (VAR(VAR_CAMERA_THRESHOLD_Y) == 0) - camera._cur.y = a->y; - clampCameraPos(&camera._cur); - } - } else { - camera._movingToActor = false; } + } - if (camera._movingToActor) { - VAR(VAR_CAMERA_DEST_X) = camera._dest.x = a->x; - VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = a->y; - } + if (camera._movingToActor) { + a = derefActor(camera._follows, "moveCamera(2)"); + camera._dest.x = a->x; + } - assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); + if (camera._dest.x < VAR(VAR_CAMERA_MIN_X)) + camera._dest.x = (short) VAR(VAR_CAMERA_MIN_X); - clampCameraPos(&camera._dest); + if (camera._dest.x > VAR(VAR_CAMERA_MAX_X)) + camera._dest.x = (short) VAR(VAR_CAMERA_MAX_X); - if (camera._cur.x < camera._dest.x) { - camera._cur.x += (short) VAR(VAR_CAMERA_SPEED_X); - if (camera._cur.x > camera._dest.x) - camera._cur.x = camera._dest.x; - } + if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) { + camera._cur.x = camera._dest.x; + } else { + if (camera._cur.x < camera._dest.x) + camera._cur.x += 8; + if (camera._cur.x > camera._dest.x) + camera._cur.x -= 8; + } - if (camera._cur.x > camera._dest.x) { - camera._cur.x -= (short) VAR(VAR_CAMERA_SPEED_X); - if (camera._cur.x < camera._dest.x) - camera._cur.x = camera._dest.x; - } + /* a is set a bit above */ + if (camera._movingToActor && (camera._cur.x >> 3) == (a->x >> 3)) { + camera._movingToActor = false; + } - if (camera._cur.y < camera._dest.y) { - camera._cur.y += (short) VAR(VAR_CAMERA_SPEED_Y); - if (camera._cur.y > camera._dest.y) - camera._cur.y = camera._dest.y; - } + cameraMoved(); - if (camera._cur.y > camera._dest.y) { - camera._cur.y -= (short) VAR(VAR_CAMERA_SPEED_Y); - if (camera._cur.y < camera._dest.y) - camera._cur.y = camera._dest.y; - } + if (VAR_SCROLL_SCRIPT != 0xFF && VAR(VAR_SCROLL_SCRIPT) && pos != camera._cur.x) { + if (_features & GF_AFTER_V2) + VAR(VAR_CAMERA_POS_X) = camera._cur.x / 8; + else + VAR(VAR_CAMERA_POS_X) = camera._cur.x; + runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); + } +} - if (camera._cur.x == camera._dest.x && camera._cur.y == camera._dest.y) { +void Scumm_v7::moveCamera() { + ScummVM::Point old = camera._cur; + Actor *a = NULL; + + if (camera._follows) { + a = derefActor(camera._follows, "moveCamera"); + if (abs(camera._cur.x - a->x) > VAR(VAR_CAMERA_THRESHOLD_X) || + abs(camera._cur.y - a->y) > VAR(VAR_CAMERA_THRESHOLD_Y)) { + camera._movingToActor = true; + if (VAR(VAR_CAMERA_THRESHOLD_X) == 0) + camera._cur.x = a->x; + if (VAR(VAR_CAMERA_THRESHOLD_Y) == 0) + camera._cur.y = a->y; + clampCameraPos(&camera._cur); + } + } else { + camera._movingToActor = false; + } - camera._movingToActor = false; - camera._accel.x = camera._accel.y = 0; - VAR(VAR_CAMERA_SPEED_X) = VAR(VAR_CAMERA_SPEED_Y) = 0; - } else { + if (camera._movingToActor) { + VAR(VAR_CAMERA_DEST_X) = camera._dest.x = a->x; + VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = a->y; + } - camera._accel.x += (short) VAR(VAR_CAMERA_ACCEL_X); - camera._accel.y += (short) VAR(VAR_CAMERA_ACCEL_Y); + assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); - VAR(VAR_CAMERA_SPEED_X) += camera._accel.x / 100; - VAR(VAR_CAMERA_SPEED_Y) += camera._accel.y / 100; + clampCameraPos(&camera._dest); - if (VAR(VAR_CAMERA_SPEED_X) < 8) - VAR(VAR_CAMERA_SPEED_X) = 8; + if (camera._cur.x < camera._dest.x) { + camera._cur.x += (short) VAR(VAR_CAMERA_SPEED_X); + if (camera._cur.x > camera._dest.x) + camera._cur.x = camera._dest.x; + } - if (VAR(VAR_CAMERA_SPEED_Y) < 8) - VAR(VAR_CAMERA_SPEED_Y) = 8; + if (camera._cur.x > camera._dest.x) { + camera._cur.x -= (short) VAR(VAR_CAMERA_SPEED_X); + if (camera._cur.x < camera._dest.x) + camera._cur.x = camera._dest.x; + } - } + if (camera._cur.y < camera._dest.y) { + camera._cur.y += (short) VAR(VAR_CAMERA_SPEED_Y); + if (camera._cur.y > camera._dest.y) + camera._cur.y = camera._dest.y; + } - cameraMoved(); + if (camera._cur.y > camera._dest.y) { + camera._cur.y -= (short) VAR(VAR_CAMERA_SPEED_Y); + if (camera._cur.y < camera._dest.y) + camera._cur.y = camera._dest.y; + } - if (camera._cur.x != old.x || camera._cur.y != old.y) { - VAR(VAR_CAMERA_POS_X) = camera._cur.x; - VAR(VAR_CAMERA_POS_Y) = camera._cur.y; + if (camera._cur.x == camera._dest.x && camera._cur.y == camera._dest.y) { - if (VAR(VAR_SCROLL_SCRIPT)) - runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); - } + camera._movingToActor = false; + camera._accel.x = camera._accel.y = 0; + VAR(VAR_CAMERA_SPEED_X) = VAR(VAR_CAMERA_SPEED_Y) = 0; } else { - int pos = camera._cur.x; - int actorx, t; - Actor *a = NULL; - - camera._cur.x &= 0xFFF8; - - if (camera._cur.x < VAR(VAR_CAMERA_MIN_X)) { - if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) - camera._cur.x = (short) VAR(VAR_CAMERA_MIN_X); - else - camera._cur.x += 8; - cameraMoved(); - return; - } - if (camera._cur.x > VAR(VAR_CAMERA_MAX_X)) { - if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) - camera._cur.x = (short) VAR(VAR_CAMERA_MAX_X); - else - camera._cur.x -= 8; - cameraMoved(); - return; - } + camera._accel.x += (short) VAR(VAR_CAMERA_ACCEL_X); + camera._accel.y += (short) VAR(VAR_CAMERA_ACCEL_Y); - if (camera._mode == CM_FOLLOW_ACTOR) { - a = derefActor(camera._follows, "moveCamera"); - - actorx = a->x; - t = (actorx >> 3) - _screenStartStrip; - - if (t < camera._leftTrigger || t > camera._rightTrigger) { - if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) { - if (t > 35) - camera._dest.x = actorx + 80; - if (t < 5) - camera._dest.x = actorx - 80; - } else - camera._movingToActor = true; - } - } + VAR(VAR_CAMERA_SPEED_X) += camera._accel.x / 100; + VAR(VAR_CAMERA_SPEED_Y) += camera._accel.y / 100; - if (camera._movingToActor) { - a = derefActor(camera._follows, "moveCamera(2)"); - camera._dest.x = a->x; - } + if (VAR(VAR_CAMERA_SPEED_X) < 8) + VAR(VAR_CAMERA_SPEED_X) = 8; - if (camera._dest.x < VAR(VAR_CAMERA_MIN_X)) - camera._dest.x = (short) VAR(VAR_CAMERA_MIN_X); + if (VAR(VAR_CAMERA_SPEED_Y) < 8) + VAR(VAR_CAMERA_SPEED_Y) = 8; - if (camera._dest.x > VAR(VAR_CAMERA_MAX_X)) - camera._dest.x = (short) VAR(VAR_CAMERA_MAX_X); + } - if (VAR_CAMERA_FAST_X != 0xFF && VAR(VAR_CAMERA_FAST_X)) { - camera._cur.x = camera._dest.x; - } else { - if (camera._cur.x < camera._dest.x) - camera._cur.x += 8; - if (camera._cur.x > camera._dest.x) - camera._cur.x -= 8; - } + cameraMoved(); - /* a is set a bit above */ - if (camera._movingToActor && (camera._cur.x >> 3) == (a->x >> 3)) { - camera._movingToActor = false; - } + if (camera._cur.x != old.x || camera._cur.y != old.y) { + VAR(VAR_CAMERA_POS_X) = camera._cur.x; + VAR(VAR_CAMERA_POS_Y) = camera._cur.y; - cameraMoved(); - - if (VAR_SCROLL_SCRIPT != 0xFF && VAR(VAR_SCROLL_SCRIPT) && pos != camera._cur.x) { - if (_features & GF_AFTER_V2) - VAR(VAR_CAMERA_POS_X) = camera._cur.x / 8; - else - VAR(VAR_CAMERA_POS_X) = camera._cur.x; + if (VAR(VAR_SCROLL_SCRIPT)) runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); - } } } + void Scumm::cameraMoved() { if (_features & GF_AFTER_V7) { assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); -- cgit v1.2.3