diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 4318dcac29..7afd78c5d2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1393,10 +1393,8 @@ namespace OpenSim.Region.Framework.Scenes PhysicsActor partPhysActor = part.PhysActor; if(partPhysActor != null) { - partPhysActor.OnPhysicsRequestingCameraData -= - physActor_OnPhysicsRequestingCameraData; - partPhysActor.OnPhysicsRequestingCameraData += - physActor_OnPhysicsRequestingCameraData; + partPhysActor.OnPhysicsRequestingCameraData -= physActor_OnPhysicsRequestingCameraData; + partPhysActor.OnPhysicsRequestingCameraData += physActor_OnPhysicsRequestingCameraData; } } ParentUUID = UUID.Zero; @@ -5888,15 +5886,15 @@ namespace OpenSim.Region.Framework.Scenes } } + private CameraData CameraDataCache; CameraData physActor_OnPhysicsRequestingCameraData() { - return new CameraData - { - Valid = true, - MouseLook = this.m_mouseLook, - CameraRotation = this.CameraRotation, - CameraAtAxis = this.CameraAtAxis - }; + if(CameraDataCache == null) + CameraDataCache = new CameraData(); + CameraDataCache.MouseLook = m_mouseLook; + CameraDataCache.CameraRotation = CameraRotation; + CameraDataCache.CameraAtAxis = CameraAtAxis; + return CameraDataCache; } public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, UUID Script_item_UUID) diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs index 47373caa18..53b45952cc 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs @@ -55,12 +55,11 @@ namespace OpenSim.Region.PhysicsModules.SharedBase Absolute } - public struct CameraData + public class CameraData { public Quaternion CameraRotation; public Vector3 CameraAtAxis; public bool MouseLook; - public bool Valid; } public struct ContactPoint @@ -187,12 +186,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public CameraData TryGetCameraData() { GetCameraData handler = OnPhysicsRequestingCameraData; - if (handler != null) - { - return handler(); - } - - return new CameraData { Valid = false }; + return (handler == null) ? null : handler(); } public static PhysicsActor Null diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs index 23b119213e..6322770650 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs @@ -1046,7 +1046,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde if(mousemode) { CameraData cam = rootPrim.TryGetCameraData(); - if(cam.Valid && cam.MouseLook) + if(cam != null && cam.MouseLook) { Vector3 dirv = cam.CameraAtAxis * irotq;