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

106 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
public abstract class vp_StateEventHandler : vp_EventHandler
{
private List<vp_Component> m_StateTargets = new List<vp_Component>();
protected override void Awake()
{
base.Awake();
vp_Component[] componentsInChildren = base.transform.root.GetComponentsInChildren<vp_Component>(true);
foreach (vp_Component vp_Component2 in componentsInChildren)
{
if (vp_Component2.Parent == null || vp_Component2.Parent.GetComponent<vp_Component>() == null)
{
m_StateTargets.Add(vp_Component2);
}
}
}
protected void BindStateToActivity(vp_Activity a)
{
BindStateToActivityOnStart(a);
BindStateToActivityOnStop(a);
}
protected void BindStateToActivityOnStart(vp_Activity a)
{
if (!ActivityInitialized(a))
{
return;
}
string s = a.EventName;
a.StartCallbacks = (vp_Activity.Callback)Delegate.Combine(a.StartCallbacks, (vp_Activity.Callback)delegate
{
foreach (vp_Component stateTarget in m_StateTargets)
{
stateTarget.SetState(s, true, true);
}
});
}
protected void BindStateToActivityOnStop(vp_Activity a)
{
if (!ActivityInitialized(a))
{
return;
}
string s = a.EventName;
a.StopCallbacks = (vp_Activity.Callback)Delegate.Combine(a.StopCallbacks, (vp_Activity.Callback)delegate
{
foreach (vp_Component stateTarget in m_StateTargets)
{
stateTarget.SetState(s, false, true);
}
});
}
public void RefreshActivityStates()
{
foreach (vp_Event value in m_HandlerEvents.Values)
{
if (!(value is vp_Activity) && value.GetType().BaseType != typeof(vp_Activity))
{
continue;
}
foreach (vp_Component stateTarget in m_StateTargets)
{
stateTarget.SetState(value.EventName, ((vp_Activity)value).Active, true);
}
}
}
public void ResetActivityStates()
{
foreach (vp_Component stateTarget in m_StateTargets)
{
stateTarget.ResetState();
}
}
public void SetState(string state, bool setActive = true, bool recursive = true, bool includeDisabled = false)
{
foreach (vp_Component stateTarget in m_StateTargets)
{
stateTarget.SetState(state, setActive, recursive, includeDisabled);
}
}
private bool ActivityInitialized(vp_Activity a)
{
if (a == null)
{
Debug.LogError(string.Concat("Error: (", this, ") Activity is null."));
return false;
}
if (string.IsNullOrEmpty(a.EventName))
{
Debug.LogError(string.Concat("Error: (", this, ") Activity not initialized. Make sure the event handler has run its Awake call before binding layers."));
return false;
}
return true;
}
}