Adds rotation to starting camera (currently unused)

This was SVN commit r9623.
This commit is contained in:
historic_bruno 2011-06-16 21:21:33 +00:00
parent 2fa7c8aeca
commit 3be43ede41
7 changed files with 53 additions and 20 deletions

View File

@ -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()

View File

@ -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

View File

@ -289,11 +289,12 @@ int CMapReader::ApplyData()
// Default to global camera (with constraints)
pGameView->ResetCameraTarget(pGameView->GetCamera()->GetFocus());
// TODO: Starting rotation?
CmpPtr<ICmpPlayer> 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)

View File

@ -53,9 +53,14 @@ public:
return m_Script.Call<CColor>("GetColour");
}
virtual CFixedVector3D GetStartingCamera()
virtual CFixedVector3D GetStartingCameraPos()
{
return m_Script.Call<CFixedVector3D>("GetStartingCamera");
return m_Script.Call<CFixedVector3D>("GetStartingCameraPos");
}
virtual CFixedVector3D GetStartingCameraRot()
{
return m_Script.Call<CFixedVector3D>("GetStartingCameraRot");
}
virtual bool HasStartingCamera()

View File

@ -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;

View File

@ -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);

View File

@ -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
}
}