This commit is contained in:
2024-11-29 17:51:19 +08:00
parent 2a2ab3bf5d
commit d95d117c08
23 changed files with 1555 additions and 384 deletions
@@ -7,31 +7,92 @@ namespace AibisDream.FixSystem
{
#region
private BodyModuleSystem _bodyModuleSystem;
private TMP_Text _screenText;
private WaveformLine _waveformLine;
private ScanLine _scanLine;
private SpriteRenderer _screen;
private WaveSlider _waveSlider;
#endregion
#region
public bool isScanning;
public bool isPlaying;
#endregion
private void Awake()
{
FixSystemCenter.SystemDic.Register(this);
InitComponentRefs();
}
private void InitComponentRefs()
{
_screenText = transform.Find("Screen Text").GetComponent<TMP_Text>();
// TODO 回头找个IOC容器一起管
_bodyModuleSystem = FindObjectOfType<BodyModuleSystem>();
_waveformLine = transform.Find("Waveform Visualizer").GetComponent<WaveformLine>();
_scanLine = transform.Find("Scan Line").GetComponent<ScanLine>();
_screen = transform.Find("Screen").GetComponent<SpriteRenderer>();
_waveSlider = transform.Find("Wave Slider").GetComponent<WaveSlider>();
_waveformLine.SetLineSize(_screen.bounds.size.x, _screen.bounds.size.y);
_scanLine.SetScreenSize(_screen.bounds.size.x, _screen.bounds.size.y);
_screenText.text = "";
}
#region
/// <summary>
/// 屏幕上播放波形
/// </summary>
/// <param name="waveformType">波形类型</param>
/// <param name="hasError">是否有错误</param>
public void PlayWave(WaveformType waveformType, bool hasError)
{
_waveSlider.InitSlider();
isPlaying = true;
var initialRandomPhase = Mathf.PI * Random.Range(7, 13) * 0.1f;
_waveformLine.PlayWave(waveformType, initialRandomPhase, hasError);
}
/// <summary>
/// 停止播放波形
/// </summary>
public void StopWave()
{
isPlaying = false;
_waveSlider.InitSlider();
_waveformLine.StopWave();
_scanLine.CloseScan();
}
/// <summary>
/// 调整相位
/// </summary>
public void AdjustPhaseShift(float phaseShift)
{
if (isPlaying)
{
_waveformLine.AdjustPhaseShift(phaseShift);
}
}
/// <summary>
/// 开始扫描
/// </summary>
public void StartScan()
{
float spikeX = _waveformLine.GetSpikeX();
StartCoroutine(_scanLine.ScanForError(spikeX));
}
/// <summary>
/// 显示消息
/// </summary>
/// <param name="message"></param>
/// <param name="message">消息</param>
public void ShowScreenMessage(string message)
{
_screenText.text = message;
@@ -44,5 +105,19 @@ namespace AibisDream.FixSystem
{
_screenText.text = "";
}
#endregion
}
public enum WaveformType
{
Default,
Sine,
Square,
Triangle,
Sawtooth,
Noise,
Composite,
Pulse
}
}