using RTG; using System.Collections.Generic; using UnityEngine; using Octopus.Simulator; public class RTGController : UnitySingleton { public enum GizmoId { None = 0, Move, Rotate, Scale, Universal, } private ObjectTransformGizmo objectMoveGizmo; private ObjectTransformGizmo objectRotationGizmo; private ObjectTransformGizmo objectScaleGizmo; private ObjectTransformGizmo objectUniversalGizmo; private GizmoId workGizmoId; private ObjectTransformGizmo workGizmo; public List selectedObjects = new List(); public System.Action onTransformBegin; public System.Action> onTransformChanged; Panel_SimulationUI simulationUI; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { objectMoveGizmo = RTGizmosEngine.Get.CreateObjectMoveGizmo(); objectRotationGizmo = RTGizmosEngine.Get.CreateObjectRotationGizmo(); objectScaleGizmo = RTGizmosEngine.Get.CreateObjectScaleGizmo(); objectUniversalGizmo = RTGizmosEngine.Get.CreateObjectUniversalGizmo(); objectMoveGizmo.Gizmo.SetEnabled(false); objectMoveGizmo.Gizmo.MoveGizmo.SetSnapEnabled(false); objectMoveGizmo.Gizmo.MoveGizmo.SetVertexSnapEnabled(false); objectRotationGizmo.Gizmo.SetEnabled(false); objectScaleGizmo.Gizmo.SetEnabled(false); objectUniversalGizmo.Gizmo.SetEnabled(false); objectMoveGizmo.Gizmo.PreDragBegin += OnGizmoDragBegin; objectRotationGizmo.Gizmo.PreDragBegin += OnGizmoDragBegin; objectScaleGizmo.Gizmo.PreDragBegin += OnGizmoDragBegin; objectUniversalGizmo.Gizmo.PreDragBegin += OnGizmoDragBegin; objectMoveGizmo.Gizmo.PostDragUpdate += OnGizmoDragUpdate; objectRotationGizmo.Gizmo.PostDragUpdate += OnGizmoDragUpdate; objectScaleGizmo.Gizmo.PostDragUpdate += OnGizmoDragUpdate; objectUniversalGizmo.Gizmo.PostDragUpdate += OnGizmoDragUpdate; objectMoveGizmo.Gizmo.PostDragEnd += OnGizmoDragEnd; objectRotationGizmo.Gizmo.PostDragEnd += OnGizmoDragEnd; objectScaleGizmo.Gizmo.PostDragEnd += OnGizmoDragEnd; objectUniversalGizmo.Gizmo.PostDragEnd += OnGizmoDragEnd; workGizmo = objectMoveGizmo; workGizmoId = GizmoId.None; simulationUI = FindAnyObjectByType(); } private void Update() { if (Input.GetKeyDown(KeyCode.Delete)&& !simulationUI.isplaying) { Destroy(selectedObjects[0]); } } public void SetWorkGizmoId(GizmoId gizmoId) { objectMoveGizmo.Gizmo.SetEnabled(false); objectRotationGizmo.Gizmo.SetEnabled(false); objectScaleGizmo.Gizmo.SetEnabled(false); objectUniversalGizmo.Gizmo.SetEnabled(false); workGizmoId = gizmoId; if (gizmoId == GizmoId.None) return; else if (gizmoId == GizmoId.Move) workGizmo = objectMoveGizmo; else if (gizmoId == GizmoId.Rotate) workGizmo = objectRotationGizmo; else if (gizmoId == GizmoId.Scale) workGizmo = objectScaleGizmo; else if (gizmoId == GizmoId.Universal) workGizmo = objectUniversalGizmo; if (selectedObjects.Count != 0) { workGizmo.Gizmo.SetEnabled(true); workGizmo.RefreshPositionAndRotation(); } } public void SetWorkGizmoId(string gizmoId) { objectMoveGizmo.Gizmo.SetEnabled(false); objectRotationGizmo.Gizmo.SetEnabled(false); objectScaleGizmo.Gizmo.SetEnabled(false); objectUniversalGizmo.Gizmo.SetEnabled(false); if (gizmoId == "None") { workGizmoId = GizmoId.None; return; } else if (gizmoId == "Move") { workGizmoId = GizmoId.Move; workGizmo = objectMoveGizmo; } else if (gizmoId == "Rotate") { workGizmoId = GizmoId.Rotate; workGizmo = objectRotationGizmo; } else if (gizmoId == "Scale") { workGizmoId = GizmoId.Scale; workGizmo = objectScaleGizmo; } else if (gizmoId == "Universal") { workGizmoId = GizmoId.Universal; workGizmo = objectUniversalGizmo; } if (selectedObjects.Count != 0) { workGizmo.Gizmo.SetEnabled(true); workGizmo.RefreshPositionAndRotation(); } } private void OnSelectionChanged() { if (selectedObjects.Count != 0) { workGizmo.Gizmo.SetEnabled(true); workGizmo.RefreshPositionAndRotation(); } else { objectMoveGizmo.Gizmo.SetEnabled(false); objectRotationGizmo.Gizmo.SetEnabled(false); objectScaleGizmo.Gizmo.SetEnabled(false); objectUniversalGizmo.Gizmo.SetEnabled(false); } } public void AddGizmoTargetObject(GameObject obj) { selectedObjects.Add(obj); objectMoveGizmo.SetTargetObjects(selectedObjects); objectRotationGizmo.SetTargetObjects(selectedObjects); objectScaleGizmo.SetTargetObjects(selectedObjects); objectUniversalGizmo.SetTargetObjects(selectedObjects); } public void SetGizmoTargetObject(GameObject obj) { selectedObjects.Clear(); selectedObjects.Add(obj); objectMoveGizmo.SetTargetObjects(selectedObjects); objectRotationGizmo.SetTargetObjects(selectedObjects); objectScaleGizmo.SetTargetObjects(selectedObjects); objectUniversalGizmo.SetTargetObjects(selectedObjects); } public void SetGizmoTargetObjects(List objects) { selectedObjects.Clear(); selectedObjects.AddRange(objects); objectMoveGizmo.SetTargetObjects(selectedObjects); objectRotationGizmo.SetTargetObjects(selectedObjects); objectScaleGizmo.SetTargetObjects(selectedObjects); objectUniversalGizmo.SetTargetObjects(selectedObjects); } public void ClearGizmoTargetObjects() { selectedObjects.Clear(); objectMoveGizmo.SetTargetObjects(selectedObjects); objectRotationGizmo.SetTargetObjects(selectedObjects); objectScaleGizmo.SetTargetObjects(selectedObjects); objectUniversalGizmo.SetTargetObjects(selectedObjects); } private void OnGizmoDragBegin(Gizmo gizmo, int t) { onTransformBegin?.Invoke(); } private void OnGizmoDragUpdate(Gizmo gizmo, int t) { onTransformChanged?.Invoke(selectedObjects); } private void OnGizmoDragEnd(Gizmo gizmo, int t) { onTransformChanged?.Invoke(selectedObjects); } }