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

75 lines
2.2 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Character)]
[Tooltip("Gets the Collision Flags from a Character Controller on a Game Object. Collision flags give you a broad overview of where the character collided with any other object.")]
public class GetControllerCollisionFlags : FsmStateAction
{
[RequiredField]
[CheckForComponent(typeof(CharacterController))]
[Tooltip("The GameObject with a Character Controller component.")]
public FsmOwnerDefault gameObject;
[UIHint(UIHint.Variable)]
[Tooltip("True if the Character Controller capsule is on the ground")]
public FsmBool isGrounded;
[UIHint(UIHint.Variable)]
[Tooltip("True if no collisions in last move.")]
public FsmBool none;
[UIHint(UIHint.Variable)]
[Tooltip("True if the Character Controller capsule was hit on the sides.")]
public FsmBool sides;
[UIHint(UIHint.Variable)]
[Tooltip("True if the Character Controller capsule was hit from above.")]
public FsmBool above;
[UIHint(UIHint.Variable)]
[Tooltip("True if the Character Controller capsule was hit from below.")]
public FsmBool below;
private GameObject previousGo; // remember so we can get new controller only when it changes.
private CharacterController controller;
public override void Reset()
{
gameObject = null;
isGrounded = null;
none = null;
sides = null;
above = null;
below = null;
}
public override void OnUpdate()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go == null)
{
return;
}
if (go != previousGo)
{
controller = go.GetComponent<CharacterController>();
previousGo = go;
}
if (controller != null)
{
isGrounded.Value = controller.isGrounded;
none.Value = (controller.collisionFlags & CollisionFlags.None) != 0;
sides.Value = (controller.collisionFlags & CollisionFlags.Sides) != 0;
above.Value = (controller.collisionFlags & CollisionFlags.Above) != 0;
below.Value = (controller.collisionFlags & CollisionFlags.Below) != 0;
}
}
}
}