25 lines
1008 B
C#
25 lines
1008 B
C#
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);
|
|
}
|
|
}
|