24 lines
1.9 KiB
Markdown
24 lines
1.9 KiB
Markdown
# Два хіти за один цикл анімації атаки (2026-08-12)
|
||
|
||
Користувач: анімація "Loot" (удар битою) сама показує **2 фізичні удари**
|
||
за один цикл кліпу, але код досі рахував лише **1** damage-пульс за цикл
|
||
(`HIT_TIME_FRACTION=0.5`, раз на `attackAction.getClip().duration`) — тобто
|
||
`HITS_PER_STAGE=2` вимагав 2 повних циклу анімації на просування стейджа,
|
||
хоча мало вистачати одного.
|
||
|
||
**Виправлення**: `HIT_TIME_FRACTION` (одне число) замінено на
|
||
`HIT_TIME_FRACTIONS = [0.25, 0.75]` (масив — дві точки за цикл; підібрані
|
||
навмання як симетричний дефолт, можуть потребувати підстройки під реальний
|
||
тайминг замаху в кліпі, як і `LOOK_AHEAD_DISTANCE` раніше). Новий
|
||
`PlayerC.hitsThisAttack` (рахує ВСІ хіти за весь безперервний свінг, не
|
||
скидається щоцикл) + `hitTimeFor(hitIndex)` — рахує абсолютний час
|
||
(секунди від старту атаки) для N-го хіта: `duration * (повних_циклів +
|
||
HIT_TIME_FRACTIONS[hitIndex % 2])`, тобто коректно переходить через межу
|
||
циклу без дрейфу.
|
||
|
||
Перевірено (Playwright, тимчасове логування `[dbgHit]` з таймстемпом,
|
||
видалене після): хіти йдуть з рівним інтервалом ~780мс (замість колишніх
|
||
~2×780=1560мс), і стейдж (`prop.stageIndex`) просувається після кожних 2
|
||
хітів (`0,1` -> stage++), тобто рівно один цикл анімації = один
|
||
просунутий стейдж, як і треба.
|