Animations: popups, winner, filtering, hover and click #48

Closed
opened 2026-10-09 16:06:05 +02:00 by Sansan · 0 comments
Owner

Add animations so the game feels alive. All of it is possible with Godot's Tweens; no addon is needed.

Wanted

  • Popups.
    • Open: fade in and scale from about 95% to 100%.
    • Close: the reverse.
    • The backdrop fades with them.
  • Winner. Something festive when a player wins:
    • the winner's picture pops in and bounces;
    • confetti with CPUParticles2D (the Compatibility renderer supports CPU particles);
    • the score graph draws its lines from left to right.
  • Search and statistics.
    • Cards and rows fade in and out when filtering.
    • Cards slide to their new place when sorting.
  • Hover and click on every button, card and row:
    • a slight scale or brighten on hover;
    • a quick press-down on click.
  • Smaller ideas:
    • The point counter bumps when a player gets a point.
    • The song row flashes when a song is answered.
    • Slide between the Quiz and Statistics tabs.

Plan

  • Popups. Give popups/base_popup.gd open()/close() a tween on panel (modulate alpha + scale with pivot_offset at the centre). Set visible = false only when the close tween ends. All popups use it, so it's done once. PopupBackdrop fades its alpha with the same timing.
  • Hover and click.
    • A small reusable script, e.g. common/hover_animation.gd. Add it as a child node to any Control, or attach it to all BaseButtons from code at startup.
    • It tweens scale on mouse_entered/mouse_exited/button_down.
    • Theme hover styles stay as they are; this only adds movement.
  • Filtering.
    • Filtering only toggles visible today, and a GridContainer moves cards instantly, so the cards can't slide.
    • Fading cards in is easy. Sliding to new places needs the grid to be laid out by code instead of by GridContainer.
    • Start with fades.
  • Winner. popups/winner_popup.gd and popups/score_graph.gd (animate a progress 0→1 that _draw() uses).
  • Speed and settings.
    • Keep animations short (0.12–0.25 s), so a quiz never waits for them.
    • Add a "Reduce animations" setting that sets the durations to 0.
  • Tests.
    • Tests assume popups hide at once. Either set the duration to 0 in tests, via a setting the test suite sets, or await the tween.
    • Add a test that close() hides the popup after the animation.
  • Themes. The theme work (#42, #43) may change shapes and colours, so do animations after or with them to avoid doing popups twice.

Questions

  • Confetti on the winner, or something calmer?
  • Should "Reduce animations" exist?
Add animations so the game feels alive. All of it is possible with Godot's `Tween`s; no addon is needed. ## Wanted - **Popups.** - Open: fade in and scale from about 95% to 100%. - Close: the reverse. - The backdrop fades with them. - **Winner.** Something festive when a player wins: - the winner's picture pops in and bounces; - confetti with `CPUParticles2D` (the Compatibility renderer supports CPU particles); - the score graph draws its lines from left to right. - **Search and statistics.** - Cards and rows fade in and out when filtering. - Cards slide to their new place when sorting. - **Hover and click** on every button, card and row: - a slight scale or brighten on hover; - a quick press-down on click. - **Smaller ideas:** - The point counter bumps when a player gets a point. - The song row flashes when a song is answered. - Slide between the Quiz and Statistics tabs. ## Plan - **Popups.** Give `popups/base_popup.gd` `open()`/`close()` a tween on `panel` (modulate alpha + scale with `pivot_offset` at the centre). Set `visible = false` only when the close tween ends. All popups use it, so it's done once. `PopupBackdrop` fades its alpha with the same timing. - **Hover and click.** - A small reusable script, e.g. `common/hover_animation.gd`. Add it as a child node to any Control, or attach it to all `BaseButton`s from code at startup. - It tweens `scale` on `mouse_entered`/`mouse_exited`/`button_down`. - Theme hover styles stay as they are; this only adds movement. - **Filtering.** - Filtering only toggles `visible` today, and a GridContainer moves cards instantly, so the cards can't slide. - Fading cards in is easy. Sliding to new places needs the grid to be laid out by code instead of by GridContainer. - Start with fades. - **Winner.** `popups/winner_popup.gd` and `popups/score_graph.gd` (animate a `progress` 0→1 that `_draw()` uses). - **Speed and settings.** - Keep animations short (0.12–0.25 s), so a quiz never waits for them. - Add a "Reduce animations" setting that sets the durations to 0. - **Tests.** - Tests assume popups hide at once. Either set the duration to 0 in tests, via a setting the test suite sets, or await the tween. - Add a test that `close()` hides the popup after the animation. - **Themes.** The theme work (#42, #43) may change shapes and colours, so do animations after or with them to avoid doing popups twice. ## Questions - Confetti on the winner, or something calmer? - Should "Reduce animations" exist?
Sansan added the feature label 2026-10-09 16:06:05 +02:00
Sign in to join this conversation.