Files
BlockSpace-v1.5.0b/Assets/Scripts/Assembly-CSharp/MoveBehavior.cs
T
2026-06-01 17:19:55 +02:00

51 lines
1.5 KiB
C#

using System;
using BlockSpace.Voxels;
using BlockSpace.Worlds;
using UnityEngine;
[DisallowMultipleComponent]
public sealed class MoveBehavior : NodeBehavior
{
public override void OnRun(string inputPortName)
{
if (!string.Equals(inputPortName, "Move", StringComparison.Ordinal))
{
return;
}
BSValue inputValue = GetInputValue("Group");
VoxelGroup group;
if (inputValue.Kind == BSValueKind.Player)
{
int num = inputValue.AsPlayerId();
if (num <= 0)
{
return;
}
Vector3 position = NodePlayerUtility.VoxelToWorldPosition(new Vector3((float)GetInputNumber("X"), (float)GetInputNumber("Y"), (float)GetInputNumber("Z")));
if (NodePlayerUtility.IsLocalPlayerId(num))
{
if (PlayerTeleportUtil.TryTeleportLocalPlayer(position))
{
TriggerOutput("Moved");
}
}
else if (base.IsAuthoritative)
{
NodePlayerTransformRpc nodePlayerTransformRpc = NodePlayerTransformRpc.Ensure();
if (nodePlayerTransformRpc != null && nodePlayerTransformRpc.TryMovePlayer(num, position))
{
TriggerOutput("Moved");
}
}
}
else if (base.IsAuthoritative && TryGetInputGroup("Group", out group) && !(group == null) && !(VoxelGroupManager.Instance == null))
{
Vector3Int gridPosition = new Vector3Int(Mathf.RoundToInt((float)GetInputNumber("X")), Mathf.RoundToInt((float)GetInputNumber("Y")), Mathf.RoundToInt((float)GetInputNumber("Z")));
if (VoxelGroupManager.Instance.TransformGroup(group, gridPosition, group.packedRotation))
{
TriggerOutput("Moved");
}
}
}
}