using System; using BlockSpace.Voxels; using UnityEngine; [DisallowMultipleComponent] public sealed class RotateBehavior : NodeBehavior { public override void OnRun(string inputPortName) { if (string.Equals(inputPortName, "Rotate", StringComparison.Ordinal) && GetInputValue("Group").Kind != BSValueKind.Player && base.IsAuthoritative && TryGetInputGroup("Group", out var group) && !(group == null) && !(VoxelGroupManager.Instance == null)) { Vector3Int quarterTurns = new Vector3Int(NormalizeQuarterTurns(Mathf.RoundToInt((float)GetInputNumber("Pitch") / 90f)), NormalizeQuarterTurns(Mathf.RoundToInt((float)GetInputNumber("Yaw") / 90f)), NormalizeQuarterTurns(Mathf.RoundToInt((float)GetInputNumber("Roll") / 90f))); if (VoxelGroupManager.Instance.TransformGroup(group, group.position, GridRotationUtility.Pack(quarterTurns))) { TriggerOutput("Rotated"); } } } private static int NormalizeQuarterTurns(int turns) { return NodePlayerUtility.NormalizeQuarterTurns(turns); } }