using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class ReadyMoveState : SceneMode { Vector3 _cursorPosition; bool _mouseDown = false; bool _areEventSetup = false; public ReadyMoveState(SceneModeManager manager) : base(manager) { } public override void OnStateEnter() { _G.LockInState = true; _mouseDown = Input.GetMouseButton(0) || Input.touches.Length > 0; GameObject obj = SceneModeManager.Selected; if (obj == null) { Debug.Log("No object to move"); _manager.SetSceneMode(SceneModes.Navigate); return; } Mesure.OnUpdate(); //DASH.RefreshLite(); int objectNumber = Get.GetObjectIndex(obj.name); CommandHandler.Instance.BeforeDataTemp = CommandHandler.CopyObjectData(_G.OBJs[objectNumber]); if (_manager._previousSM != SceneModes.Navigate && _manager._previousSM != SceneModes.Move && _manager._previousSM != SceneModes.MoveHandle && _manager._previousSM != SceneModes.SlidingHandle && _manager._previousSM != SceneModes.ReadyMove) { MoveHandles.Instance.SetHandleGroupActive(true); //MoveHandles.Instance.ActivateTorus(true, obj.transform); if (!_mouseDown) { AddEventTrigger(); } return; } MoveHandles.Instance.SetHandleGroupActive(true); //MoveHandles.Instance.ActivateTorus(true, obj.transform); if (!_mouseDown) { AddEventTrigger(); } MoveHandles.Instance.UpdateHandlesVisual(obj.transform); MeshRenderer selectedMeshRenderer = obj.GetComponent(); if (selectedMeshRenderer != null) { selectedMeshRenderer.material = _G.GGT; } } private void AddEventTrigger() { AddEventTrigger(MoveHandles.Instance.RotationHandle, StartRotating, EventTriggerType.PointerDown); //AddEventTrigger(MoveHandles.Instance.RotationHandle2, StartRotating, EventTriggerType.PointerDown); AddEventTrigger(MoveHandles.Instance.ElevateHandle, StartSliding, EventTriggerType.PointerDown); //AddEventTrigger(MoveHandles.Instance.ElevateHandle2, StartSliding, EventTriggerType.PointerDown); AddEventTrigger(MoveHandles.Instance.MoveHandle, StartMoving, EventTriggerType.PointerDown); } private void StartMoving(BaseEventData arg0) { MoveHandles.Instance._lastClicked = null; SceneModeManager.Instance.SetSceneMode(SceneModes.MoveHandle); } //private void StartEditing(BaseEventData arg0) //{ // SceneModeManager.Instance.SetSceneMode(SceneModes.EditingHandle); //} private void StartSliding(BaseEventData arg0) { MoveHandles.Instance._lastClicked = arg0.selectedObject; SceneModeManager.Instance.SetSceneMode(SceneModes.SlidingHandle); } private void StartRotating(BaseEventData arg0) { MoveHandles.Instance._lastClicked = arg0.selectedObject; SceneModeManager.Instance.SetSceneMode(SceneModes.RotationHandle); } private void AddEventTrigger(GameObject handle, UnityAction function, EventTriggerType triggerType) { if(handle == null) { return; } EventTrigger eventTrigger = handle.GetComponent(); if (eventTrigger == null) { eventTrigger = handle.AddComponent(); } // Clear existing triggers (optional) eventTrigger.triggers.Clear(); EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = triggerType; entry.callback.AddListener((data) => function.Invoke((BaseEventData)data)); eventTrigger.triggers.Add(entry); } private void ClearEventTrigger(GameObject handle) { if (handle == null) return; EventTrigger eventTrigger = handle.GetComponent(); if (eventTrigger != null) { // Clear existing triggers (optional) eventTrigger.triggers.Clear(); //eventTrigger = handle.AddComponent(); } } public override void OnStateExit() { ClearEventTrigger(MoveHandles.Instance.RotationHandle); //ClearEventTrigger(MoveHandles.Instance.RotationHandle2); ClearEventTrigger(MoveHandles.Instance.ElevateHandle); //ClearEventTrigger(MoveHandles.Instance.ElevateHandle2); ClearEventTrigger(MoveHandles.Instance.MoveHandle); //ClearEventTrigger(MoveHandles.Instance.EditHandle); MoveHandles.Instance.SetHandleGroupActive(false); //MoveHandles.Instance.ActivateTorus(false, null); _G.LockInState = false; //Mesure.Hide(); } public override void OnStateUpdate() { if (_mouseDown) { _mouseDown = Input.GetMouseButton(0) || Input.touches.Length > 0; if (!_mouseDown) { AddEventTrigger(); } } Mesure.OnUpdate(); MoveHandles.Instance.UpdateHandlesVisual(SceneModeManager.Selected.transform); } }