104 lines
3.3 KiB
C#
104 lines
3.3 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Sirenix.Serialization;
|
|
using UnityEngine.Serialization;
|
|
|
|
public class PlayerEnvironmentManager : MonoBehaviour{
|
|
[OdinSerialize]
|
|
public List<EnvironmentObserver> observers;
|
|
|
|
void Start(){
|
|
CheckDuplicateLabels(observers);
|
|
}
|
|
|
|
// TODO: Not working.
|
|
void CheckDuplicateLabels(List<EnvironmentObserver> sourceList){
|
|
foreach (EnvironmentObserver sourceObserver in observers) {
|
|
foreach (EnvironmentObserver observer in sourceList) {
|
|
if (sourceObserver == observer) {
|
|
continue;
|
|
}
|
|
|
|
if (sourceObserver.label == observer.label) {
|
|
Debug.LogError($"Duplicate label found in observer: {observer.label} is in use multiple times");
|
|
}
|
|
|
|
if (observer.children != null && observer.children.Count > 0) {
|
|
CheckDuplicateLabels(observer.children);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool EvaluateFromString(string searchLabel, List<EnvironmentObserver> observerList = null){
|
|
List<EnvironmentObserver> listToUse = observers;
|
|
|
|
if (observerList != null) {
|
|
listToUse = observerList;
|
|
}
|
|
|
|
foreach (EnvironmentObserver observer in listToUse) {
|
|
if (observer.label == searchLabel) {
|
|
return observer.Evaluate(gameObject);
|
|
}
|
|
|
|
if (observer.children != null && observer.children.Count > 0) {
|
|
foreach (EnvironmentObserver childObserver in observer.children) {
|
|
EvaluateFromString(searchLabel, childObserver.children);
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public EnvironmentObserver FindObserverFromString(string searchLabel, List<EnvironmentObserver> observerList = null){
|
|
List<EnvironmentObserver> listToUse = observers;
|
|
|
|
if (observerList != null) {
|
|
listToUse = observerList;
|
|
}
|
|
|
|
foreach (EnvironmentObserver observer in listToUse) {
|
|
if (observer.label == searchLabel) {
|
|
return observer;
|
|
}
|
|
|
|
if (observer.children != null && observer.children.Count > 0) {
|
|
foreach (EnvironmentObserver childObserver in observer.children) {
|
|
FindObserverFromString(searchLabel, childObserver.children);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
void Update(){
|
|
}
|
|
|
|
void LateUpdate(){
|
|
// Draw Gizmos
|
|
foreach (EnvironmentObserver observer in observers) {
|
|
observer.DrawObserverGizmo(gameObject);
|
|
|
|
if (observer.children != null && observer.children.Count > 0) {
|
|
foreach (EnvironmentObserver childObserver in observer.children) {
|
|
childObserver.DrawObserverGizmo(gameObject);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Clear hit
|
|
foreach (EnvironmentObserver observer in observers) {
|
|
observer.hit = default;
|
|
|
|
if (observer.children != null && observer.children.Count > 0) {
|
|
foreach (EnvironmentObserver childObserver in observer.children) {
|
|
childObserver.hit = default;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|