多轮审查和修复

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

@@ -0,0 +1,53 @@
using UnityEngine;
using BaseGames.Core;
using BaseGames.Core.Events;
using BaseGames.World;
namespace BaseGames.Challenge
{
/// <summary>
/// 挑战房间入口触发物(架构 22_QuestChallengeModule §13
/// 实现 IInteractable玩家交互后通过事件频道触发挑战场景加载。
/// ⚠️ SceneLoader 无 Instance通过 EVT_SceneLoadRequest 频道触发加载(架构 03 §3
/// </summary>
[RequireComponent(typeof(Collider2D))]
public class ChallengeRoomTrigger : MonoBehaviour, IInteractable
{
[SerializeField] private ChallengeRoomSO _challengeData;
[SerializeField] private string _challengeSceneName;
[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; // EVT_SceneLoadRequest
// ── IInteractable ──────────────────────────────────────────────────
public string InteractPrompt => _challengeData != null
? $"进入挑战:{_challengeData.displayName}"
: "进入挑战";
public bool CanInteract => IsUnlocked();
public void Interact(Transform player)
{
if (!IsUnlocked()) return;
_onSceneLoadRequest?.Raise(new SceneLoadRequest
{
SceneName = _challengeSceneName,
EntryTransitionId = string.Empty,
ShowLoadingScreen = false,
IsRespawn = false,
});
}
public void OnPlayerEnterRange(Transform player) { }
public void OnPlayerExitRange() { }
// ── 私有 ─────────────────────────────────────────────────────────
private bool IsUnlocked()
{
if (_challengeData?.prerequisiteBossIds == null) return true;
var sm = ServiceLocator.GetOrDefault<ISaveService>();
if (sm == null) return false;
foreach (var bossId in _challengeData.prerequisiteBossIds)
if (!sm.IsBossDefeated(bossId)) return false;
return true;
}
}
}