|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
namespace MalbersAnimations.Scriptables
|
|
|
|
|
|
{
|
|
|
|
|
|
[DefaultExecutionOrder(-1000)]
|
|
|
|
|
|
[AddComponentMenu("Malbers/Runtime Vars/Transform Hook")]
|
|
|
|
|
|
[HelpURL("https://malbersanimations.gitbook.io/animal-controller/global-components/scriptables/transform-hook")]
|
|
|
|
|
|
public class TransformHook : MonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
[Tooltip("Transform that it will be saved on the Transform var asset")]
|
|
|
|
|
|
public Transform Reference;
|
|
|
|
|
|
|
|
|
|
|
|
[Tooltip("Transform Scritable var that will store at runtime a transform")]
|
|
|
|
|
|
[CreateScriptableAsset] public TransformVar Hook;
|
|
|
|
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateHook();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnDisable()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (Hook.Value == Reference) DisableHook(); //Disable it only when is not this transform
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnValidate()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (Reference == null) Reference = transform;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public virtual void UpdateHook() => Hook.Value = Reference;
|
|
|
|
|
|
public virtual void DisableHook() => Hook.Value = null;
|
|
|
|
|
|
public virtual void RemoveHook() => Hook.Value = null;
|
|
|
|
|
|
public virtual void RemoveHook(Transform val)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (Hook.Value == val) Hook.Value=null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
|
[UnityEditor.CustomEditor(typeof(TransformHook)), UnityEditor.CanEditMultipleObjects]
|
|
|
|
|
|
public class TransformHookEditor : UnityEditor.Editor
|
|
|
|
|
|
{
|
|
|
|
|
|
UnityEditor.SerializedProperty Hook, Reference;
|
|
|
|
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
|
|
|
|
{
|
|
|
|
|
|
Hook = serializedObject.FindProperty("Hook");
|
|
|
|
|
|
Reference = serializedObject.FindProperty("Reference");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void OnInspectorGUI()
|
|
|
|
|
|
{
|
|
|
|
|
|
serializedObject.Update();
|
|
|
|
|
|
UnityEditor.EditorGUILayout.Space();
|
|
|
|
|
|
UnityEditor.EditorGUILayout.PropertyField(Hook, new GUIContent("Hook","Scriptable Asset to store the Reference Transform. Used to avoid scene dependencies"));
|
|
|
|
|
|
UnityEditor.EditorGUILayout.PropertyField(Reference);
|
|
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|