136 lines
4.7 KiB
C#
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();
|
|
}
|
|
}
|