34 lines
986 B
C#
34 lines
986 B
C#
using UnityEngine;
|
|
|
|
[DisallowMultipleComponent]
|
|
public sealed class DistanceBehavior : GuardedValueNodeBehavior
|
|
{
|
|
protected override void RecomputeCore()
|
|
{
|
|
Vector3 worldPosition = ResolvePosition(GetInputValue("A"));
|
|
Vector3 worldPosition2 = ResolvePosition(GetInputValue("B"));
|
|
Vector3 a = NodePlayerUtility.WorldToVoxelPosition(worldPosition);
|
|
Vector3 b = NodePlayerUtility.WorldToVoxelPosition(worldPosition2);
|
|
float num = Vector3.Distance(a, b);
|
|
SetOutputValueIfChanged("Distance", BSValue.FromNumber(num));
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|