46 lines
2.2 KiB
C#
46 lines
2.2 KiB
C#
// ─────────────────────────────────────────────────────────────────────────────
|
|
// RunErrorModalGuardRunner.cs — RunErrorModalGuard 의 시간 축(숨김 GameObject 1개 · 코루틴 0)
|
|
//
|
|
// PD 지시 #813 · 발주서 WL-813x2 §1-3 (2026-09-09)
|
|
//
|
|
// 새 Manager/Singleton 을 만들지 않는다 — RunDirectorRunner · BossArenaRunner · SurvivalRunner 와 같은 방식.
|
|
// HideAndDontSave 라 씬 전환에도 살아남고 씬·프리팹에 저장되지 않는다.
|
|
// WLErrorGuardSettings.Enabled 가 false 면 Boot 이 이 오브젝트를 아예 만들지 않는다(C8).
|
|
//
|
|
// 🔴 어셈블리 주의: Assets/WL/Combat/ 에 .asmdef 를 만들지 말 것.
|
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
using UnityEngine;
|
|
|
|
namespace WL.Combat.Diagnostics
|
|
{
|
|
/// <summary>훅 상태를 폴링 주기마다 목표 상태로 맞춘다(바뀔 때만 손댄다).</summary>
|
|
internal sealed class RunErrorModalGuardRunner : MonoBehaviour
|
|
{
|
|
static RunErrorModalGuardRunner s_runner;
|
|
|
|
/// <summary>런너 1개 보장(플레이 모드 전용).</summary>
|
|
internal static void Ensure()
|
|
{
|
|
if (!Application.isPlaying || s_runner != null) return;
|
|
var go = new GameObject("[WL813x2] RunErrorModalGuardRunner");
|
|
go.hideFlags = HideFlags.HideAndDontSave;
|
|
s_runner = go.AddComponent<RunErrorModalGuardRunner>();
|
|
}
|
|
|
|
/// <summary>런너가 살아 있는가(프로브가 읽는다).</summary>
|
|
internal static bool Exists { get { return s_runner != null; } }
|
|
|
|
void Update() { RunErrorModalGuard.Tick(Time.unscaledDeltaTime); }
|
|
|
|
void OnApplicationQuit() { RunErrorModalGuard.Unsubscribe(); }
|
|
|
|
void OnDestroy()
|
|
{
|
|
if (!ReferenceEquals(s_runner, this)) return;
|
|
s_runner = null;
|
|
RunErrorModalGuard.Restore(); // 훅을 내려둔 채로 사라지지 않는다
|
|
}
|
|
}
|
|
}
|