actionspeed_ejectbubble.gapit
# indexactionspeed_ejectbubble.gapit
# Séquence paramétrique pour doEject() + flyBubble() + openPopup().
# ATTENTION : la trajectoire de la bulle reste calculée en Bézier RAF dans
# le handler `bubble_fly` — seules les DURÉES sont ajustables, pas la courbe.
#
# Pour déclencher : appeler window.indexRunActionSpeed('ejectbubble') au
# moment où tu veux simuler l'éjection (remplace la logique hookée sur
# classList qui est, elle, conservée dans indexejectbubble.php).
# Phase 1 — Siège éjectable (t=0, durée 1500ms via keyframe CSS)
css_set|||0.0|#gp3ej-seat|animation|none
seat_fire|||0.02|#gp3ej-seat|gp3ejSeatFire 1.5s cubic-bezier(.2,1.2,.4,1) forwards|
css_set|||1.6|#gp3ej-seat|display|none
# Phase 2 — Spawn bulle + étincelles à la position de la soucoupe (t=0)
bubble_spawn|||0.0|#gp3ej-bubble|ufo-popup|
sparks|||0.0|#gp3ej-layer|ufo-popup|12
# Phase 3 — Bulle devient visible + aura infinie à t=300ms
css_set|||0.30|#gp3ej-bubble|opacity|1
css_set|||0.30|#gp3ej-bubble|animation|gp3ejAura 2.8s ease-in-out infinite
# Phase 4 — Vol Bézier vers le drapeau (t=300ms, durée paramétrable)
bubble_fly|||0.30|#gp3ej-bubble|gp3-lang-toggle|3600
# Phase 5 — Atterrissage + étincelles d'arrivée (t=3900ms = 300 + 3600)
bubble_land|||3.90|#gp3ej-bubble|gp3-lang-toggle|
sparks|||3.90|#gp3ej-layer|gp3-lang-toggle|12
# Phase 6 — Ouverture du popup profil (t=4600ms = delay configurable)
popup_open|||4.60|#gp3ej-popup|gp3-lang-toggle|
emit|||4.65|ejectbubble_done||