This commit is contained in:
2024-12-12 01:07:26 +08:00
parent 2667419d98
commit 3fcff0598a
55 changed files with 1861 additions and 964 deletions
@@ -0,0 +1,99 @@
using UnityEngine;
namespace AibisDream.FixSystem
{
public class WaveSlider : MonoBehaviour
{
private OscilloscopeSystem _oscilloscopeSystem;
private Transform _slider; // 滑块的 Transform
private Vector2 _startPos;
private Vector2 _endPos;
private float _value;
private bool _isDragging;
private void Awake()
{
InitComponentsRef();
}
private void InitComponentsRef()
{
_oscilloscopeSystem = transform.GetComponentInParent<OscilloscopeSystem>();
_slider = transform.Find("Sliding Block");
var startTrans = transform.Find("Slider Start Pos");
var endTrans = transform.Find("Slider End Pos");
_startPos = new Vector2(startTrans.position.x, startTrans.position.y);
_endPos = new Vector2(endTrans.position.x, endTrans.position.y);
InitSlider();
}
public void InitSlider()
{
_slider.position = new Vector3(_startPos.x, _startPos.y, _slider.position.z);
}
private void Update()
{
if (_oscilloscopeSystem.isScanning) return;
if (Input.GetMouseButtonDown(0))
{
OnMouseButtonDown();
}
if (Input.GetMouseButtonUp(0))
{
OnMouseButtonUp();
}
if (_isDragging)
{
OnDragging();
}
}
private void OnMouseButtonDown()
{
// 检测鼠标是否点击在滑块上
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D hitCollider = Physics2D.OverlapPoint(mousePos);
if (hitCollider && hitCollider.transform == _slider)
{
_isDragging = true;
}
}
private void OnMouseButtonUp()
{
_isDragging = false;
}
private void OnDragging()
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
float clampedX = Mathf.Clamp(mousePos.x, _startPos.x, _endPos.x);
_slider.position = new Vector3(clampedX, _slider.position.y, _slider.position.z);
// 计算滑块在轨道上的比例
var curValue = (clampedX - _startPos.x) / (_endPos.x - _startPos.x);
UpdateValue(curValue);
}
private void UpdateValue(float curValue)
{
if (!Mathf.Approximately(curValue, _value))
{
// 如果相位有更新,就同步给波形
_oscilloscopeSystem.AdjustPhaseShift(curValue);
_value = curValue;
}
}
}
}