Files
7d2dXG/Mods/0A-KFCommonUtilityLib/KFAttached/KFUtilAttached/TransformActivationBinding.cs
Nathaniel Cosford 062dfab2cd Patched
2025-05-30 01:04:40 +09:30

142 lines
3.6 KiB
C#

using System.Collections;
using UnityEngine;
[AddComponentMenu("KFAttachments/Binding Helpers/Transform Activation Binding")]
public class TransformActivationBinding : MonoBehaviour
{
[SerializeField]
internal GameObject[] bindings;
[SerializeField]
private GameObject[] inverseBindings;
[SerializeField]
private GameObject[] enableOnDisable;
[SerializeField]
private GameObject[] disableOnEnable;
[SerializeField]
private GameObject[] enableOnEnable;
[SerializeField]
private GameObject[] disableOnDisable;
[SerializeField]
private string[] animatorParamBindings;
internal AnimationTargetsAbs targets;
private void OnEnable()
{
//Log.Out(gameObject.name + " OnEnable!");
if (bindings != null)
{
foreach (GameObject t in bindings)
{
if (t)
t.SetActive(true);
}
}
if (inverseBindings != null)
{
foreach (GameObject t in inverseBindings)
{
if (t)
t.SetActive(false);
}
}
if (disableOnEnable != null)
{
foreach (GameObject t in disableOnEnable)
{
if (t)
t.SetActive(false);
}
}
if (enableOnEnable != null)
{
foreach (GameObject t in enableOnEnable)
{
if (t)
t.SetActive(true);
}
}
#if NotEditor
ThreadManager.StartCoroutine(UpdateBool(true));
#else
UpdateBoolEditor(true);
#endif
}
private void OnDisable()
{
//Log.Out(gameObject.name + " OnDisable!");
if (bindings != null)
{
foreach (GameObject t in bindings)
if (t)
t.SetActive(false);
}
if (inverseBindings != null)
{
foreach (GameObject t in inverseBindings)
{
if (t)
t.SetActive(true);
}
}
if (enableOnDisable != null)
{
foreach (GameObject t in enableOnDisable)
{
if (t)
t.SetActive(true);
}
}
if (disableOnDisable != null)
{
foreach (GameObject t in disableOnDisable)
{
if (t)
t.SetActive(true);
}
}
#if NotEditor
ThreadManager.StartCoroutine(UpdateBool(false));
#else
UpdateBoolEditor(false);
#endif
}
#if NotEditor
internal IEnumerator UpdateBool(bool enabled)
{
yield return new WaitForEndOfFrame();
if (animatorParamBindings != null && targets)
{
foreach (string str in animatorParamBindings)
{
if (str != null)
{
targets.GraphBuilder.Player.emodel.avatarController.UpdateBool(str, enabled);
}
}
}
}
#else
internal void UpdateBoolEditor(bool enabled)
{
if (animatorParamBindings != null && targets)
{
IAnimatorWrapper animator = targets.GraphBuilder.WeaponWrapper;
if (animator == null || !animator.IsValid)
{
Log.Warning($"animator wrapper invalid!");
return;
}
foreach (string str in animatorParamBindings)
{
if (str != null)
{
animator.SetBool(str, enabled);
}
}
}
}
#endif
}