注意:更改了trackpercentpoint的逻辑

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2025-08-31 15:27:02 +08:00
parent 84ff356427
commit 27b3cf58d0
40 changed files with 288899 additions and 18281 deletions

View File

@@ -27,7 +27,7 @@ namespace Ichni.Editor
public TimePointerModule timePointerModule;
public MusicPlayModule musicPlayModule;
private TimePointer MarkedPointer;
public TMP_InputField TimeField;
public TMP_InputField BeatField;
@@ -41,6 +41,7 @@ namespace Ichni.Editor
{
DetectSetRange();
DetectPointer();
}
@@ -86,6 +87,71 @@ namespace Ichni.Editor
}
}
}
private void DetectPointer()
{
if (Mouse.current.leftButton.wasPressedThisFrame)
{
foreach (var pointer in timePointerModule.ActivePointer)
{
if (RectTransformUtility.RectangleContainsScreenPoint(pointer.intervalUnitText.GetComponent<RectTransform>(), Mouse.current.position.ReadValue()))
{
GUIUtility.systemCopyBuffer = pointer.intervalUnitText.text;
LogWindow.Log("Copied Time: " + pointer.intervalUnitText.text + " Marked Pointer");
if (MarkedPointer != null) MarkedPointer.intervalUnitText.color = Color.white;
pointer.intervalUnitText.color = Color.yellow;
pointer.PlayAnim();
MarkedPointer = pointer;
}
}
}
if (Mouse.current.rightButton.wasPressedThisFrame)
{
foreach (var pointer in timePointerModule.ActivePointer)
{
if (RectTransformUtility.RectangleContainsScreenPoint(pointer.intervalUnitText.GetComponent<RectTransform>(), Mouse.current.position.ReadValue()))
{
GUIUtility.systemCopyBuffer = Mathf.Abs(pointer.time - MarkedPointer.time).ToString("F3");
LogWindow.Log("Total Time: " + Mathf.Abs(pointer.time - MarkedPointer.time).ToString("F3"));
pointer.PlayAnim();
pointer.intervalUnitText.color = Color.yellow;
pointer.intervalUnitText.DOColor(Color.white, 0.5f);
// 灰色矩形动画效果
if (MarkedPointer != null && pointer != MarkedPointer)
{
var rt1 = pointer.intervalUnitText.GetComponent<RectTransform>();
var rt2 = MarkedPointer.intervalUnitText.GetComponent<RectTransform>();
var parentRect = timePointerModule.timePointerContainer;
// 世界坐标转父级本地坐标
Vector3 localPos1 = parentRect.InverseTransformPoint(rt1.position);
Vector3 localPos2 = parentRect.InverseTransformPoint(rt2.position);
float minX = Mathf.Min(localPos1.x, localPos2.x);
float width = Mathf.Abs(localPos1.x - localPos2.x);
float minY = Mathf.Min(localPos1.y, localPos2.y);
float height = Mathf.Max(rt1.rect.height, rt2.rect.height);
GameObject rectObj = new GameObject("PointerRangeRect", typeof(RectTransform), typeof(Image));
rectObj.transform.SetParent(parentRect, false);
var rectTrans = rectObj.GetComponent<RectTransform>();
var image = rectObj.GetComponent<Image>();
image.color = new Color(1f, 1f, 1f, 0.5f);
rectTrans.anchorMin = new Vector2(0, 0);
rectTrans.anchorMax = new Vector2(0, 0);
rectTrans.pivot = new Vector2(0, 0);
rectTrans.localPosition = new Vector3(minX, minY - (height / 2), 0);
rectTrans.sizeDelta = new Vector2(width, height);
DOTween.ToAlpha(() => image.color, c => image.color = c, 0f, 1f)
.OnComplete(() => Destroy(rectObj));
}
}
}
}
}
private void UpdateTime()
{
TimeField.text = songTime.ToString("F2");