CameraData is a bit too large to be a struct

This commit is contained in:
UbitUmarov
2022-03-14 21:39:21 +00:00
parent 5728d634b5
commit ad17ce0b51
3 changed files with 12 additions and 20 deletions

View File

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

View File

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

View File

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