EerieVillage/Assets/Scripts/Gameplay/EnemyDeath.cs

48 lines
2.1 KiB
C#
Raw Normal View History

using Platformer.Core;
using Platformer.Mechanics;
using UnityEngine;
namespace Platformer.Gameplay
{
/// <summary>
/// Fired when the health component on an enemy has a hitpoint value of 0.
/// BT104 (PD 명시 2026-05-08): Enemy 사망 시 patrol·시각 영역 비활성 + 1초 후 GameObject Destroy
/// </summary>
public class EnemyDeath : Simulation.Event<EnemyDeath>
{
public EnemyController enemy;
public override void Execute()
{
// BT12-Dev 진단 (2026-05-10 PD A+B) — EnemyDeath.Execute 호출 검증.
// 회수: PD 사망 원인 확정 후 본 PM revert commit.
Debug.Log($"[EnemyDeath][Execute] enemy={(enemy != null ? enemy.name : "NULL")} collider={(enemy != null && enemy._collider != null ? enemy._collider.enabled.ToString() : "NULL")} t={Time.time:F2}");
if (enemy == null) return;
// 충돌·이동·patrol 영역 비활성
if (enemy._collider != null) enemy._collider.enabled = false;
if (enemy.control != null) enemy.control.enabled = false;
enemy.enabled = false; // EnemyController patrol 영역 정지
// BT105 — 제자리 사망 (PD 명시 2026-05-08): Rigidbody2D simulated = false → gravity X·물리 미참여
var body = enemy.GetComponent<Rigidbody2D>();
if (body != null) body.simulated = false;
// death 애니메이션 트리거 (Enemy.controller 영역의 'death' parameter)
var animator = enemy.GetComponent<Animator>();
if (animator != null) animator.SetTrigger("death");
// 사운드
if (enemy._audio != null && enemy.ouch != null)
enemy._audio.PlayOneShot(enemy.ouch);
// 1초 후 GameObject 영역 Destroy (사망 애니메이션 시간)
Object.Destroy(enemy.gameObject, 1f);
BT12-MVP-A Phase 2-A: 경험치·레벨업 시스템 코드 + JSON 테이블 PD 직접 지시 2026-05-08 — (b) 채택 + JSON 테이블 영역 관리. 신규 영역 (8 파일): - Assets/Resources/Progression/level_xp_table.json — Lv 1~30 EXP 테이블 (balance-designer SOT) - Assets/Scripts/Progression/LevelXPTableLoader.cs — Resources.Load + JsonUtility 캐시 - Assets/Scripts/Progression/PlayerProgression.cs — Level·EXP 진행도 (BT12-Dev v1 PlayerStats와 직무 분리) - Assets/Scripts/Progression/ExperienceSystem.cs — EXP 발급 정적 게이트웨이 - Assets/Scripts/Progression/SkillCardPlaceholder.cs — placeholder ScriptableObject - Assets/Scripts/Progression/SkillCardPlaceholderPool.cs — 카드 풀·Draw3Random - Assets/Scripts/Progression/LevelUpManager.cs — 레벨업 발화·일시정지·UI placeholder (Phase 2-B 통합) 기존 파일 수정 (2 파일): - EnemyDeath.cs Execute 마지막 영역 ExperienceSystem.OnEnemyKilled 호출 - PlayerController.cs Awake PlayerProgression 자동 부착 회귀 위험: - BT5-Dev 발판/몬스터 영역 영향 X (EnemyDeath 호출 마지막·PlayerController 자동 부착) - BT7-Dev VS 순수형 영향 X (Schedule 영역 변경 X) - BT12-Dev v1 영역 충돌 X (PlayerStats 분리·신규 namespace EerieVillage.Progression) Phase 2-A 영역 검증: - 적 처치 → EXP 누적 → Lv 임계점 → Console [LevelUpManager] 영역 출력 확증 - Phase 2-B 영역 = SkillSelectionUI prefab + 5 placeholder asset + Scene 통합
2026-05-08 08:53:39 +00:00
// BT12-MVP-A 영역 신규 (2026-05-08) — 적 처치 시 EXP 발급
var player = Object.FindFirstObjectByType<PlayerController>();
EerieVillage.Progression.ExperienceSystem.OnEnemyKilled(enemy, player);
}
}
}