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();
}
}
}
}