86 lines
1.5 KiB
C#
86 lines
1.5 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Math)]
|
|
[Tooltip("Performs boolean operations on 2 Bool Variables.")]
|
|
public class BoolOperator : FsmStateAction
|
|
{
|
|
public enum Operation
|
|
{
|
|
AND,
|
|
NAND,
|
|
OR,
|
|
XOR
|
|
}
|
|
|
|
[RequiredField]
|
|
[Tooltip("The first Bool variable.")]
|
|
public FsmBool bool1;
|
|
|
|
[RequiredField]
|
|
[Tooltip("The second Bool variable.")]
|
|
public FsmBool bool2;
|
|
|
|
[Tooltip("Boolean Operation.")]
|
|
public Operation operation;
|
|
|
|
[RequiredField]
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Store the result in a Bool Variable.")]
|
|
public FsmBool storeResult;
|
|
|
|
[Tooltip("Repeat every frame while the state is active.")]
|
|
public bool everyFrame;
|
|
|
|
public override void Reset()
|
|
{
|
|
bool1 = false;
|
|
bool2 = false;
|
|
operation = Operation.AND;
|
|
storeResult = null;
|
|
everyFrame = false;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
DoBoolOperator();
|
|
|
|
if (!everyFrame)
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
DoBoolOperator();
|
|
}
|
|
|
|
void DoBoolOperator()
|
|
{
|
|
var v1 = bool1.Value;
|
|
var v2 = bool2.Value;
|
|
|
|
switch (operation)
|
|
{
|
|
case Operation.AND:
|
|
storeResult.Value = v1 && v2;
|
|
break;
|
|
|
|
case Operation.NAND:
|
|
storeResult.Value = !(v1 && v2);
|
|
break;
|
|
|
|
case Operation.OR:
|
|
storeResult.Value = v1 || v2;
|
|
break;
|
|
|
|
case Operation.XOR:
|
|
storeResult.Value = v1 ^ v2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} |