大修
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user