Files
beyond/Assets/ThirdParty/PlayMaker/Actions/Rect/RectContains.cs
2024-11-20 15:21:28 +01:00

98 lines
1.8 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Rect)]
[Tooltip("Tests if a point is inside a rectangle.")]
public class RectContains : FsmStateAction
{
[RequiredField]
[Tooltip("Rectangle to test.")]
public FsmRect rectangle;
[Tooltip("Point to test.")]
public FsmVector3 point;
[Tooltip("Specify/override X value.")]
public FsmFloat x;
[Tooltip("Specify/override Y value.")]
public FsmFloat y;
//[ActionSection("")]
[Tooltip("Event to send if the Point is inside the Rectangle.")]
public FsmEvent trueEvent;
[Tooltip("Event to send if the Point is outside the Rectangle.")]
public FsmEvent falseEvent;
[UIHint(UIHint.Variable)]
[Tooltip("Store the result in a variable.")]
public FsmBool storeResult;
//[ActionSection("")]
[Tooltip("Repeat every frame.")]
public bool everyFrame;
public override void Reset()
{
rectangle = new FsmRect { UseVariable = true };
point = new FsmVector3 { UseVariable = true };
x = new FsmFloat { UseVariable = true };
y = new FsmFloat { UseVariable = true };
storeResult = null;
trueEvent = null;
falseEvent = null;
everyFrame = false;
}
public override void OnEnter()
{
DoRectContains();
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
DoRectContains();
}
void DoRectContains()
{
if (rectangle.IsNone)
{
return;
}
// get point to test from inputs
var testPoint = point.Value;
if (!x.IsNone)
{
testPoint.x = x.Value;
}
if (!y.IsNone)
{
testPoint.y = y.Value;
}
// do results
var contained = rectangle.Value.Contains(testPoint);
storeResult.Value = contained;
Fsm.Event(contained ? trueEvent : falseEvent);
}
}
}