Commit Graph

14 Commits

Author SHA1 Message Date
깃 관리자 13b7c36b3f fix(BT12-Dev-Clone): internal → public (Test assembly 접근 영역)
CS0117·CS1061 영역 fix — Test assembly 영역 main 영역 internal 영역 접근 X:
- IsCloneFireActive·CloneFireOrigin·CloneFireFacingX·CLONE_DAMAGE_MULTIPLIER 4건 internal → public

MCP 검증 정합:
- refresh_unity (compile=request) → 컴파일 오류 0
- run_tests EditMode CloneSkillTests → 7/7 passed (0.7초·T01~T07 전수 green)

본 PM 자성 #5 누적 (C39-10): Test assembly 영역 internal 접근 영역 사전 실측 X (BT12-Dev-Clone α·β 영역 internal 영역 정의 시점)
2026-05-18 15:25:46 +09:00
깃 관리자 a5fcab0cfe fix(BT12-Dev-Clone β): CS0070 event 외부 invoke fix
OnPlayerSkillFired event 영역 외부 클래스 .Invoke() 직접 호출 불가 (C# event 의미 영역):
- PlayerSkillInventory: RaisePlayerSkillFired(runtime) public 메서드 추가 — 내부 OnPlayerSkillFired?.Invoke 영역 캡슐화
- ActiveSkillRuntime.Fire: _inventory.OnPlayerSkillFired?.Invoke(this) → _inventory.RaisePlayerSkillFired(this) 정정

본 PM 자성 #4 (C39-10 누적·feedback_new_code_existing_system_dependency_unmeasured 4회차):
- #1 CloneInstance namespace 추정 (Events 부재)
- #2 asmdef autoReferenced 영역 추정 (main reference 자동 X)
- #3 asmdef 메커니즘 사전 동작 검증 X (default assembly 격리)
- #4 C# event 외부 invoke 불가 영역 사전 실측 X

CloneInstance 영역 += -= 영역 정합 (구독·해제) — 정정 대상 X
2026-05-18 15:19:55 +09:00
깃 관리자 171506e16d feat(BT12-Dev-Clone): A10 분신 스킬 4단계 완전 구현
PD 명세 5항목 + PD 결정 4건 정합:
- 위치: facing 반대 1유닛 (CloneInstance.SpawnOrReplace)
- 외형: 반투명 alpha 0.5 (SpriteRenderer 복제)
- 동작: 동일 스킬 미러링 (OnPlayerSkillFired hook + 0.5초 지연 큐)
- 공격력: 50% 반감 (CalculateEffectiveDamage IsCloneFireActive 분기)
- 타이밍: 0.5초 딜레이 (FIRE_DELAY_SECONDS)
- BaseCooldown 25초·MinionLifetime 12초·facing 고정·무적(Collider 미부착)
- Lv 업 메커니즘: 분신 수 X·지속시간+데미지 비율 ↑ (balance 후속)

신규 4 (CloneInstance·CloneEffector·A10_bunsin.asset·CloneSkillTests + .meta)
수정 10 (PlayerSkillInventory·ActiveSkillRuntime·SkillFireEvent·SkillRuntimeFactory·6 Effector)
γ helper: PlayerSkillInventory.GetSpawnAnchor·GetSpawnFacing — 6 Effector 진입점 단일화
2026-05-18 09:39:46 +09:00
깃 관리자 e2b446e0f4 feat(BT12-Dev): A06·A11 판정 박스 시각화 + A11 OverlapBox 전환 + 페이드 (PD 지시 2026-05-14)
PD 발화 2건:
1. "독 늪 소환의 판정(중독 효과 발생 가능한 범위)와 정령불의
   판정 범위도 박스 형태로 보여줘 (정령불의 범위에 있는 적은
   정령불이 유지되는 동안 일정한 피해 간격마다 피해를 입어야 해)"
2. "정령불 이펙트는 소멸되기 0.5초 전부터 알파값을 증가시키고
   크기를 최대 현재 크기 기준으로 최대 50%까지 줄어들며 사라지도록
   해줘."

A06 독 늪 (PoisonSwampInstance):
- PoisonSwampHitbox_Debug 자식 GO 신규 — BoxCollider2D.size 일관
  SpriteRenderer (1, 0, 0, 0.35) · sortingOrder 100 · ShowDebugVisuals 토글

A11 정령불 (SpiritFireSpawner / Instance):
- OverlapCircle → OverlapBox (HitboxSize 사용·박스 시각 ↔ 판정 정합)
- AuraRadius 의존 제거 · _radius (float) → _boxSize (Vector2)
- SpiritFireHitbox_Debug Player 자식 GO — Player 이동 동조
- 피해 간격 = DotInterval (기본 1초·Inspector 조절)
- 소멸 0.5초 전 페이드 (PD 의도 "투명도 증가" = alpha 1→0):
  · FADE_DURATION=0.5 · alphaMul = 1-t · scaleMul = 1-0.5t
  · Renderer·MaterialPropertyBlock·_baseAlphas 캐싱 (Projectile 동일 패턴)
  · _TintColor 또는 _Color 자동 분기

PlayerSkillInventory.StaleSpawnNames:
- PoisonSwampHitbox_Debug·SpiritFireHitbox_Debug·MeleeHitbox_Debug2 추가
- 게임 재실행 시 cleanup catch 정합

검증 (Play 모드):
- A06 발사 → PoisonSwampHitbox_Debug visible=True (parent FX_Venom_Swamp)
- A11 발사 → SpiritFireHitbox_Debug visible=True (parent Player·scale 2.5,2.5)
- A11 HitboxSize=(2.5, 2.5)·DotInterval=1·MinionLifetime=8 정합

SOT (스킬_이펙트_확정_v1.md) §4 변경 이력 갱신.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 23:14:05 +09:00
깃 관리자 e02dd69b3f test(BT12-Dev): Enemy HP 99999 + 기본 공격 파이어볼 제거 (PD 지시 2026-05-14)
PD 요청 2건:
1. 몬스터 HP 99999 (테스트용·1 hit kill 회피)
2. 기본 공격 파이어볼 발사 X

정정:

1. Enemy.prefab Health
   - maxHearts: 250000 → 24999 (99999 / QuartersPerHeart 4)
   - maxHP: 1000000 → 99999
   - RandomMaxHPRange: (99999, 99999) 신규 부착
   - Health.Awake L373 RandomMaxHPRange 우선 분기 활용 →
     fallback random(30~41) 회피·정확 99999 보장.

2. StartingCardIds 빈 배열 적용 2 경로:
   - Scripts/Skills/Runtime/PlayerSkillInventory.cs 기본값
     new string[] { "A02" } → new string[] { }
   - Scenes/Ingame.unity Player GameObject Inspector override
     "- A02" → [] (빈 배열)

검증 (Play 모드):
- StartingCardIds count=0
- active skill slots=0 (자동 발사 안 됨)
- Enemy[0] maxHP=99999 maxHearts=24999 IsAlive=True

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 22:19:02 +09:00
깃 관리자 7c894c60da fix(BT12-Dev): 잔존 cleanup Scene root 재귀 + Projectile.Awake 자기 destroy (PD 지시 2026-05-14)
PD 추가 진단 (스크린샷 + 발화): "게임 플레이 후 스크롤 되는 맵에
여전히 남아있는 상태야. 아마 스크롤 되며 연장되는 맵 영역이
초기화 되지 않는 것으로 예상 돼"

이전 commit ea239fe (3중 진입점 + FX clone prefix) 의 catch 누락
가능성 차단:

1. PlayerSkillInventory.DoCleanupStalePooledSpawns 영역
   Resources.FindObjectsOfTypeAll → Scene.GetRootGameObjects + 재귀
   변경. hideFlags hidden GO 누락 우려 제거·정확도 향상.
   CollectStaleRecursive 신규 — 자식 트리 재귀 탐색.
   IsStaleByName 헬퍼 — 이름 매칭 통합.

2. Projectile.Awake 신규 — _data == null && _runtime == null 상태
   (= Initialize 미호출 잔존) 시 1 frame 유예 후 자기 destroy.
   PlayerSkillInventory cleanup 누락 케이스 자체 정리 (2중 방어).
   InfiniteHorizontalBackground·기타 컴포넌트 자식 부착된 잔존도
   본 자가 destroy 로 catch.

측정 (Play 진입 직후):
- AfterSceneLoad static cleanup removed=0
- Awake cleanup removed=0
→ 이전 Play 잔존 = 0건 (Scene load·Awake 시점)
→ Hierarchy 영역 시각상 spawn = 자동 발사 진행 결과

후속: PD Refresh + Play → 화면 잔존 재확인 필요.
잔존 시 Console "[PlayerSkillInventory] ... removed=N" 로그 +
스크린샷 으로 본 PM 추가 진단.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 21:11:38 +09:00
깃 관리자 ea239fef54 fix(BT12-Dev): 잔존 spawn cleanup 강화 — 3중 진입점 + FX clone catch (PD 지시 2026-05-14)
PD 추가 보고: "여전히 씬을 실행할 때 이전에 생성 된 풀링 오브젝트가 남아있어"

직전 commit 01865b8 Awake cleanup 1회만 호출 — 진입점 보강.

강화 사항:
1. RuntimeInitializeOnLoadMethod(AfterSceneLoad) 정적 cleanup 추가
   — Awake 보다 선행하는 Scene load 직후 진입점.
2. Awake cleanup 무조건 Debug.Log (removed=0 케이스도 호출 확인 가능).
3. DelayedCleanupCoroutine — Awake 후 1·3·10 frame 추가 cleanup
   (다른 컴포넌트 Awake/Start spawn 케이스 catch).
4. StaleClonePrefixes 신규 — FX clone 7종 prefix 매칭
   (FX_Fireball_Bullet·FX_Lightningball·FX_Dragonfire·FX_Thunder·
    FX_SLASH·FX_PinkMagicArrow·Projectile_*).
5. DoCleanupStalePooledSpawns static 메서드 통합 — useImmediate 옵션
   (정적 호출 시 DestroyImmediate·Awake 호출 시 Destroy).

측정 (Play 진입 직후):
- AfterSceneLoad static cleanup removed=0
- Awake cleanup removed=0
→ 이전 Play 잔존은 0건. Hierarchy 영역 보이는 spawn 은
   현재 Play 의 정상 자동 발사 결과 (BaseCooldown Tick spawn) 로 추정.

후속: PD 재현 시나리오 (Stop→Play 또는 Editor crash 후 재실행 등)
직접 확인 필요. Console 영역 "[PlayerSkillInventory] ... removed=" 로그로
cleanup 호출·잔존 카운트 확인 가능.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 18:24:44 +09:00
깃 관리자 01865b88fb feat(BT12-Dev): 게임 재실행 시 잔존 spawn 강제 cleanup (PD 지시 2026-05-14)
PD 보고: "게임 플레이 중 종료했다가 다시 시작할 경우 이전 게임
플레이 중 생성 된 투사체가 여전히 남아있어. 게임을 재실행할 때
기존에 생성 된 풀링 오브젝트가 소멸될 수 있도록 수정해줘."

PlayerSkillInventory.Awake 시점 CleanupStalePooledSpawns 호출:
- Projectile 및 파생 (HomingProjectile·PiercingProjectile) component
  부착 GameObject 전수 destroy
- 박스 시각화 name 5종 (Hitbox_Debug·ProjectileHitbox_Debug·
  LaserHitbox_Debug·MeleeHitbox_Debug·Range_Debug) destroy
- Resources.FindObjectsOfTypeAll + scene.IsValid filter
  (asset prefab 제외)
- removed 카운트 Debug.Log

기존 HideFlags.DontSave (60e28e3) 정합 외 추가 보험:
- DontDestroyOnLoad 경로 (코드베이스 검색 0건 — 방어 코드)
- Scene 영구 저장 누락 케이스
- 메모리 잔존 (Editor crash 후 재시작 등)

검증 (Play 모드):
- A02·A05 발사 후 spawn 카운트 6
- CleanupStalePooledSpawns 직접 호출 + 1 frame 후 카운트 0

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 15:43:52 +09:00
깃 관리자 f292eb4fb3 feat(BT12-Dev Phase B): A06 독 늪·A11 정령불 신규 + 1키·2키 매핑 (PD 지시 2026-05-13)
신규 Effector 2종:
- PoisonSwampSpawner — Category C (PlacementPersistent)
  · 가장 가까운 적 위치 spawn·6초 유지·BoxCollider2D isTrigger·Kinematic Rigidbody2D
  · PoisonSwampInstance — OnTriggerStay 영역 적 마킹·PoisonedEnemyMarker 부착·duration 5초 갱신
  · PoisonedEnemyMarker — 매 초 10 피해·FX_Venom_Spray 자식 spawn (DotFxPrefab)·duration 만료 시 자가 소멸
- SpiritFireSpawner — Category D (Minion)
  · Player 자식 spawn·8초 유지·OverlapCircle radius 2.5
  · SpiritFireInstance — 매 초 근접 적 5 피해·Time.unscaledTime 영역 lifecycle

SkillFireEvent.Execute switch 확장:
- PlacementPersistent case → PoisonSwampSpawner
- Minion case → SpiritFireSpawner

A06 독 늪 .asset 신규 — Category 2·BaseCooldown 10·BaseDamage 10·OnHitFxPrefab=FX_Venom_Swamp·OnDotFxPrefab=FX_Venom_Spray
A11 정령불 .asset 신규 — Category 3·BaseCooldown 15·BaseDamage 5·MinionLifetime 8·OnHitFxPrefab=FX_Rotating shield

SkillRuntimeFactory.AvailableCardIds — A06·A11 추가 (7→9종)
TestSkillFireOn1to5 — PoisonSwamp·SpiritFire 인스턴스 신규·Category 분기 추가 (CardId 기반 MeleeArea 분기 정합)

PD Inspector 영역 — Player.prefab TestSkillFireOn1to5 Skill1=A06·Skill2=A11 .asset drag&drop 필요.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 23:06:59 +09:00
깃 관리자 5077f5dd3f feat(BT12-Dev Phase A): A12 정화의 빛 신규·A08 저주의 화살 이펙트 적용 (PD 지시 2026-05-13)
신규 ActiveSkillData 필드:
- CastFxPrefab — 시전 FX (발사 시점 Player 위치 spawn·비주얼 전용)
- ProjectileSpawner.Trigger 영역 CastFxPrefab spawn 처리 (HitFxScale·FxRotation·FxAutoDestroyUnscaled 2초 cap)

A08 저주의 화살 이펙트 적용 (.asset 수정):
- ProjectilePrefab = FX_PinkMagicArrow
- OnHitFxPrefab = FX_PinkMagicArrow_Hit
- CastFxPrefab = FX_PinkArrow_Shoot
- MaxRange 6·ProjectileSpeed 8 (단거리 빠른 발사)
- OffsetDistance float 0.5 → Vector2 (0,0) (직전 필드 전환 정합)

A12 정화의 빛 신규 (.asset 신규):
- Category 1 (MeleeArea·MeleeAreaSpawner 발동)
- BaseCooldown 5·BaseDamage 15·HitboxSize 4×4·AttributeTags 4 (Frost)
- OnHitFxPrefab = FX_Icelight_Seal

SkillRuntimeFactory.AvailableCardIds — A08·A12 추가 (카드 풀 5→7종)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 23:01:24 +09:00
깃 관리자 0ad1325be8 feat(BT12-Dev): 게임 시작 시 기본 파이어볼 A02 자동 습득 (PD 지시 2026-05-13)
- PlayerSkillInventory.StartingCardIds (string[]) Inspector 필드 신규 — 기본 { "A02" }
- Start() 메서드 신규 — Resources 로드 완료 후 시점에 AddSkillByCardId 일괄 호출
- 다중 스킬 지원·잘못된 CardId 자동 skip (AddSkillByCardId LogWarning 정합)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:38:36 +09:00
깃 관리자 d26bd837ea feat(BT12-Dev): 디버그 시각화 off 토글·레벨업 카드 풀 5종 한정 (PD 지시 2026-05-13)
작업 1 — 디버그 박스·사거리 박스 시각화 off (재활용 toggle):
- HitboxDebug.ShowDebugVisuals 정적 플래그 신규 (false 기본·true 설정 시 즉시 노출)
- Spawn·AttachSprite·SpawnRange·SpawnHitboxDebugChild 4 위치 SpriteRenderer.enabled 정합
- GameObject 자체는 정상 spawn → LiveHitboxSync 등 부착 코드 무영향

작업 2 — 레벨업 카드 풀 5종 한정:
- SkillRuntimeFactory.AvailableCardIds HashSet (A02·A13·A04·A05·A_Laser)
- RandomDraw3 영역 화이트리스트 필터 추가
- 미완성 placeholder (A01·A03·A08·A14·A15) 카드 풀 제외

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:24:46 +09:00
깃 관리자 d53150b5ed feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충
C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합).

수정 6 파일:
- LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId)
- SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환)
- SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정)
- PlayerController.cs (PlayerSkillInventory 자동 부착·line 100)
- Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy)
- SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장)

신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충):
- Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta

Layer Enemy 영역 = proxy 개선 신호 (C2-2):
- 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy)
- 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속)

기능:
- 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack)

기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후)

Compile error 0건 (read_console·도메인 리로드 정합)

C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1)
C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합)
C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합)

pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용)

후속:
- Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick)
- Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안)
- Phase 2-E EditMode 테스트
- 다른 카테고리 (B·C·D·E·F) 영역
- BT12-MVP-A asset 5장 deprecate (차기)
- Screenshots·_Recovery .gitignore (별도)
2026-05-09 20:57:28 +09:00
깃 관리자 87710bac58 docs(BT12-Dev Phase 2-A): Skills 13 파일 신규 (인터페이스·SO·중앙 컴포넌트)
C49 Phase 2 (집행) — Sonnet 위임 결과·Phase 1 dev-team-lead 재분석 보고서 정합.

신설 13 파일 (Assets/Scripts/Skills/):
- Interfaces/ (4): ISkillRuntime, IActiveSkill, IPassiveSkill, IAwakeningSkill (+ ActiveTrigger·PassiveTriggerKind·AwakeningPattern enum)
- Data/ (4): SkillDataAsset (abstract·AttributeTag·TypeTag), ActiveSkillData (Category 6종·14 신규 필드), PassiveSkillData (StatType·stub), AwakeningSkillData (stub)
- Runtime/ (4): PlayerStats (POCO·AttributeTag Dictionary), ActiveSkillRuntime (Tick·Fire·EffectiveCooldown 하드캡 0.5s·StackLevelFactor), PlayerSkillInventory ([RequireComponent(Health)]·OnDamagedEvent 구독·NotifyEnemyKilled), SkillRuntimeFactory (Resolve·Create·stub 2종)
- Events/ (1): SkillFireEvent (Simulation.Event<T>·Execute stub·카테고리 분기 6종 주석)

설계서 정합:
- §2-1 인터페이스 계약 (ISkillRuntime → IActiveSkill·IPassiveSkill·IAwakeningSkill)
- §2-2 ScriptableObject 계약 (ActiveCategory 6종·CreateAssetMenu 3종)
- §2-3 PlayerStats POCO·AttributeTag 키 Dictionary
- §3-2 CSV 매핑 테이블·§3-3 Resolve+Create 분기
- §4-2 EffectiveCooldown = BaseCooldown × CooldownMultiplier ÷ StackLevelFactor·하드캡 0.5s
- §4-4 OnHit·OnKill 이벤트 핸들러 PlayerSkillInventory 구현

설계서 대비 조정 3건 (Sonnet 자체 정합):
1. IPassiveSkill.ApplyTo → ApplyModifier·RemoveModifier (설계서 §2-1 명세 정합)
2. AddSkillByCardId 반환 void → bool (실패 감지)
3. EnemyKillContext struct 신설 (Phase 2-D 정식 통합 전 decoupling)

Phase 2-B 준비:
- SkillFireEvent.Execute stub 영역 카테고리 분기 6종 주석
- Phase 2-B 투사체 진입 시 ProjectileSpawner·AttackHitbox 연결 지점 명확

기존 파일 영역 변경 X (BT12-MVP-A·BT5-Dev·BT7-Dev 미변경)
회귀 위험 = 매우 낮음 (신규 파일만)

C50 분량 (PD 사전 승인 80~120K) — 실제 ~73K (정합)
PD 결정 (b 5분할·b-1 카테고리 6분할·우선 투사체) 사전 승인 정합

pm-auditor 사전 감사 = Pass 4 + Minor 1 + Major 1
- Major 1 정정 영역 = git add 명시 path 한정 (Skills 디렉토리만·Screenshots·_Recovery 미포함) 
- Minor 1 후속 영역 = PD Editor Refresh 후 read_console 본 PM 직접 실측

untracked 영역 별도 안건:
- Assets/Screenshots/ (manage_camera screenshot 영역·.gitignore 검토 영역)
- Assets/_Recovery/ (Unity 자동 복구 파일·.gitignore 검토 영역)
2026-05-09 18:31:38 +09:00