diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 1d719b2478..675322aa64 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -195,6 +195,12 @@ namespace OpenSim.Region.Environment.Scenes protected LLUUID m_uuid; protected LLVector3 m_velocity; + // TODO: Those have to be changed into persistent properties at some later point, + // or sit-camera on vehicles will break on sim-crossing. + private LLVector3 m_cameraEyeOffset = new LLVector3(0.0f, 0.0f, 0.0f); + private LLVector3 m_cameraAtOffset = new LLVector3(0.0f, 0.0f, 0.0f); + private bool m_forceMouselook = false; + #endregion Fields #region Constructors @@ -3313,6 +3319,30 @@ namespace OpenSim.Region.Environment.Scenes } } + public void SetCameraAtOffset(LLVector3 v) { + m_cameraAtOffset = v; + } + + public void SetCameraEyeOffset(LLVector3 v) { + m_cameraEyeOffset = v; + } + + public void SetForceMouselook(bool force) { + m_forceMouselook = force; + } + + public LLVector3 GetCameraAtOffset() { + return m_cameraAtOffset; + } + + public LLVector3 GetCameraEyeOffset() { + return m_cameraEyeOffset; + } + + public bool GetForceMouselook() { + return m_forceMouselook; + } + #endregion Public Methods } } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index b24ee8aaf3..221da0e1ff 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -1129,6 +1129,9 @@ namespace OpenSim.Region.Environment.Scenes bool autopilot = true; LLVector3 pos = new LLVector3(); LLQuaternion sitOrientation = new LLQuaternion(0, 0, 0, 1); + LLVector3 cameraEyeOffset = LLVector3.Zero; + LLVector3 cameraAtOffset = LLVector3.Zero; + bool forceMouselook = false; //SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); SceneObjectPart part = FindNextAvailableSitTarget(targetID); @@ -1183,9 +1186,13 @@ namespace OpenSim.Region.Environment.Scenes RemoveFromPhysicalScene(); } } + + cameraAtOffset = part.GetCameraAtOffset(); + cameraEyeOffset = part.GetCameraEyeOffset(); + forceMouselook = part.GetForceMouselook(); } - ControllingClient.SendSitResponse(targetID, offset, sitOrientation, autopilot, LLVector3.Zero, LLVector3.Zero, false); + ControllingClient.SendSitResponse(targetID, offset, sitOrientation, autopilot, cameraAtOffset, cameraEyeOffset, forceMouselook); m_requestedSitTargetUUID = targetID; // This calls HandleAgentSit twice, once from here, and the client calls // HandleAgentSit itself after it gets to the location diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 422ff71284..30093eb5df 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -4747,13 +4747,13 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llSetCameraEyeOffset"); + m_host.SetCameraEyeOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); } public void llSetCameraAtOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llSetCameraAtOffset"); + m_host.SetCameraAtOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); } public string llDumpList2String(LSL_Types.list src, string seperator) @@ -6627,7 +6627,7 @@ namespace OpenSim.Region.ScriptEngine.Common public void llForceMouselook(int mouselook) { m_host.AddScriptLPS(1); - NotImplemented("llForceMouselook"); + m_host.SetForceMouselook(mouselook != 0); } public double llGetObjectMass(string id) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index e5c6ac16df..401a5eaebf 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -4609,13 +4609,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llSetCameraEyeOffset"); + m_host.SetCameraEyeOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); } public void llSetCameraAtOffset(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llSetCameraAtOffset"); + m_host.SetCameraAtOffset(new LLVector3((float)offset.x, (float)offset.y, (float)offset.z)); } public string llDumpList2String(LSL_Types.list src, string seperator) @@ -6410,7 +6410,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llForceMouselook(int mouselook) { m_host.AddScriptLPS(1); - NotImplemented("llForceMouselook"); + m_host.SetForceMouselook(mouselook != 0); } public double llGetObjectMass(string id)