15 KiB
15 KiB
Инвентаризация боевых анимаций
Дата: 2026-10-27
Статус: [C] — фактическое устройство кода; [R] — удалено 2026-10-27.
Назначение: отметить блоки, которые временно убираем для пересборки.
Обозначения
[C]— используется сейчас.[R]— удалено по решению пользователя (2026-10-27).[O]— отдельной анимации нет; эффект получается побочным путём.[U]— параметр объявлен в конфиге, но код его не читает.
Где сейчас лежит общая логика
Card3D— arc-перемещение,Reveal, плавный snap, rest/damage-повороты.CardMoveAnimator— очередь, stagger, последовательный добор,InputLock.CameraDirector— плавное движение камеры (position/rotation/FOV).TriggerCheckSequence— автомат trigger/damage-check: zoom → reveal → hold → resolve → return.ArrowDirector/AttackArrowView— attack/boost-стрелки.GameBoard3D— рендер-перемещения, стартовая раздача, reflow руки, trigger-зона.BattleView— интро, trigger-оркестрация, feedback-очередь и паузы.
A. Старт боя и раздача
- A1 [C] Стартовая камера.
GameBoard3D.SetCameraIntroмгновенно ставит камеру вintroCameraPosition/introCameraTarget/introCameraFov. ДержитсяintroOverheadHold = 1.5 с. - A2 [C] Переезд камеры на основную позицию.
CameraDirector.MoveTo, smoothstep,introCameraMoveDuration = 1.0 с. - A3 [C] Пауза на основной позиции.
introMainHold = 1.5 с. - A4 [C] Стартовая раздача.
GameBoard3D.AnimateHandDraw: руки скрыты, карты лежат над колодами рубашкой вверх; своя и чужая руки идут парами, внутри пары одновременно (EnqueueNow), между парами ждём завершения и 0.05 с;introDrawDuration = 0.6 с;InputLock("battle-intro"). - A5 [C] Переворот стартового Авангарда.
Card3D.Revealпосле муллигана;vanguardRevealDuration = 0.8 с; направление+1у себя,-1у противника;InputLock("vanguard-reveal"). - A6 [O] Отдельного «открытия стола» нет. Поле и карты появляются через
Render/SetVisible.
B. Добор карт
- B1 [C] Обычный добор. Новая карта стартует над колодой полного размера (
cardScale), рубашкой вверх в ориентации будущей карты руки, летит в руку по дуге и переворачивается лицом вверх черезStartArcMove(Slerp). ДлительностьintroDrawDuration = 0.6 с, дугаarcHeight = 0.45; общий старт с муллиганом черезGetDrawSource. Очередные карты скрыты, пока не начнётся их собственная дуга — над колодой видна одна. - B2 [C] Последовательный добор.
CardMoveAnimatorсsequential: true: следующая карта стартует только после завершения предыдущей; дополнительный staggermoveDelayBetweenCards = 0.22 с;InputLock("card-move"). - B3 [C] Reflow руки.
GameBoard3D.UpdateHandViewкаждый кадр пересчитывает позы; при возврате/доборе используется единый_visualHandCards: в нём сразу есть оставшиеся карты, возвращаемые и уже добранные; новые добавляются после завершения дуги. Рука подстраивается после каждого изменения, а не один раз под финальныйHandCount. Отдельной длительности нет. - B4 [O] Отдельного flip-блока добора нет.
cardFlipDurationв конфиге не читается; переворот получается из Slerp между рубашкой и лицом. - B5 [C] Возврат из руки в колоду.
GameBoard3D.QueueHandReturnToDeckпоMulliganView/CardReturnedToDeckView: старая карта руки уходит по дуге под низ колоды, переворачивается рубашкой вверх; длительность — общаяDrawDuration(introDrawDuration = 0.6),arcHeight = 0.45; старт справа налево, следующая после завершения предыдущей (sequential: true); единый_visualHandCardsпересчитывается после каждого ухода, включая ожидающие возврата; у противника зеркально. После завершения карта возвращается в пул.
C. Перемещение карт на столе
- C1 [C] Обычное arc-перемещение. Call/Ride/Move и другие несрочные переходы:
moveDuration = 0.8 с,arcHeight = 0.45. - C2 [C] Важное arc-перемещение. Trigger/Damage/Drop:
importantMoveDuration = 1.3 с. - C3 [C] Плавный snap. Для локальных изменений без arc: rest, damage-поворот, reflow руки, возврат после drag. Экспоненциальное сглаживание,
cardMoveSpeed = 14,cardRotateSpeed = 12. - C4 [C] Stagger нескольких карт.
moveDelayBetweenCards = 0.22 с; повторный запрос для той же карты отменяет старый. - C5 [C] Board-lock. После рендера с движением
InputLock("board")держитсяcardMoveDuration * 3 + inputLockTail, минимум 1 с. - C6 [C] Drag. Карта из руки при зажатии ЛКМ не двигается: включается
_handTargeting, карта остаётся в hand-раскладке и hover-подъёме, а курсор только выбирает зону. Цель берётся raycast-ом по карте/кругу (VC-карта сразу даёт Vanguard), затем fallback на плоскость. На release над VC/RC отправляетсяCardDropped; невалидный drop оставляет карту в руке. Карты поля сохраняют обычный drag: подъёмdragLift = 0.14, следование за курсором и возврат к source до снапшота. - C7 [C] Rest / damage-поворот. Rest —
+90°вокруг Y, damage —-90°; плавный поворот. - C8 [O] Отдельной анимации Call/Ride/Retire нет. Всё идёт общим arc/snap;
callMoveDurationне читается.retireDurationиспользуется только как длительность баннера RETIRE.
D. Перевороты и раскрытие
- D1 [C] Обычный face-down/face-up.
Card3D.FaceDownFlip, плавный поворот черезSetPose. - D2 [C] Переворот урона. Вокруг длинной стороны (
Z 180°в damage-layout), плавный поворот. - D3 [C]
Card3D.Reveal. Подъём+0.12, масштаб0.85 → 1, поворот на180°вокруг длинной оси, направление±1. - D4 [C] Раскрытие Авангарда. Вызывается внутри
GameBoard3D.Renderпри переходе!FaceUp → FaceUp; 0.8 с. - D5 [C] Раскрытие trigger-карты.
RevealTriggerCardпосле завершения зума;triggerRevealDuration = 0.35 с, затем пауза. - D6 [C] Переворот при доборе. Побочный Slerp внутри
StartArcMove; отдельного блока нет. - D7 [O] Отдельного
cardFlipDuration-блока нет. Параметр не читается.
E. Камера и триггеры
- E1 [C] Camera tween.
CameraDirectorплавно меняет position/rotation/FOV, smoothstep. Используется интро, trigger-зумом и возвратом. - E2 [C] Trigger-зум.
cameraZoomDuration = 0.5 с, FOV34, смещениеback 3.4 / up 2.6; рука и HUD-баннер скрываются. - E3 [C] Полная trigger-последовательность. Зум 0.5 с → раскрытие 0.35 с → пауза
triggerRevealHold = 0.75 с→ResolveReady→ возвратcameraReturnDuration = 0.5 с. Выбор цели открывается только после паузы. - E4 [C] Damage-check без триггера. Та же камера/пауза/возврат, но без
Reveal; в зоне пишется «БЕЗ ТРИГГЕРА». - E5 [C] Цепочка триггеров.
TriggerCheckSequenceумеет повторныйZoomToдля следующего триггера; отдельныйcameraRezoomDurationне читается. - E6 [C] Отмена.
Cancel/Restoreмгновенно возвращают камеру и снимают lock.
F. Атака и бой
- F1 [C] Красная attack-стрелка. Появление/рост
growDuration = 0.35 с, alpha-inarrowShowDuration = 0.25 с, fadeArrowConfig.fadeDuration = 0.2 с, бегущий пунктирdashScrollSpeed = 1.5, дугаarcHeight = 0.10. - F2 [C] Синие boost-стрелки. Рост
boostGrowDuration = 0.3 с, толщинаArrowConfig.boostThickness = 0.06; остальное как у attack. - F3 [C] Стрелка следует за картами. Точки пересчитываются каждый кадр; отдельной анимации нет.
- F4 [R] Feedback-баннер. Удалён:
BattleFeedback,BattleFlash, кнопка «Пропустить анимации», очередьFeedbackStep,InputLock("feedback"). - F5 [R] Длительности feedback по событиям. Удалены вместе с баннерами; паузы
eventPause/post*Pauseбольше не применяются. Темп держатCardMoveAnimatorи trigger-последовательность. - F6 [C] Урон. Карта идёт в damage-зону важным arc-перемещением 1.3 с, ложится на
-90°, переворачивается вокруг длинной стороны; счётчикx/6меняется мгновенно. - F7 [O] Отдельной анимации лечения нет. Вспышка
HealedViewудалена вместе с feedback; карта урона меняется общим рендером. - F8 [O] Отдельной анимации Guard/Intercept/Perfect Guard нет. Осталось только общее перемещение карт.
- F9 [O] Нет attack-lunge, shake, hit-частиц, damage-вылета и destroy-эффекта.
G. Рука и UI
- G1 [C] Веер руки. Своя рука набирается слева направо, новая карта добавляется справа; рука противника зеркальна — новая карта слева. Обе руки пересчитываются каждый кадр, глубина даёт перекрытие. Отдельной длительности нет.
- G2 [C] Hover карты в руке. Карта под курсором плавно поднимается камера-вверх на 10% своей высоты (
handHoverLift = 0.1), после ухода курсора плавно возвращается. Только своя рука; UI/лок/драг/анимации отключают hover. - G3 [O] Анимации status-toast нет. Показ/скрытие мгновенные, живёт 4 с.
- G4 [O] Анимаций оверлеев и меню нет. Открываются/закрываются мгновенно.
- G5 [O] Переходов между сценами нет.
SceneFlowпереключает сцены без fade. - G6 [O] Анимации HUD-счётчиков нет. Рука/колода/урон/щит/триггер меняются текстом мгновенно.
- G7 [O] Анимации подсветки нет. Highlight — мгновенная смена цвета.
- G8 [O] Анимации изменения силы/крита нет. Меняется текст/цвет мгновенно.
- G9 [R] Turn banner. Мёртвые поля
_turnBanner/_turnBannerTextудалены.
H. Служебные зависимости, не визуальные анимации
- H1 [C] InputLock. Ключи:
card-move,board,trigger-sequence,battle-intro,vanguard-reveal,overlay,card-menu,ability,card-choice. Ключfeedbackудалён. - H2 [C] Паузы. Остались только trigger-паузы (
triggerRevealHold = 0.75);eventPause/post*Pauseбольше не используются. - H3 [C] Мгновенные скрытия/показы. Рука скрывается на trigger-фокусе; trigger-зона показывается после зума и сразу
Snap; trigger-карта появляется без fade. - H4 [C] Очистка.
CardMoveAnimator.CancelAllиGameBoard3D.Clearотменяют очередь и снимают hold/lock.
I. Параметры, которые сейчас не читаются
cardFlipDurationcallMoveDurationcameraRezoomDurationarrowHideDurationarrowFadeDuration(используетсяArrowConfig.fadeDuration)boostThicknessвAnimationConfig(используетсяArrowConfig.boostThickness)cardMoveDuration— только таймаут board-lock, не длительность движения.retireDuration— был только длительностью баннера RETIRE; после удаления баннеров не читается.attackDeclare,guard,driveCheck,trigger,battleResolved,damage,heal,intercept,perfectGuard— были только длительностями feedback-баннеров.eventPause,postDrivePause,postTriggerPause,postDamagePause— были только паузами feedback-очереди.