ThreeKingdomsSlingshot/Assets/Scripts/Runtime/BattleEvents.cs

46 lines
1.9 KiB
C#

using System;
using UnityEngine;
namespace TKS
{
/// <summary>
/// 전투 이벤트 카운터(보물 조건 효과 cond_key · 시스템 기획 §8 · PD #1093 C) — 전투 코드는 Raise 1줄만 부르고 아웃게임(OutGameSession)이 구독해 세이브에 누적한다.
/// 아군 행동만 센다(by = 행동 유닛 · 적군이면 무시). battles · boss_kills · gold_spent · patrols 는 아웃게임 쪽에서 직접 센다.
/// </summary>
public static class BattleEvents
{
public const string Battles = "battles";
public const string BossKills = "boss_kills";
public const string GoldSpent = "gold_spent";
public const string Patrols = "patrols";
public const string StrategistShots = "strategist_shots";
public const string ActiveUses = "active_uses";
public const string ArcherCrits = "archer_crits";
public const string Pushes = "pushes";
/// <summary>treasures.csv cond_key 로 쓸 수 있는 키(임포터 검증).</summary>
public static readonly string[] Keys = { Battles, BossKills, GoldSpent, Patrols, StrategistShots, ActiveUses, ArcherCrits, Pushes };
public static event Action<string, int> Raised;
/// <summary>Play 진입마다 구독 해제(도메인 리로드를 끈 설정에서 이전 세션 구독이 남지 않게).</summary>
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void ResetStatics()
{
Raised = null;
}
public static void Raise(string key, Unit by, int n = 1)
{
if (by != null && by.Faction != Faction.Player) return;
Raise(key, n);
}
public static void Raise(string key, int n = 1)
{
if (n <= 0 || Raised == null || Sim.Active) return; // 가상 실행(적 AI 예측)은 세지 않는다
Raised(key, n);
}
}
}