EerieVillage/Assets/Scripts/Skills/Test/TestSkillFireOn1to5.cs

86 lines
3.5 KiB
C#
Raw Normal View History

using UnityEngine;
using UnityEngine.InputSystem;
using EerieVillage.Skills.Effectors;
namespace EerieVillage.Skills.Test
{
/// <summary>
/// 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)
/// </summary>
[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();
void Awake()
{
feat(BT12-Dev): 스킬 시스템 누적 작업물 (PD 지시 2026-05-12~13) 본 세션 (BurningTimes worktree cranky-wescoff-e855b0) 누적 작업물. 직전 commit 4건 (2ebf313·60e28e3·ea7d32f·f6c6eb5) 영역 외 잔존 미커밋 변경 일괄 commit. Scripts: - Health.cs DecrementBypassInvuln (DoT) + DecrementBypassInvulnWithHit (다단 히트) + StartHitFlash + FlashHurtCoroutine + TriggerHitOrHurt - ActiveSkillData.cs 신규 필드 (DamageFrameDelay·EnableRepeatDamage· MaxHitCount·RepeatFrameInterval·OffsetDistance Vector2 등) - PiercingProjectile.cs A13 천둥발 관통 + Kinematic Rigidbody2D + useFullKinematicContacts + OverlapBox 매 frame - StatusApplier.cs ApplyDoT 시 DotFxScale 전달 - TestSkillFireOn1to5.cs 1~5 키 발사 + lazy init EnsureRuntimes Animator: - Enemy.controller Baddie-Hurt self-loop transition (hurt 조건) - Player.controller Player-Hit self-loop transition (hit 조건) Prefab: - FX_Lightningball.prefab ball 자식 PS simulationSpace World → Local - Enemy.prefab 본 세션 측정 조정 Active skill assets (PD Inspector 직접 조정): - A01·A02·A03·A04·A05·A08·A13·A14·A15·A_Laser HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale· DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval Font: - NotoSansKR-Regular SDF.asset 본 세션 SDF atlas 갱신 → 박스↔이펙트 분리 원칙 표준화 (박스 = facing 만 · 이펙트 = facing + FxRotation · runtime spawn = HideFlags.DontSave) → 모든 피해 시 hit flash + Animator self-loop transition Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:05:13 +00:00
EnsureRuntimes();
}
// PD 지시 2026-05-13 — Awake 시점 Inspector reference 미정합 가능성 대비 lazy init.
void EnsureRuntimes()
{
if (_inventory == null) _inventory = GetComponent<PlayerSkillInventory>();
ActiveSkillData[] datas = { Skill1, Skill2, Skill3, Skill4, Skill5 };
for (int i = 0; i < 5; i++)
{
feat(BT12-Dev): 스킬 시스템 누적 작업물 (PD 지시 2026-05-12~13) 본 세션 (BurningTimes worktree cranky-wescoff-e855b0) 누적 작업물. 직전 commit 4건 (2ebf313·60e28e3·ea7d32f·f6c6eb5) 영역 외 잔존 미커밋 변경 일괄 commit. Scripts: - Health.cs DecrementBypassInvuln (DoT) + DecrementBypassInvulnWithHit (다단 히트) + StartHitFlash + FlashHurtCoroutine + TriggerHitOrHurt - ActiveSkillData.cs 신규 필드 (DamageFrameDelay·EnableRepeatDamage· MaxHitCount·RepeatFrameInterval·OffsetDistance Vector2 등) - PiercingProjectile.cs A13 천둥발 관통 + Kinematic Rigidbody2D + useFullKinematicContacts + OverlapBox 매 frame - StatusApplier.cs ApplyDoT 시 DotFxScale 전달 - TestSkillFireOn1to5.cs 1~5 키 발사 + lazy init EnsureRuntimes Animator: - Enemy.controller Baddie-Hurt self-loop transition (hurt 조건) - Player.controller Player-Hit self-loop transition (hit 조건) Prefab: - FX_Lightningball.prefab ball 자식 PS simulationSpace World → Local - Enemy.prefab 본 세션 측정 조정 Active skill assets (PD Inspector 직접 조정): - A01·A02·A03·A04·A05·A08·A13·A14·A15·A_Laser HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale· DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval Font: - NotoSansKR-Regular SDF.asset 본 세션 SDF atlas 갱신 → 박스↔이펙트 분리 원칙 표준화 (박스 = facing 만 · 이펙트 = facing + FxRotation · runtime spawn = HideFlags.DontSave) → 모든 피해 시 hit flash + Animator self-loop transition Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:05:13 +00:00
if (_runtimes[i] != null) continue;
if (datas[i] == null) continue;
_runtimes[i] = new ActiveSkillRuntime(datas[i]);
_runtimes[i].OnEquip(_inventory);
}
}
void Update()
{
feat(BT12-Dev): 스킬 시스템 누적 작업물 (PD 지시 2026-05-12~13) 본 세션 (BurningTimes worktree cranky-wescoff-e855b0) 누적 작업물. 직전 commit 4건 (2ebf313·60e28e3·ea7d32f·f6c6eb5) 영역 외 잔존 미커밋 변경 일괄 commit. Scripts: - Health.cs DecrementBypassInvuln (DoT) + DecrementBypassInvulnWithHit (다단 히트) + StartHitFlash + FlashHurtCoroutine + TriggerHitOrHurt - ActiveSkillData.cs 신규 필드 (DamageFrameDelay·EnableRepeatDamage· MaxHitCount·RepeatFrameInterval·OffsetDistance Vector2 등) - PiercingProjectile.cs A13 천둥발 관통 + Kinematic Rigidbody2D + useFullKinematicContacts + OverlapBox 매 frame - StatusApplier.cs ApplyDoT 시 DotFxScale 전달 - TestSkillFireOn1to5.cs 1~5 키 발사 + lazy init EnsureRuntimes Animator: - Enemy.controller Baddie-Hurt self-loop transition (hurt 조건) - Player.controller Player-Hit self-loop transition (hit 조건) Prefab: - FX_Lightningball.prefab ball 자식 PS simulationSpace World → Local - Enemy.prefab 본 세션 측정 조정 Active skill assets (PD Inspector 직접 조정): - A01·A02·A03·A04·A05·A08·A13·A14·A15·A_Laser HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale· DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval Font: - NotoSansKR-Regular SDF.asset 본 세션 SDF atlas 갱신 → 박스↔이펙트 분리 원칙 표준화 (박스 = facing 만 · 이펙트 = facing + FxRotation · runtime spawn = HideFlags.DontSave) → 모든 피해 시 hit flash + Animator self-loop transition Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:05:13 +00:00
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)
{
// 키 2 (A04 번개 충격) — LightningStrikeSpawner
// 키 3 (A05 학익진) — MeleeAreaSpawner
// 키 4 (레이저) — LaserSpawner
if (idx == 1) _lightningSpawner.Trigger(rt, _inventory);
else if (idx == 3) _laserSpawner.Trigger(rt, _inventory);
else _meleeSpawner.Trigger(rt, _inventory);
}
}
}
}