using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using Ichni; using Ichni.Editor; using Ichni.RhythmGame; using TMPro; using Unity.VisualScripting; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; public class PanelDrawer : MonoBehaviour //暂时支持xz { public bool isEditing = false; public CameraManager cameraManager => EditorManager.instance.cameraManager; public GameElement connectedGameElement => EditorManager.instance.uiManager.inspector.connectedGameElement; public SceneCamera sceneCamera => cameraManager.sceneCamera; public float height { get { return _height; } set { _height = value; } } private float _height = 10f; public float baseHeight { get { return _baseHeight; } set { _baseHeight = value; } } private float _baseHeight = 0f; private Vector3 tempRot = new Vector3(30, 0, 0); public void startEdit() { isEditing = true; if (!cameraManager.isSceneCameraActive) { cameraManager.sceneCamera.transform.position = cameraManager.gameCamera.transform.position; cameraManager.sceneCamera.transform.rotation = cameraManager.gameCamera.transform.rotation; cameraManager.SwitchCamera(); cameraManager.sceneCamera.transform.DOMove(cameraManager.gameCamera.transform.position + new Vector3(0, 0, _baseHeight + _height), 0.5f).SetEase(Ease.InOutQuad); tempRot = cameraManager.sceneCamera.transform.eulerAngles; cameraManager.sceneCamera.transform.DORotate(new Vector3(90, 0, 0), 0.5f).SetEase(Ease.InOutQuad); } else { cameraManager.sceneCamera.transform.DOMove(cameraManager.gameCamera.transform.position + new Vector3(0, 0, _baseHeight + _height), 0.5f).SetEase(Ease.InOutQuad); tempRot = cameraManager.sceneCamera.transform.eulerAngles; cameraManager.sceneCamera.transform.DORotate(new Vector3(90, 0, 0), 0.5f).SetEase(Ease.InOutQuad); } } public void endEdit() { isEditing = false; cameraManager.sceneCamera.transform.DOMove(cameraManager.gameCamera.transform.position + new Vector3(0, 0, _baseHeight + _height), 0.5f).SetEase(Ease.InOutQuad); cameraManager.sceneCamera.transform.DORotate(tempRot, 0.5f).SetEase(Ease.InOutQuad); } public void SwitchEditing() { if (isEditing) { endEdit(); } else { startEdit(); } } void Update() { if (isEditing && connectedGameElement is Track && Keyboard.current.leftCtrlKey.isPressed && Mouse.current.leftButton.wasPressedThisFrame) { StartCoroutine(Pressing()); } } public Texture ingTexture; public Canvas DisplayCanvas; private IEnumerator Pressing() { GameObject gobj2 = new GameObject("PanelDrawerText"); gobj2.transform.SetParent(DisplayCanvas.transform, false); TextMeshProUGUI Text = gobj2.AddComponent(); Text.rectTransform.position = new Vector3(50, 50, 0); Vector3 hitPoint = new Vector3(0, 0, 0); while (Mouse.current.leftButton.isPressed) { Ray ray = cameraManager.currentCamera.ScreenPointToRay(Mouse.current.position.ReadValue()); Plane plane = new Plane(Vector3.up, new Vector3(0, _baseHeight, 0)); if (plane.Raycast(ray, out float enter)) { hitPoint = ray.GetPoint(enter); if (Keyboard.current.leftAltKey.isPressed) { hitPoint = new Vector3(Mathf.Round(hitPoint.x / 0.5f) * 0.5f, hitPoint.y, Mathf.Round(hitPoint.z / 0.5f) * 0.5f); new Vector3(Mathf.Round(Mouse.current.position.ReadValue().x / 10) * 10, Mathf.Round(Mouse.current.position.ReadValue().y / 10) * 10, 0); } else { } Text.rectTransform.position = Mouse.current.position.ReadValue() + new Vector2(20, -20); Text.text = $"X: {hitPoint.x:F2}\nZ: {hitPoint.z:F2}\n\n"; Text.fontSize = 45; Text.color = Color.yellow; } yield return null; } Destroy(Text.gameObject); var i = PathNode.GenerateElement("new pathnode", Guid.NewGuid(), new List(), true, (Track)connectedGameElement, true); i.transform.position = hitPoint; i.transformSubmodule.originalPosition = i.transform.localPosition; i.Refresh(); connectedGameElement.Refresh(); } }