using System.Collections; using System.Collections.Generic; using UnityEngine; using Invector; namespace Invector.vCharacterController.vActions { /// /// Generic Action receiver for events. /// Use this component inside character with component. /// This is usefull for trigger events based in the . /// [vClassHeader("Action Receiver")] public class vGenericActionReceiver : vMonoBehaviour { public List supportedActionNames = new List() { "Action" }; public UnityEngine.Events.UnityEvent onEnterTriggerAction; public UnityEngine.Events.UnityEvent onExitTriggerAction; public UnityEngine.Events.UnityEvent onStartAction; public UnityEngine.Events.UnityEvent onCancelAction; public UnityEngine.Events.UnityEvent onEndAction; private void Start() { vGenericAction genericAction = gameObject.GetComponentInParent(); if(genericAction) { genericAction.OnEnterTriggerAction.AddListener(OnEnterTriggerAction); genericAction.OnExitTriggerAction.AddListener(OnExitTriggerAction); genericAction.OnStartAction.AddListener(OnStartAction); genericAction.OnCancelAction.AddListener(OnCancelAction); genericAction.OnEndAction.AddListener(OnEndAction); } } private void OnDestroy() { vGenericAction genericAction = GetComponentInParent(); if (genericAction) { genericAction.OnEnterTriggerAction.RemoveListener(OnEnterTriggerAction); genericAction.OnExitTriggerAction.RemoveListener(OnExitTriggerAction); genericAction.OnStartAction.RemoveListener(OnStartAction); genericAction.OnCancelAction.RemoveListener(OnCancelAction); genericAction.OnEndAction.RemoveListener(OnEndAction); } } protected virtual bool IsValidAction(vTriggerGenericAction actionInfo) { bool isValid = this.enabled && this.gameObject.activeInHierarchy && actionInfo != null && supportedActionNames.Contains(actionInfo.actionName); return isValid; } /// /// Event called when Enter in trigger /// /// public virtual void OnEnterTriggerAction(vTriggerGenericAction actionInfo) { if (IsValidAction(actionInfo)) { onEnterTriggerAction.Invoke(); } } /// /// Event Called when exit Trigger /// /// public virtual void OnExitTriggerAction(vTriggerGenericAction actionInfo) { if (IsValidAction(actionInfo)) { onExitTriggerAction.Invoke(); } } /// /// Event called when action is started /// /// public virtual void OnStartAction(vTriggerGenericAction actionInfo) { if (IsValidAction(actionInfo)) { onStartAction.Invoke(); } } /// /// Event called when action is canceled /// /// public virtual void OnCancelAction(vTriggerGenericAction actionInfo) { if (IsValidAction(actionInfo)) { onCancelAction.Invoke(); } } /// /// Event called when action is finished or canceled /// /// public virtual void OnEndAction(vTriggerGenericAction actionInfo) { if (IsValidAction(actionInfo)) { onEndAction.Invoke(); } } } }