diff --git a/CLAUDE.md b/CLAUDE.md index 04a0a13..ff36a75 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,9 +27,12 @@ src/controllers/ PlayerC.ts - джойстик-рух (nipplejs), AABB-колізії з "colliders", бій: неперервний AoE-swing по всіх breakable-цілях в - зоні ураження, перебивається рухом + зоні ураження (240°-конус, FACING_DOT_THRESHOLD=-0.5, + Day 7 — див. "Кут ураження"), перебивається рухом TestSceneC.ts - завантажує ZombiePunk_Map.glb, /collider/i -> hidden+colliders, - ставить cannon Wall-тіла на все, крім Lootable-крейтів + ставить cannon Wall-тіла на все, крім Lootable-крейтів; + ініціалізує всі VFX/HUD-контролери (PropVfxC, + SparkleFxC, WeaponTrailC, HudC) в правильному порядку CameraFollowC.ts - камера-слідкувач, obstacle-avoidance через Raycaster по тому ж масиву colliders (НЕ торкались) PhysicsC.ts - PhysicsLayer enum, PhysicsBody (Box/Sphere+cannon Body @@ -37,26 +40,63 @@ src/controllers/ BreakablePropC.ts - парсить групу "Lootable" в мапі, S1/S2/S3 damage-stages, 2 хіти на стейдж, hit() advance stage / повне знищення (tween-джус, Day 6), дропає ресурси - ResourceC.ts - спавн ресурсів "розльотом" від цілі + автозбір - (Day 5, незмінно) — НЕ знає про Pay Zone/гравця; - візуал — клон реального "UI_Wood" з мапи - (fallback-куб про запас), createVisual() — публічний - доступ до цього візуалу для інших контролерів - PayZoneC.ts - Day 6: окремо зливає ResourceC.getCollectedCount() в + WeaponTrailC.ts - Day 7: hand-rolled screen-facing ribbon-шлейф за + битою під час замаху (samples PlayerC.getWeaponAnchor(), + обчислює "кінець бити" з реальної local bbox, не + вгадує offset), тає/звужується за час, не тон-мап, + toggled через PlayerC.updateCombat (isAttacking) + ResourceC.ts - Day 7: спавн ресурсу з крейта -> scatter -> 2 баунси + (відчутні, БЕЗ ротейту) -> на 2-му баунсі: білий + флеш (окремий additive-оверлей-меш, БЕЗ + squash-and-widen — чистий uniform shrink, тримається, + не пружинить назад) + SparkleFxC-вибух зірочок -> + staggered (по черзі, не купою) політ до + HudC.getWorldAnchorPosition() (ціль пере-семплюється + ЩОКАДРУ, не застигає, якщо камера рухається) з + компенсацією перспективи (див. RESOURCE_ICON_BASE_SCALE, + нижче) -> яскравіє й зникає рівно на іконці. НЕ знає + про Pay Zone/гравця; візуал — клон реального + "UI_Wood" з мапи; createVisual() — публічний доступ + до цього візуалу (без баунс/флеш начинки) для інших + контролерів (PayZoneC) + PayZoneC.ts - Day 6/8: окремо зливає ResourceC.getCollectedCount() в Pay Zone (вузол мапи "UI_Interactive_Zone_02"), по одному ресурсу, тільки поки гравець стоїть в зоні; зникає після RESOURCES_TO_CLOSE_ZONE доставлених - (зараз 20, підкручено після Day 6 — див. секцію - "прогрес-заповнення зони"); росте плаский - fill-overlay квад по мірі заповнення; політ депозиту - летить з HudC.getWorldAnchorPosition(), не з гравця - HudC.ts - лічильник ресурсу (іконка+число) у правому верхньому - куті, DOM-оверлей в #ui; володіє "світовою" точкою - (дитина камери), куди летять зібрані ресурси і - звідки стартує політ депозиту в Pay Zone + (зараз 20); росте плаский fill-overlay квад по мірі + заповнення; політ депозиту (HudC.getWorldAnchorPosition() + -> Pay Zone) БЕЗ ротейту, з тією ж компенсацією + перспективи й базовим розміром, що й ResourceC + (RESOURCE_ICON_BASE_SCALE, спільна константа — + інакше токен виглядає більшим за ресурс, що щойно + був на тому ж місці), плюс окремий + DEPOSIT_FLIGHT_SCALE_MULTIPLIER для локального тюнінгу + HudC.ts - Day 8: лічильник ресурсу — реальний дизайнерський + ассет (resourceCounterBgSrc, Tool_15.webp з temp/, + планка вже вбудована в картинку, не окрема іконка), + DOM-оверлей в #ui, стилі в src/css/ui.css (не inline +