62 lines
1.5 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Events;
public abstract class ConditionBase : MonoBehaviour
{
//actionitems can be connected to GameplayAction scripts, and execute their one action (the method ExecuteAction implemented in each child class)
[SerializeField]
public List<Action> actions = new List<Action>();
//custom actions are more complicated to setup but more powerful, and appear only if useCustomActions is enabled
public bool useCustomActions = false;
public UnityEvent customActions;
//to perform the actions only once
public bool happenOnlyOnce = false;
private bool alreadyHappened = false;
public bool filterByTag = false;
public string filterTag = "Player";
//dataObject is usually the other object in the collision
public void ExecuteAllActions(GameObject dataObject)
{
//first check if the action has already been executed
if(happenOnlyOnce && alreadyHappened)
return;
//first execute the simple GameplayActions, if present
bool actionResult;
foreach(Action ga in actions)
{
if(ga != null)
{
actionResult = ga.ExecuteAction(dataObject);
if(actionResult == false)
{
Debug.LogWarning("An action failed and interrupted the chain of Actions");
return;
}
}
}
//execute the custom actions, if present and enabled
if(useCustomActions)
{
customActions.Invoke();
}
alreadyHappened = true; //will prevent re-executing the actions if happenOnlyOnce is true
}
}