Files
2026-02-13 17:40:50 +08:00

136 lines
4.7 KiB
C#

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<TextMeshProUGUI>();
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<string>(), true, (Track)connectedGameElement, true);
i.transform.position = hitPoint;
i.transformSubmodule.originalPosition = i.transform.localPosition;
i.Refresh();
connectedGameElement.Refresh();
}
}