This commit is contained in:
SoulliesOfficial
2026-03-14 02:30:26 -04:00
parent cf86f0ee51
commit aee62cd637
2041 changed files with 246771 additions and 129128 deletions

View File

@@ -1,18 +1,33 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Ichni.Editor
{
public class MusicPlayer : MonoBehaviour
/// <summary>
/// 编辑器的音乐播放控制器。
/// 实现 ISongTimeProvider作为编辑器的标准时间来源
/// 在 EditorManager.Awake 中注册到 CoreServices.TimeProvider。
/// </summary>
public class MusicPlayer : MonoBehaviour, ISongTimeProvider
{
#region [ISongTimeProvider ] ISongTimeProvider Implementation
/// <summary>当前播放进度(秒),已扣除 offset供 CoreServices.TimeProvider 使用</summary>
public float SongTime => EditorManager.instance.songInformation.songTime;
/// <summary>当前是否正在播放</summary>
public bool IsPlaying => isPlaying;
#endregion
#region [] Property Caches
public bool isDebugging;
public bool isPlaying;
public AudioSource audioSource;
private float DspTime => (float)AudioSettings.dspTime;
#endregion
#region [] Lifecycle
private void Update()
{
if (isDebugging)
@@ -23,16 +38,18 @@ namespace Ichni.Editor
if (isPlaying)
{
EditorManager.instance.songInformation.songTime = EditorManager.instance.musicPlayer.audioSource.time - EditorManager.instance.songInformation.offset;
EditorManager.instance.songInformation.songTime =
audioSource.time - EditorManager.instance.songInformation.offset;
}
}
#endregion
#region [] Playback Control
public void PlayMusic()
{
isPlaying = !isPlaying;
audioSource.time = EditorManager.instance.songInformation.songTime + EditorManager.instance.songInformation.offset;
audioSource.time = EditorManager.instance.songInformation.songTime +
EditorManager.instance.songInformation.offset;
if (isPlaying)
{
Trail.FreezeAllTrails(!isPlaying);
@@ -40,6 +57,7 @@ namespace Ichni.Editor
}
else PauseMusic();
}
public IEnumerator PlayBackMusic()
{
float startt = audioSource.time - EditorManager.instance.songInformation.offset;
@@ -47,12 +65,15 @@ namespace Ichni.Editor
yield return new WaitUntil(() => Keyboard.current.rightAltKey.wasReleasedThisFrame);
audioSource.time = startt + EditorManager.instance.songInformation.offset;
PauseMusic();
}
public void PauseMusic()
{
if (isPlaying) EditorManager.instance.songInformation.songTime = audioSource.time - EditorManager.instance.songInformation.offset;
if (isPlaying)
{
EditorManager.instance.songInformation.songTime =
audioSource.time - EditorManager.instance.songInformation.offset;
}
isPlaying = false;
audioSource.Pause();
Trail.FreezeAllTrails(!isPlaying);
@@ -63,7 +84,7 @@ namespace Ichni.Editor
isPlaying = false;
EditorManager.instance.songInformation.songTime = 0;
audioSource.Stop();
//EditorManager.instance.uiManager.timeline.timePointerModule.SetRange(0);
}
#endregion
}
}