From 3be43ede4113c9d431bf4be53c528cdd9f2dbc8a Mon Sep 17 00:00:00 2001 From: historic_bruno Date: Thu, 16 Jun 2011 21:21:33 +0000 Subject: [PATCH] Adds rotation to starting camera (currently unused) This was SVN commit r9623. --- .../public/simulation/components/Player.js | 13 +++++++--- .../mods/public/simulation/helpers/Player.js | 5 ++-- source/graphics/MapReader.cpp | 5 ++-- source/simulation2/components/ICmpPlayer.cpp | 9 +++++-- source/simulation2/components/ICmpPlayer.h | 3 ++- .../ScenarioEditor/Sections/Player/Player.cpp | 26 ++++++++++++++----- .../Handlers/CameraCtrlHandlers.cpp | 12 +++++++-- 7 files changed, 53 insertions(+), 20 deletions(-) diff --git a/binaries/data/mods/public/simulation/components/Player.js b/binaries/data/mods/public/simulation/components/Player.js index ad492bf8e1..e246e82e83 100644 --- a/binaries/data/mods/public/simulation/components/Player.js +++ b/binaries/data/mods/public/simulation/components/Player.js @@ -226,14 +226,19 @@ Player.prototype.SetPhase = function(p) this.phase = p; }; -Player.prototype.GetStartingCamera = function() +Player.prototype.GetStartingCameraPos = function() { - return this.startCam; + return this.startCam.position; } -Player.prototype.SetStartingCamera = function(pos) +Player.prototype.GetStartingCameraRot = function() { - this.startCam = pos; + return this.startCam.rotation; +} + +Player.prototype.SetStartingCamera = function(pos, rot) +{ + this.startCam = {"position": pos, "rotation": rot}; } Player.prototype.HasStartingCamera = function() diff --git a/binaries/data/mods/public/simulation/helpers/Player.js b/binaries/data/mods/public/simulation/helpers/Player.js index d5af900c61..5d1f2bb731 100644 --- a/binaries/data/mods/public/simulation/helpers/Player.js +++ b/binaries/data/mods/public/simulation/helpers/Player.js @@ -129,9 +129,10 @@ function LoadPlayerSettings(settings) player.SetDiplomacy(diplomacy); } - if (getSetting(pData, pDefs, "StartingCamera") !== undefined) + var startCam = getSetting(pData, pDefs, "StartingCamera"); + if (startCam !== undefined) { - player.SetStartingCamera(getSetting(pData, pDefs, "StartingCamera")); + player.SetStartingCamera(startCam.Position, startCam.Rotation); } } else diff --git a/source/graphics/MapReader.cpp b/source/graphics/MapReader.cpp index 241bb99a7c..0e94d73674 100644 --- a/source/graphics/MapReader.cpp +++ b/source/graphics/MapReader.cpp @@ -288,12 +288,13 @@ int CMapReader::ApplyData() { // Default to global camera (with constraints) pGameView->ResetCameraTarget(pGameView->GetCamera()->GetFocus()); - + + // TODO: Starting rotation? CmpPtr cmpPlayer(*pSimulation2, cmpPlayerManager->GetPlayerByID(m_PlayerID)); if (!cmpPlayer.null() && cmpPlayer->HasStartingCamera()) { // Use player starting camera - CFixedVector3D pos = cmpPlayer->GetStartingCamera(); + CFixedVector3D pos = cmpPlayer->GetStartingCameraPos(); pGameView->ResetCameraTarget(CVector3D(pos.X.ToFloat(), pos.Y.ToFloat(), pos.Z.ToFloat())); } else if (m_StartingCameraTarget != INVALID_ENTITY) diff --git a/source/simulation2/components/ICmpPlayer.cpp b/source/simulation2/components/ICmpPlayer.cpp index 9e331e934a..ad2a56e9f2 100644 --- a/source/simulation2/components/ICmpPlayer.cpp +++ b/source/simulation2/components/ICmpPlayer.cpp @@ -53,9 +53,14 @@ public: return m_Script.Call("GetColour"); } - virtual CFixedVector3D GetStartingCamera() + virtual CFixedVector3D GetStartingCameraPos() { - return m_Script.Call("GetStartingCamera"); + return m_Script.Call("GetStartingCameraPos"); + } + + virtual CFixedVector3D GetStartingCameraRot() + { + return m_Script.Call("GetStartingCameraRot"); } virtual bool HasStartingCamera() diff --git a/source/simulation2/components/ICmpPlayer.h b/source/simulation2/components/ICmpPlayer.h index 6cea6bc729..531689b109 100644 --- a/source/simulation2/components/ICmpPlayer.h +++ b/source/simulation2/components/ICmpPlayer.h @@ -36,7 +36,8 @@ public: virtual void SetColour(u8 r, u8 g, u8 b) = 0; virtual CColor GetColour() = 0; - virtual CFixedVector3D GetStartingCamera() = 0; + virtual CFixedVector3D GetStartingCameraPos() = 0; + virtual CFixedVector3D GetStartingCameraRot() = 0; virtual bool HasStartingCamera() = 0; diff --git a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Player/Player.cpp b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Player/Player.cpp index 9f712e55e2..be497cc98b 100644 --- a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Player/Player.cpp +++ b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Player/Player.cpp @@ -623,11 +623,15 @@ void PlayerSettingsControl::ReadFromEngine() // camera if (player["StartingCamera"].defined()) { - AtObj cam = *player["StartingCamera"]; sCameraInfo info; - info.pX = wxAtof(*cam["x"]); - info.pY = wxAtof(*cam["y"]); - info.pZ = wxAtof(*cam["z"]); + AtObj camPos = *player["StartingCamera"]["Position"]; + info.pX = wxAtof(*camPos["x"]); + info.pY = wxAtof(*camPos["y"]); + info.pZ = wxAtof(*camPos["z"]); + AtObj camRot = *player["StartingCamera"]["Rotation"]; + info.rX = wxAtof(*camRot["x"]); + info.rY = wxAtof(*camRot["y"]); + info.rZ = wxAtof(*camRot["z"]); controls.page->SetCamera(info, true); } @@ -718,9 +722,17 @@ AtObj PlayerSettingsControl::UpdateSettingsObject() if (controls.page->IsCameraDefined()) { sCameraInfo cam = controls.page->GetCamera(); - camObj.setDouble("x", cam.pX); - camObj.setDouble("y", cam.pY); - camObj.setDouble("z", cam.pZ); + AtObj camPos; + camPos.setDouble("x", cam.pX); + camPos.setDouble("y", cam.pY); + camPos.setDouble("z", cam.pZ); + camObj.set("Position", camPos); + + AtObj camRot; + camRot.setDouble("x", cam.rX); + camRot.setDouble("y", cam.rY); + camRot.setDouble("z", cam.rZ); + camObj.set("Rotation", camRot); } player.set("StartingCamera", camObj); diff --git a/source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp b/source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp index b25fb98eda..e85900880b 100644 --- a/source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp +++ b/source/tools/atlas/GameInterface/Handlers/CameraCtrlHandlers.cpp @@ -21,6 +21,7 @@ #include "../GameLoop.h" #include "../View.h" +#include "maths/MathUtil.h" #include "maths/Vector3D.h" #include "maths/Quaternion.h" #include "ps/Game.h" @@ -222,14 +223,19 @@ MESSAGEHANDLER(LookAt) QUERYHANDLER(GetView) { CVector3D focus = g_Game->GetView()->GetCamera()->GetFocus(); - sCameraInfo info; info.pX = focus.X; info.pY = focus.Y; info.pZ = focus.Z; - // TODO: Rotation + CQuaternion quatRot = g_Game->GetView()->GetCamera()->m_Orientation.GetRotation(); + quatRot.Normalize(); + CVector3D rotation = quatRot.ToEulerAngles(); + + info.rX = RADTODEG(rotation.X); + info.rY = RADTODEG(rotation.Y); + info.rZ = RADTODEG(rotation.Z); msg->info = info; } @@ -245,6 +251,8 @@ MESSAGEHANDLER(SetView) sCameraInfo cam = msg->info; view->ResetCameraTarget(CVector3D(cam.pX, cam.pY, cam.pZ)); + + // TODO: Rotation } }