void ScummEngine_v7::setCameraAt(int pos_x, int pos_y) { Common::Point old; old = camera._cur; camera._cur.x = pos_x; camera._cur.y = pos_y; clampCameraPos(&camera._cur); camera._dest = camera._cur; VAR(VAR_CAMERA_DEST_X) = camera._dest.x; VAR(VAR_CAMERA_DEST_Y) = camera._dest.y; assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); if (camera._cur.x != old.x || camera._cur.y != old.y) { if (VAR(VAR_SCROLL_SCRIPT)) { VAR(VAR_CAMERA_POS_X) = camera._cur.x; VAR(VAR_CAMERA_POS_Y) = camera._cur.y; runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); } // Even though cameraMoved() is called automatically, we may // need to know at once that the camera has moved, or text may // be printed at the wrong coordinates. See bugs #795938 and // #929242 cameraMoved(); } }
void Z3DTrackballInteractionHandler::rollEvent(QMouseEvent *e, int w, int h) { if (e->type() == QEvent::MouseButtonPress) { setState(ROLL); mousePressEvent(e, w, h); } else if (e->type() == QEvent::MouseButtonRelease) { mouseReleaseEvent(e, w, h); } else if (e->type() == QEvent::MouseMove) { mouseMoveEvent(e, w, h); emit cameraMoved(); } }
void Z3DTrackballInteractionHandler::keyRollEvent(QKeyEvent *e, int, int) { bool accepted = false; if (e->key() == Qt::Key_Left) { m_camera->roll(m_keyPressAngle); accepted = true; } else if (e->key() == Qt::Key_Right) { m_camera->roll(-m_keyPressAngle); accepted = true; } if (accepted) { e->accept(); emit cameraMoved(); } }
void Z3DTrackballInteractionHandler::keyDollyEvent(QKeyEvent *e, int, int) { bool accepted = false; float factor = m_mouseMotionFactor * 0.1f * m_mouseWheelMotionFactor; if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Equal) { m_camera->dolly(std::pow(1.1f, factor)); accepted = true; } else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Minus) { m_camera->dolly(std::pow(1.1f, -factor)); accepted = true; } if (accepted) { e->accept(); emit cameraMoved(); } }
void Z3DTrackballInteractionHandler::keyRotateEvent(QKeyEvent *e, int, int) { bool accepted = false; if (e->key() == Qt::Key_Left) { m_camera->rotate(m_keyPressAngle, m_camera->vectorEyeToWorld(glm::vec3(0.f, 1.f, 0.f))); accepted = true; } else if (e->key() == Qt::Key_Right) { m_camera->rotate(-m_keyPressAngle, m_camera->vectorEyeToWorld(glm::vec3(0.f, 1.f, 0.f))); accepted = true; } else if (e->key() == Qt::Key_Up) { m_camera->rotate(-m_keyPressAngle, m_camera->vectorEyeToWorld(glm::vec3(1.f, 0.f, 0.f))); accepted = true; } else if (e->key() == Qt::Key_Down) { m_camera->rotate(m_keyPressAngle, m_camera->vectorEyeToWorld(glm::vec3(1.f, 0.f, 0.f))); accepted = true; } if (accepted) { e->accept(); emit cameraMoved(); } }
void Z3DTrackballInteractionHandler::keyShiftEvent(QKeyEvent *e, int w, int h) { bool accepted = false; glm::ivec2 center(w/2, h/2); if (e->key() == Qt::Key_Left) { shift(center, center + glm::ivec2(-m_keyPressDistance, 0), w, h); accepted = true; } else if (e->key() == Qt::Key_Right) { shift(center, center + glm::ivec2(m_keyPressDistance, 0), w, h); accepted = true; } else if (e->key() == Qt::Key_Up) { shift(center, center + glm::ivec2(0, m_keyPressDistance), w, h); accepted = true; } else if (e->key() == Qt::Key_Down) { shift(center, center + glm::ivec2(0, -m_keyPressDistance), w, h); accepted = true; } if (accepted) { e->accept(); emit cameraMoved(); } }
void ScummEngine_v7::moveCamera() { Common::Point old = camera._cur; Actor *a = NULL; if (camera._follows) { a = derefActor(camera._follows, "moveCamera"); if (ABS(camera._cur.x - a->_pos.x) > VAR(VAR_CAMERA_THRESHOLD_X) || ABS(camera._cur.y - a->_pos.y) > VAR(VAR_CAMERA_THRESHOLD_Y)) { camera._movingToActor = true; if (VAR(VAR_CAMERA_THRESHOLD_X) == 0) camera._cur.x = a->_pos.x; if (VAR(VAR_CAMERA_THRESHOLD_Y) == 0) camera._cur.y = a->_pos.y; clampCameraPos(&camera._cur); } } else { camera._movingToActor = false; } if (camera._movingToActor) { VAR(VAR_CAMERA_DEST_X) = camera._dest.x = a->_pos.x; VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = a->_pos.y; } assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); clampCameraPos(&camera._dest); 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.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; } 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 == camera._dest.x && camera._cur.y == camera._dest.y) { camera._movingToActor = false; camera._accel.x = camera._accel.y = 0; VAR(VAR_CAMERA_SPEED_X) = VAR(VAR_CAMERA_SPEED_Y) = 0; } else { camera._accel.x += (short) VAR(VAR_CAMERA_ACCEL_X); camera._accel.y += (short) VAR(VAR_CAMERA_ACCEL_Y); VAR(VAR_CAMERA_SPEED_X) += camera._accel.x / 100; VAR(VAR_CAMERA_SPEED_Y) += camera._accel.y / 100; if (VAR(VAR_CAMERA_SPEED_X) < 8) VAR(VAR_CAMERA_SPEED_X) = 8; if (VAR(VAR_CAMERA_SPEED_Y) < 8) VAR(VAR_CAMERA_SPEED_Y) = 8; } cameraMoved(); 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 (VAR(VAR_SCROLL_SCRIPT)) runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); } }
void ScummEngine::moveCamera() { int pos = camera._cur.x; int actorx, t; Actor *a = NULL; camera._cur.x &= 0xFFF8; if (VAR_CAMERA_MIN_X != 0xFF && 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 (VAR_CAMERA_MAX_X != 0xFF && 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 == kFollowActorCameraMode) { a = derefActor(camera._follows, "moveCamera"); actorx = a->_pos.x; t = actorx / 8 - _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 (camera._movingToActor) { a = derefActor(camera._follows, "moveCamera(2)"); camera._dest.x = a->_pos.x; } if (VAR_CAMERA_MIN_X != 0xFF && camera._dest.x < VAR(VAR_CAMERA_MIN_X)) camera._dest.x = (short) VAR(VAR_CAMERA_MIN_X); if (VAR_CAMERA_MAX_X != 0xFF && 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; } /* a is set a bit above */ if (camera._movingToActor && (camera._cur.x / 8) == (a->_pos.x / 8)) { camera._movingToActor = false; } cameraMoved(); if (VAR_SCROLL_SCRIPT != 0xFF && VAR(VAR_SCROLL_SCRIPT) && pos != camera._cur.x) { VAR(VAR_CAMERA_POS_X) = camera._cur.x; runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); } }
void Z3DTrackballInteractionHandler::rollEvent(QWheelEvent *e, int w, int h) { setState(ROLL); wheelEvent(e, w, h); emit cameraMoved(); }