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.gdopen()/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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Add animations so the game feels alive. All of it is possible with Godot's
Tweens; no addon is needed.Wanted
CPUParticles2D(the Compatibility renderer supports CPU particles);Plan
popups/base_popup.gdopen()/close()a tween onpanel(modulate alpha + scale withpivot_offsetat the centre). Setvisible = falseonly when the close tween ends. All popups use it, so it's done once.PopupBackdropfades its alpha with the same timing.common/hover_animation.gd. Add it as a child node to any Control, or attach it to allBaseButtons from code at startup.scaleonmouse_entered/mouse_exited/button_down.visibletoday, and a GridContainer moves cards instantly, so the cards can't slide.popups/winner_popup.gdandpopups/score_graph.gd(animate aprogress0→1 that_draw()uses).close()hides the popup after the animation.Questions