196 lines
6.7 KiB
C#
196 lines
6.7 KiB
C#
using RTG;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Octopus.Simulator;
|
|
|
|
public class RTGController : UnitySingleton<RTGController>
|
|
{
|
|
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<GameObject> selectedObjects = new List<GameObject>();
|
|
public System.Action onTransformBegin;
|
|
public System.Action<List<GameObject>> 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<Panel_SimulationUI>();
|
|
}
|
|
|
|
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<GameObject> 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);
|
|
}
|
|
}
|