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

89 lines
2.2 KiB
C#

using UnityEngine;
namespace LS_LevelStreaming
{
public class LS_DistanceUpdatedTrigger : LS_ITriggerByUpdatedPosition, LS_ITrigger
{
private int m_updateFrequency;
private Transform m_playerOrCameraTransform;
private Vector3 m_triggeredObjectPosition;
private float m_spawnDistance;
private float m_despawnDistance;
private bool m_isAlwaysVisibleWithOrthoCam;
private bool m_isVisible;
private int m_updateCounter;
public LS_DistanceUpdatedTrigger(int p_updateFrequency, Transform p_playerOrCameraTransform, float p_spawnDistance, float p_despawnDistance, bool p_isAlwaysVisibleWithOrthoCam)
: this(p_updateFrequency, p_playerOrCameraTransform, p_spawnDistance, p_despawnDistance)
{
m_isAlwaysVisibleWithOrthoCam = p_isAlwaysVisibleWithOrthoCam;
}
public LS_DistanceUpdatedTrigger(int p_updateFrequency, Transform p_playerOrCameraTransform, float p_spawnDistance, float p_despawnDistance)
{
m_updateFrequency = p_updateFrequency;
if (m_updateFrequency > 0)
{
m_updateCounter = Random.Range(0, m_updateFrequency);
}
m_playerOrCameraTransform = p_playerOrCameraTransform;
m_spawnDistance = p_spawnDistance;
m_despawnDistance = p_despawnDistance;
m_isVisible = false;
}
void LS_ITriggerByUpdatedPosition.Update(Vector3 p_newPosition)
{
m_triggeredObjectPosition = p_newPosition;
}
bool LS_ITrigger.IsVisible()
{
if (m_updateCounter <= 0)
{
m_updateCounter = m_updateFrequency;
if (m_playerOrCameraTransform != null)
{
bool flag = false;
if (m_isAlwaysVisibleWithOrthoCam)
{
Camera component = m_playerOrCameraTransform.GetComponent<Camera>();
if (component != null && component.orthographic)
{
flag = true;
}
}
if (flag)
{
m_isVisible = true;
}
else
{
float magnitude = (m_playerOrCameraTransform.position - m_triggeredObjectPosition).magnitude;
if (m_spawnDistance >= magnitude)
{
m_isVisible = true;
}
else if (m_despawnDistance <= magnitude)
{
m_isVisible = false;
}
}
}
}
else
{
m_updateCounter--;
}
return m_isVisible;
}
}
}