using UnityEngine; using UnityEngine.InputSystem; using EerieVillage.Skills.Effectors; namespace EerieVillage.Skills.Test { /// /// PD 지시 (2026-05-13) 테스트용 — 키보드 1~5 키 영역 각 ActiveSkill 즉시 발사. /// 1: A02 화염부 (파이어볼·Projectile) /// 2: A04 뇌격부 (번개 충격·MeleeArea) /// 3: A05 학익진 (Fan Slash·MeleeArea) /// 4: 레이저 (Dragonfire Laser·MeleeArea) /// 5: A13 천둥발 (Lightningball·Projectile Piercing) /// [RequireComponent(typeof(PlayerSkillInventory))] public class TestSkillFireOn1to5 : MonoBehaviour { [Tooltip("키 1 (현재 A02 화염부)")] public ActiveSkillData Skill1; [Tooltip("키 2 (현재 A04 뇌격부)")] public ActiveSkillData Skill2; [Tooltip("키 3 (A05 학익진)")] public ActiveSkillData Skill3; [Tooltip("키 4 (레이저)")] public ActiveSkillData Skill4; [Tooltip("키 5 (A13 천둥발)")] public ActiveSkillData Skill5; PlayerSkillInventory _inventory; ActiveSkillRuntime[] _runtimes = new ActiveSkillRuntime[5]; readonly ProjectileSpawner _projSpawner = new ProjectileSpawner(); readonly LightningStrikeSpawner _lightningSpawner = new LightningStrikeSpawner(); readonly MeleeAreaSpawner _meleeSpawner = new MeleeAreaSpawner(); readonly LaserSpawner _laserSpawner = new LaserSpawner(); // PD 지시 2026-05-13 Phase B — 1키 A06 독 늪·2키 A11 정령불 매핑 readonly PoisonSwampSpawner _poisonSwampSpawner = new PoisonSwampSpawner(); readonly SpiritFireSpawner _spiritFireSpawner = new SpiritFireSpawner(); // BT12-Dev-Clone (2026-05-18) — A10 분신 Effector readonly CloneEffector _cloneEffector = new CloneEffector(); void Awake() { EnsureRuntimes(); } // PD 지시 2026-05-13 — Awake 시점 Inspector reference 미정합 가능성 대비 lazy init. void EnsureRuntimes() { if (_inventory == null) _inventory = GetComponent(); // BT12-Dev-Clone (2026-05-18) — PD 지시: 1번키 영역 A10 분신 영역 강제 매핑. // Inspector 영역 Skill1 영역 영역 영역 영역 영역 무관·항상 A10_bunsin.asset 영역 강제. if (Skill1 == null || Skill1.CardId != "A10") { var a10 = Resources.Load("Skills/Active/A10_bunsin"); if (a10 != null) { Skill1 = a10; _runtimes[0] = null; // 재 init 영역 } } ActiveSkillData[] datas = { Skill1, Skill2, Skill3, Skill4, Skill5 }; for (int i = 0; i < 5; i++) { if (_runtimes[i] != null) continue; if (datas[i] == null) continue; _runtimes[i] = new ActiveSkillRuntime(datas[i]); _runtimes[i].OnEquip(_inventory); } } void Update() { EnsureRuntimes(); if (Keyboard.current == null) return; if (Keyboard.current.digit1Key.wasPressedThisFrame) Fire(0); else if (Keyboard.current.digit2Key.wasPressedThisFrame) Fire(1); else if (Keyboard.current.digit3Key.wasPressedThisFrame) Fire(2); else if (Keyboard.current.digit4Key.wasPressedThisFrame) Fire(3); else if (Keyboard.current.digit5Key.wasPressedThisFrame) Fire(4); } void Fire(int idx) { var rt = _runtimes[idx]; if (rt == null || _inventory == null) return; var data = rt.ActiveData; // 카테고리 분기 if (data.Category == ActiveCategory.Projectile) { _projSpawner.Trigger(rt, _inventory); } else if (data.Category == ActiveCategory.MeleeArea) { // CardId 기반 분기 (SkillFireEvent 동일 패턴) if (data.CardId == "A04") _lightningSpawner.Trigger(rt, _inventory); else if (data.CardId == "A_Laser") _laserSpawner.Trigger(rt, _inventory); else _meleeSpawner.Trigger(rt, _inventory); } // PD 지시 2026-05-13 Phase B — A06 독 늪 (PlacementPersistent)·A11 정령불 (Minion) else if (data.Category == ActiveCategory.PlacementPersistent) { _poisonSwampSpawner.Trigger(rt, _inventory); } else if (data.Category == ActiveCategory.Minion) { // BT12-Dev-Clone (2026-05-18) — A10 분신 CardId 분기 (SkillFireEvent.Execute 동일 패턴) if (data.CardId == "A10") _cloneEffector.Trigger(rt, _inventory); else _spiritFireSpawner.Trigger(rt, _inventory); } // BT12-Dev-Clone (2026-05-18) — Player 발동 영역 분신 hook 발화 // IsCloneFireActive 분기 — 분신 발동 시 발화 X (무한 재귀 방지) // Test 영역 직접 Effector.Trigger 영역 ActiveSkillRuntime.Fire 영역 영역 X·OnPlayerSkillFired 발화 X → // 본 영역 영역 별도 발화 영역 추가 (분신 영역 hook 영역 미러링 발동) if (!_inventory.IsCloneFireActive) _inventory.RaisePlayerSkillFired(rt); } } }