65 lines
1.6 KiB
C#
65 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
namespace LS_LevelStreaming
|
|
{
|
|
public class LS_DistanceTrigger : LS_ITrigger
|
|
{
|
|
private int m_updateFrequency;
|
|
|
|
private Transform m_playerOrCameraTransform;
|
|
|
|
private Transform m_triggeredObjectTransform;
|
|
|
|
private float m_spawnDistance;
|
|
|
|
private float m_despawnDistance;
|
|
|
|
private bool m_isVisible;
|
|
|
|
private int m_updateCounter;
|
|
|
|
public LS_DistanceTrigger(int p_updateFrequency, Transform p_playerOrCameraTransform, Transform p_triggeredObjectTransform, 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_triggeredObjectTransform = p_triggeredObjectTransform;
|
|
m_spawnDistance = p_spawnDistance;
|
|
m_despawnDistance = p_despawnDistance;
|
|
if (m_triggeredObjectTransform != null)
|
|
{
|
|
m_isVisible = m_triggeredObjectTransform.gameObject.activeSelf;
|
|
}
|
|
}
|
|
|
|
bool LS_ITrigger.IsVisible()
|
|
{
|
|
if (m_updateCounter <= 0)
|
|
{
|
|
m_updateCounter = m_updateFrequency;
|
|
if (m_playerOrCameraTransform != null && m_triggeredObjectTransform != null)
|
|
{
|
|
m_isVisible = m_triggeredObjectTransform.gameObject.activeSelf;
|
|
float magnitude = (m_playerOrCameraTransform.position - m_triggeredObjectTransform.position).magnitude;
|
|
if (m_spawnDistance >= magnitude)
|
|
{
|
|
m_isVisible = true;
|
|
}
|
|
else if (m_despawnDistance <= magnitude)
|
|
{
|
|
m_isVisible = false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_updateCounter--;
|
|
}
|
|
return m_isVisible;
|
|
}
|
|
}
|
|
}
|