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

81 lines
2.2 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2016. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Physics)]
[Tooltip("Gets info on the last RaycastAll and store in array variables.")]
public class GetRaycastAllInfo : FsmStateAction
{
[Tooltip("Store the GameObjects hit in an array variable.")]
[UIHint(UIHint.Variable)]
[ArrayEditor(VariableType.GameObject)]
public FsmArray storeHitObjects;
[Tooltip("Get the world position of all ray hit point and store them in an array variable.")]
[UIHint(UIHint.Variable)]
[ArrayEditor(VariableType.Vector3)]
public FsmArray points;
[Tooltip("Get the normal at all hit points and store them in an array variable.")]
[UIHint(UIHint.Variable)]
[ArrayEditor(VariableType.Vector3)]
public FsmArray normals;
[Tooltip("Get the distance along the ray to all hit points and store them in an array variable.")]
[UIHint(UIHint.Variable)]
[ArrayEditor(VariableType.Float)]
public FsmArray distances;
[Tooltip("Repeat every frame. Warning, this could be affecting performances")]
public bool everyFrame;
public override void Reset()
{
storeHitObjects = null;
points = null;
normals = null;
distances = null;
everyFrame = false;
}
void StoreRaycastAllInfo()
{
if (RaycastAll.RaycastAllHitInfo == null)
{
return;
}
storeHitObjects.Resize(RaycastAll.RaycastAllHitInfo.Length);
points.Resize(RaycastAll.RaycastAllHitInfo.Length);
normals.Resize(RaycastAll.RaycastAllHitInfo.Length);
distances.Resize(RaycastAll.RaycastAllHitInfo.Length);
for (int i = 0; i < RaycastAll.RaycastAllHitInfo.Length; i++)
{
storeHitObjects.Values[i] = RaycastAll.RaycastAllHitInfo[i].collider.gameObject;
points.Values[i] = RaycastAll.RaycastAllHitInfo[i].point;
normals.Values[i] = RaycastAll.RaycastAllHitInfo[i].normal;
distances.Values[i] = RaycastAll.RaycastAllHitInfo[i].distance;
}
}
public override void OnEnter()
{
StoreRaycastAllInfo();
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
StoreRaycastAllInfo();
}
}
}