Animations
Des animations courtes et discrètes qui donnent vie aux écrans, et un réglage pour que le joueur puisse toutes les couper. Tes propres widgets peuvent utiliser les mêmes outils.
Ce qui bouge
- Survol des boutons et des onglets en fondu.
- Une case qui se coche en grandissant.
- Fenêtres et écrans de menu qui montent légèrement à l’ouverture.
- Contenu d’onglet qui glisse depuis son côté.
- Défilement fluide des listes.
Les durées sont courtes, entre 90 et 180 ms, avec les courbes de GaldurEasing.
| Constante | Durée | Pour |
|---|---|---|
HOVER_MS | 90 ms | Fondu au survol (boutons, onglets) |
TOGGLE_MS | 110 ms | Coche de la case |
PAGE_MS | 160 ms | Contenu d’onglet qui glisse |
OPEN_MS | 180 ms | Ouverture d’un écran |
SCROLL_SMOOTHING_MS | 45 ms | Constante de temps du défilement fluide |
Elles sont dans GaldurAnimations.
Le joueur peut les couper
Mods → Galdur UI → Configurer → Animations, ou config/galdurui-client.toml. Les changements deviennent alors instantanés partout, y compris dans ton mod si tu utilises les outils ci-dessous.
Animer tes propres widgets
AnimatedValue est un nombre qui va vers une cible en un temps donné, selon une courbe. Donne la cible quand tu veux, à chaque image par exemple : une transition ne démarre que quand la cible change, et elle part de la valeur affichée à ce moment, donc changer de direction en route ne fait jamais de saut.
private final AnimatedValue hover = new AnimatedValue(0, GaldurAnimations.HOVER_MS, GaldurEasing.OUT_QUAD);protected void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { hover.setTarget(isHovered() ? 1 : 0); int color = mix(idle, hovered, hover.get()); ...}Quand le joueur a coupé les animations, get() renvoie directement la cible. snap(value) saute à une valeur sans transition.
Si tu écris une animation sans AnimatedValue, vérifie d’abord GaldurAnimations.enabled().
Courbes d’accélération
Chaque courbe transforme une progression linéaire t de 0 à 1, et donne 0 en 0 et 1 en 1.
| Courbe | Effet |
|---|---|
LINEAR | Vitesse constante. |
IN_QUAD | Part lentement, finit vite. |
OUT_QUAD | Part vite, finit lentement ; plus discret que OUT_CUBIC. |
IN_OUT_QUAD | Lent aux deux bouts. |
OUT_CUBIC | Part vite, se pose en douceur : le choix par défaut pour l’interface. |
IN_OUT_CUBIC | Lent aux deux bouts, plus marqué que IN_OUT_QUAD. |
OUT_BACK | Dépasse un peu la cible avant de se poser : un petit rebond. |
double t = Math.min(1, elapsed / (double) durationMs);int y = (int) Math.round(from + (to - from) * GaldurEasing.OUT_CUBIC.applyAsDouble(t));