From f6fdec1479dd222d10b86a0d897d4c8d81eb3081 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 6 Sep 2015 20:09:47 +0200 Subject: [PATCH] Allow controlling free camera with arrows when no object is selected --- src/graphics/engine/camera.cpp | 18 ++++++++++++------ src/level/robotmain.cpp | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp index 1c4d60b0..282c30b4 100644 --- a/src/graphics/engine/camera.cpp +++ b/src/graphics/engine/camera.cpp @@ -1226,6 +1226,12 @@ EngineMouseType CCamera::GetMouseDef(Math::Point pos) bool CCamera::EventFrameFree(const Event &event) { + Math::Vector cameraInput = event.cameraInput; + if (m_cameraObj == nullptr) + { + cameraInput = Math::Clamp(cameraInput + event.motionInput, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f)); + } + float factor = m_heightEye * 0.5f + 30.0f; if ( m_mouseDirH != 0.0f ) @@ -1234,19 +1240,19 @@ bool CCamera::EventFrameFree(const Event &event) m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, m_mouseDirV * event.rTime * factor * m_speed); // Up/Down - m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, event.cameraInput.y * event.rTime * factor * m_speed); + m_eyePt = Math::LookatPoint(m_eyePt, m_directionH, m_directionV, cameraInput.y * event.rTime * factor * m_speed); // Left/Right if ( event.kmodState & KEY_MOD(CTRL) ) { - if ( event.cameraInput.x < 0.0f ) - m_eyePt = Math::LookatPoint(m_eyePt, m_directionH + Math::PI / 2.0f, m_directionV, -event.cameraInput.x * event.rTime * factor * m_speed); - if ( event.cameraInput.x > 0.0f ) - m_eyePt = Math::LookatPoint(m_eyePt, m_directionH - Math::PI / 2.0f, m_directionV, event.cameraInput.x * event.rTime * factor * m_speed); + if ( cameraInput.x < 0.0f ) + m_eyePt = Math::LookatPoint(m_eyePt, m_directionH + Math::PI / 2.0f, m_directionV, -cameraInput.x * event.rTime * factor * m_speed); + if ( cameraInput.x > 0.0f ) + m_eyePt = Math::LookatPoint(m_eyePt, m_directionH - Math::PI / 2.0f, m_directionV, cameraInput.x * event.rTime * factor * m_speed); } else { - m_directionH -= event.cameraInput.x * event.rTime * 0.7f * m_speed; + m_directionH -= cameraInput.x * event.rTime * 0.7f * m_speed; } // PageUp/PageDown diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 89fd193e..6a537282 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1825,9 +1825,9 @@ bool CRobotMain::SelectObject(CObject* obj, bool displayError) if (m_missionType == MISSION_CODE_BATTLE && m_codeBattleStarted) { // During code battles, only change camera + m_camera->SetControllingObject(obj); if (obj != nullptr) { - m_camera->SetControllingObject(obj); m_camera->SetType(Gfx::CAM_TYPE_PLANE); } else