多轮审查和修复

This commit is contained in:
2026-05-12 15:34:08 +08:00
parent f55d2a57c3
commit ebbbb7332e
805 changed files with 838724 additions and 1905 deletions

View File

@@ -1,4 +1,5 @@
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using BaseGames.Core.Events;
@@ -20,7 +21,7 @@ namespace BaseGames.Core
}
/// <summary>
/// 死亡/复活流程独立服务Phase 0 骨架Phase 1 完整实现)
/// 死亡/复活流程独立服务。
/// </summary>
public class DeathRespawnService : MonoBehaviour, IDeathRespawnService
{
@@ -30,49 +31,58 @@ namespace BaseGames.Core
[SerializeField] private float _respawnFadeDuration = 0.4f;
[Header("Event Channels - Raise")]
[SerializeField] private VoidEventChannelSO _onRespawnStarted;
[SerializeField] private VoidEventChannelSO _onRespawnCompleted;
[SerializeField] private VoidEventChannelSO _onRespawnStarted;
[SerializeField] private VoidEventChannelSO _onRespawnCompleted;
[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest;
[Header("Event Channels - Listen")]
[SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed;
private bool _deathConfirmed;
private void OnEnable()
{
if (_onDeathScreenConfirmed != null)
_onDeathScreenConfirmed.OnEventRaised += HandleDeathScreenConfirmed;
}
private void OnDisable()
{
if (_onDeathScreenConfirmed != null)
_onDeathScreenConfirmed.OnEventRaised -= HandleDeathScreenConfirmed;
}
private void HandleDeathScreenConfirmed() => _deathConfirmed = true;
public IEnumerator StartDeathSequenceCoroutine()
{
yield return new WaitForSeconds(_deathAnimDuration);
yield return new WaitForSeconds(_deathScreenDelay);
_deathConfirmed = false;
yield return new WaitUntil(() => _deathConfirmed);
// 局部订阅确认事件,不依赖类级 bool 字段
bool confirmed = false;
var sub = _onDeathScreenConfirmed?.Subscribe(() => confirmed = true);
yield return new WaitUntil(() => confirmed);
sub?.Dispose();
}
public IEnumerator StartRespawnCoroutine()
{
_onRespawnStarted?.Raise();
yield return new WaitForSeconds(_respawnFadeDuration);
// Phase 1加载存档场景TODO
// 通过 SceneLoadRequest 频道触发场景重载,复用 SceneService / RoomTransition 路径
var sm = ServiceLocator.GetOrDefault<ISaveService>();
_onSceneLoadRequest?.Raise(new SceneLoadRequest
{
SceneName = sm?.LastCheckpointScene,
EntryTransitionId = sm?.LastCheckpointSpawnId,
ShowLoadingScreen = true,
IsRespawn = true,
});
yield return new WaitForSeconds(_respawnFadeDuration);
_onRespawnCompleted?.Raise();
}
public IEnumerator StartGameOverCoroutine()
{
// Phase 1SteelSoul 清档并返回主菜单TODO
yield return null;
// 1. 删除当前存档槽
var saveManager = ServiceLocator.GetOrDefault<ISaveService>();
if (saveManager != null)
{
var task = saveManager.DeleteSlotAsync(saveManager.ActiveSlot);
yield return new WaitUntil(() => task.IsCompleted);
}
// 2. 返回主菜单
var sceneService = ServiceLocator.GetOrDefault<ISceneService>();
if (sceneService != null)
yield return sceneService.LoadMainMenuCoroutine();
}
}
}