From e956311626e0243f0a543294b562eb9e1e2f687d Mon Sep 17 00:00:00 2001 From: krzys-h Date: Fri, 4 Sep 2015 18:34:49 +0200 Subject: [PATCH] Moved free camera controls to numpad; added 'camtype %d', 'camspeed %f', 'freecam' --- src/app/input.cpp | 16 ++++++++++++++++ src/app/input.h | 2 ++ src/common/event.h | 7 +++++++ src/graphics/engine/camera.cpp | 17 +++++++++++------ src/graphics/engine/camera.h | 2 ++ src/level/robotmain.cpp | 20 ++++++++++++++++++++ 6 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/app/input.cpp b/src/app/input.cpp index f77da859..b9ec5548 100644 --- a/src/app/input.cpp +++ b/src/app/input.cpp @@ -132,6 +132,13 @@ void CInput::EventProcess(Event& event) if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 1.0f; if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 1.0f; if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = -1.0f; + + if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 1.0f; + if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = -1.0f; + if (data->key == KEY(KP4) ) m_cameraKeyMotion.x = -1.0f; + if (data->key == KEY(KP6) ) m_cameraKeyMotion.x = 1.0f; + if (data->key == KEY(KP8) ) m_cameraKeyMotion.y = 1.0f; + if (data->key == KEY(KP2) ) m_cameraKeyMotion.y = -1.0f; } else if (event.type == EVENT_KEY_UP) { @@ -143,6 +150,13 @@ void CInput::EventProcess(Event& event) if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 0.0f; if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 0.0f; if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = 0.0f; + + if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 0.0f; + if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = 0.0f; + if (data->key == KEY(KP4) ) m_cameraKeyMotion.x = 0.0f; + if (data->key == KEY(KP6) ) m_cameraKeyMotion.x = 0.0f; + if (data->key == KEY(KP8) ) m_cameraKeyMotion.y = 0.0f; + if (data->key == KEY(KP2) ) m_cameraKeyMotion.y = 0.0f; } else if (event.type == EVENT_JOY_AXIS) { @@ -171,6 +185,7 @@ void CInput::EventProcess(Event& event) } event.motionInput = Math::Clamp(m_joyMotion + m_keyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f)); + event.cameraInput = m_cameraKeyMotion; } void CInput::MouseMove(Math::IntPoint pos) @@ -204,6 +219,7 @@ void CInput::ResetKeyStates() m_kmodState = 0; m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f); m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f); + m_cameraKeyMotion = Math::Vector(0.0f, 0.0f, 0.0f); for(int i=0; i 0.0f ) - m_eyePt = Math::LookatPoint(m_eyePt, m_directionH - Math::PI / 2.0f, m_directionV, event.motionInput.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 ( 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); } else { - m_directionH -= event.motionInput.x * event.rTime * 0.7f * m_speed; + m_directionH -= event.cameraInput.x * event.rTime * 0.7f * m_speed; } // PageUp/PageDown @@ -1711,5 +1711,10 @@ Math::Vector CCamera::ExcludeObject(Math::Vector eye, Math::Vector lookat, return eye;*/ } +void CCamera::SetCameraSpeed(float speed) +{ + m_speed = speed; +} + } diff --git a/src/graphics/engine/camera.h b/src/graphics/engine/camera.h index a67be256..151798f7 100644 --- a/src/graphics/engine/camera.h +++ b/src/graphics/engine/camera.h @@ -218,6 +218,8 @@ public: //! Returns the default sprite to use for the mouse EngineMouseType GetMouseDef(Math::Point pos); + void SetCameraSpeed(float speed); + protected: //! Changes the camera according to the mouse moved bool EventMouseMove(const Event &event); diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index ab54a7b7..c916d875 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1204,6 +1204,26 @@ void CRobotMain::ExecuteCmd(char *cmd) return; } + int camtype; + if (sscanf(cmd, "camtype %d", &camtype) > 0) + { + m_camera->SetType(static_cast(camtype)); + return; + } + + float camspeed; + if (sscanf(cmd, "camspeed %f", &camspeed) > 0) + { + m_camera->SetCameraSpeed(camspeed); + return; + } + + if (strcmp(cmd, "freecam") == 0) + { + m_camera->SetType(Gfx::CAM_TYPE_FREE); + return; + } + if (strcmp(cmd, "noclip") == 0) { CObject* object = GetSelect();