62 lines
1.5 KiB
C#
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
|
|
}
|
|
} |