using System.Collections.Generic; using UnityEngine; namespace TKS { /// 전장에 놓인 기믹 1개(정의 + 배치 + 전투 중 상태). 시각 = GimmickView · 콜라이더 = 장애물만. public class GimmickInstance { public GimmickDef Def; public GimmickPlacement Src; public GimmickShape Shape; public int Hp; public int MaxHp; /// 내구 0 = 잔해(통과 가능 · art_broken). public bool Broken; /// 제거됨(책사 광역 덤불 · 발동한 함정). public bool Removed; /// 함정이 드러났다(발동). public bool Revealed; /// 불 지대 남은 라운드(−1 = 영구) · 0 이 되면 Out. public int BurnLeft = -1; /// 불이 꺼짐(잔해만 남음 · 효과 없음). public bool Out; /// 군기 점령 진영(−1 = 중립 · 0 = 아군 · 1 = 적군). public int Owner = -1; /// 전투 중 생긴 기믹(폭발·광역 불). public bool Spawned; /// 배치만 있고 지대는 만들지 않는 생성 규칙(불 spawn_on_splash). public bool Template; public GameObject Go; public readonly List Colliders = new List(); public GimmickView View; public string Id { get { return Def != null ? Def.id : ""; } } public GimmickZone Zone { get { return Def.zone; } } public bool IsBlock { get { return Def.kind == GimmickKind.Block; } } /// 이동을 막는다(장애물 · 부서지거나 제거되지 않음). public bool BlocksMove { get { return IsBlock && !Broken && !Removed; } } /// 지대 효과가 살아 있다. public bool ZoneActive { get { return Def.kind == GimmickKind.Zone && !Removed && !Out && !Template; } } public bool Rolls { get { return Def.id == GimmickIds.Boulder; } } public bool IsBridge { get { return Def.id == GimmickIds.Bridge; } } /// 정의 p(i) · 배치 params 가 있으면 그 값 · 둘 다 비면 fallback. public float P(int i, float fallback = 0f) { float o = i == 1 ? Src.pOver1 : (i == 2 ? Src.pOver2 : Src.pOver3); if (!float.IsNaN(o)) return o; float d = i == 1 ? Def.p1 : (i == 2 ? Def.p2 : Def.p3); return float.IsNaN(d) ? fallback : d; } public void SetCollidersEnabled(bool on) { foreach (var c in Colliders) { if (c != null) c.enabled = on; } } /// 모양·표시·콜라이더를 d 만큼 옮긴다(목책 밀기 · 바위 굴림). public void MoveBy(Vector2 d) { Shape = Shape.Translated(d); if (Go != null) Go.transform.position = new Vector3(Shape.Center.x, Shape.Center.y, 0f); } } }