107 lines
2.9 KiB
C#
107 lines
2.9 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.HLODSystem
|
|
{
|
|
public class HLODCameraRecognizerManager
|
|
{
|
|
private static HLODCameraRecognizerManager s_instance;
|
|
public static HLODCameraRecognizerManager Instance
|
|
{
|
|
get
|
|
{
|
|
if (s_instance == null)
|
|
s_instance = new HLODCameraRecognizerManager();
|
|
return s_instance;
|
|
}
|
|
}
|
|
|
|
public static HLODCameraRecognizer ActiveRecognizer
|
|
{
|
|
get
|
|
{
|
|
var instance = Instance;
|
|
if (instance.m_activeRecognizer == null)
|
|
{
|
|
instance.ActiveHighestPriority();
|
|
}
|
|
|
|
return instance.m_activeRecognizer;
|
|
}
|
|
}
|
|
public static Camera ActiveCamera
|
|
{
|
|
get
|
|
{
|
|
var recognizer = ActiveRecognizer;
|
|
if (recognizer == null)
|
|
return null;
|
|
|
|
return recognizer.RecognizedCamera;
|
|
}
|
|
}
|
|
|
|
private bool m_enableAutoHighestPrioritySetting = true;
|
|
private HLODCameraRecognizer m_activeRecognizer = null;
|
|
private List<HLODCameraRecognizer> m_recognizers = new List<HLODCameraRecognizer>();
|
|
|
|
public void RegisterRecognizer(HLODCameraRecognizer recognizer)
|
|
{
|
|
m_recognizers.Add(recognizer);
|
|
m_recognizers.Sort((lhs, rhs) =>
|
|
{
|
|
//sort in descending order
|
|
return rhs.Priority - lhs.Priority;
|
|
});
|
|
|
|
if ( m_enableAutoHighestPrioritySetting )
|
|
ActiveHighestPriority();
|
|
}
|
|
|
|
public void UnregisterRecognizer(HLODCameraRecognizer recognizer)
|
|
{
|
|
m_recognizers.Remove(recognizer);
|
|
|
|
if (m_activeRecognizer == recognizer)
|
|
{
|
|
m_activeRecognizer = null;
|
|
ActiveHighestPriority();
|
|
}
|
|
}
|
|
|
|
public void Active(HLODCameraRecognizer recognizer)
|
|
{
|
|
m_activeRecognizer = recognizer;
|
|
m_enableAutoHighestPrioritySetting = false;
|
|
}
|
|
|
|
public void Active(int id)
|
|
{
|
|
for (int i = 0; i < m_recognizers.Count; ++i)
|
|
{
|
|
if (m_recognizers[i].ID == id)
|
|
{
|
|
Active(m_recognizers[i]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ActiveHighestPriority()
|
|
{
|
|
if (m_recognizers.Count > 0)
|
|
{
|
|
m_activeRecognizer = m_recognizers[0];
|
|
}
|
|
}
|
|
|
|
public void EnableAutoHighestPrioritySetting(bool enable)
|
|
{
|
|
m_enableAutoHighestPrioritySetting = enable;
|
|
|
|
if ( enable )
|
|
ActiveHighestPriority();
|
|
}
|
|
|
|
}
|
|
} |