Here is a little Action i made for doing a window test on float values.. has been very handy for me. Dont think there was already one here.. but i have been wrong before.
Q
//
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Logic)]
[Tooltip("Sends Events based on a float being inside a window of values.")]
public class FloatWindowCompare : FsmStateAction
{
[RequiredField]
[Tooltip("Float to Check")]
public FsmFloat floatTest;
[RequiredField]
[Tooltip("Lower limit for window")]
public FsmFloat floatLower;
[RequiredField]
[Tooltip("Upper limit for window")]
public FsmFloat floatUpper;
[Tooltip("Event sent if FloatTest is inside the window")]
public FsmEvent inWindow;
[Tooltip("Event sent if FloatTest is outside the window")]
public FsmEvent outOfWindow;
public bool everyFrame;
public override void Reset()
{
floatTest = 0f;
floatLower = 0f;
floatUpper = 0f;
inWindow = null;
outOfWindow = null;
everyFrame = false;
}
public override void OnEnter()
{
DoCompare();
if (!everyFrame)
Finish();
}
public override void OnUpdate()
{
DoCompare();
}
void DoCompare()
{
if (floatTest.Value > floatLower.Value && floatTest.Value < floatUpper.Value)
{
Fsm.Event(inWindow);
return;
}
if (floatTest.Value < floatLower.Value || floatTest.Value > floatUpper.Value)
{
Fsm.Event(outOfWindow);
return;
}
}
public override string ErrorCheck()
{
if (FsmEvent.IsNullOrEmpty(inWindow ) &&
FsmEvent.IsNullOrEmpty(outOfWindow))
return "Action sends no events!";
return "";
}
}
}