Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/BoundsLockedObject.cs
2026-02-21 16:45:37 +08:00

66 lines
1.8 KiB
C#

using UnityEngine;
public class BoundsLockedObject : MonoBehaviour
{
private Vector3 m_initialOffset;
public OVRCameraRig m_playerOrigin;
public GuardianBoundaryEnforcer m_enforcer;
private Bounds? m_bounds;
private void Start()
{
m_enforcer.TrackingChanged += RefreshDisplay;
m_initialOffset = base.gameObject.transform.position - m_playerOrigin.transform.position;
Renderer component = base.gameObject.GetComponent<Renderer>();
if (component != null)
{
m_bounds = component.bounds;
}
RefreshDisplay();
}
private void RefreshDisplay()
{
if (OVRManager.boundary.GetConfigured())
{
Vector3[] geometry = OVRManager.boundary.GetGeometry(OVRBoundary.BoundaryType.PlayArea);
float num = 10000f;
float num2 = 10000f;
float num3 = -10000f;
float num4 = -10000f;
for (int i = 0; i < geometry.Length; i++)
{
geometry[i] = m_enforcer.OrientToOriginalForward * geometry[i];
num = Mathf.Min(num, geometry[i].x);
num2 = Mathf.Min(num2, geometry[i].z);
num3 = Mathf.Max(num3, geometry[i].x);
num4 = Mathf.Max(num4, geometry[i].z);
}
Bounds? bounds = m_bounds;
if (bounds.HasValue)
{
Bounds? bounds2 = m_bounds;
float num5 = bounds2.Value.size.x * 0.5f;
Bounds? bounds3 = m_bounds;
float num6 = bounds3.Value.size.z * 0.5f;
num += num5;
num3 -= num5;
num2 += num6;
num4 -= num6;
}
Vector3 vector = m_initialOffset;
vector.x = Mathf.Max(Mathf.Min(num3, m_initialOffset.x), num);
vector.z = Mathf.Max(Mathf.Min(num4, m_initialOffset.z), num2);
vector.y = base.gameObject.transform.position.y;
if (m_enforcer.m_AllowRecenter)
{
vector = Quaternion.Inverse(m_enforcer.OrientToOriginalForward) * vector;
}
base.gameObject.transform.position = vector;
}
}
}