EVERYTHING
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
public sealed class RayBehavior : NodeBehavior
|
||||
{
|
||||
public override void OnRun(string inputPortName)
|
||||
{
|
||||
if (base.IsAuthoritative && string.Equals(inputPortName, "Cast", StringComparison.Ordinal))
|
||||
{
|
||||
Vector3 origin = ResolvePosition(GetInputValue("Origin"));
|
||||
Vector3 vector = ResolveDirection(GetInputValue("Direction"));
|
||||
float maxDistance = Mathf.Max(0f, (float)GetInputNumber("Distance"));
|
||||
if (Physics.Raycast(new Ray(origin, (vector.sqrMagnitude > 0.0001f) ? vector.normalized : Vector3.forward), out var hitInfo, maxDistance))
|
||||
{
|
||||
Vector3 vector2 = NodePlayerUtility.WorldToVoxelPosition(hitInfo.point);
|
||||
SetOutputValueIfChanged("DidHit", BSValue.FromBool(value: true));
|
||||
SetOutputValueIfChanged("X", BSValue.FromNumber(vector2.x));
|
||||
SetOutputValueIfChanged("Y", BSValue.FromNumber(vector2.y));
|
||||
SetOutputValueIfChanged("Z", BSValue.FromNumber(vector2.z));
|
||||
TriggerOutput("Hit");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetOutputValueIfChanged("DidHit", BSValue.FromBool(value: false));
|
||||
TriggerOutput("Miss");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Vector3 ResolvePosition(BSValue value)
|
||||
{
|
||||
if (value.Kind == BSValueKind.Player)
|
||||
{
|
||||
Transform transform = NodePlayerUtility.ResolveHeadTransform(NodePlayerUtility.ResolvePlayer(value.AsPlayerId()));
|
||||
if (!(transform != null))
|
||||
{
|
||||
return Vector3.zero;
|
||||
}
|
||||
return transform.position;
|
||||
}
|
||||
if (value.TryResolveGroup(out var group) && group != null)
|
||||
{
|
||||
return group.GetWorldBounds().center;
|
||||
}
|
||||
return Vector3.zero;
|
||||
}
|
||||
|
||||
private static Vector3 ResolveDirection(BSValue value)
|
||||
{
|
||||
if (value.Kind == BSValueKind.Player)
|
||||
{
|
||||
Transform transform = NodePlayerUtility.ResolveHeadTransform(NodePlayerUtility.ResolvePlayer(value.AsPlayerId()));
|
||||
if (!(transform != null))
|
||||
{
|
||||
return Vector3.forward;
|
||||
}
|
||||
return transform.forward;
|
||||
}
|
||||
return Vector3.forward;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user