Cette bibliothèque est mise à jour très fréquemment. De nouveaux composants, animations et optimisations sont régulièrement ajoutés. Le contenu de cet article peut ne pas refléter la version la plus récente.

Vue d'ensemble

Vartacraft utilise une bibliothèque UI maison développée en interne, composée d'un moteur bas niveau (OpenGL, animations, polices, signaux réactifs) et d'une couche de composants d'interface haut niveau. C'est cette bibliothèque qui est mise à jour en continu — chaque interface du mod (Warps, Battle Pass, Hôtel des Ventes, Blackjack…) est construite avec.

La bibliothèque est entièrement découplée de Minecraft dans sa couche basse. Elle pourrait théoriquement fonctionner dans d'autres contextes OpenGL/LWJGL.

Système de thèmes — UIStyleSheet

Toute l'apparence des interfaces est définie dans une feuille de style (UIStyleSheet). Il existe actuellement 3 thèmes :

Thème Identifiant Description
VartaUIStyleSheet.VARTAThème sombre chaud (fond brun foncé, accent violet/or). Thème par défaut du mod.
LightUIStyleSheet.LIGHTThème clair (fond beige/blanc, accent violet bleu).
Dark BlueUIStyleSheet.DARK_BLUEThème sombre bleu-nuit (fond bleu très sombre, accent violet-bleu).

Chaque feuille de style définit des styles par section : body, header, card, panel, popup, button, text, border, row. Toutes les interfaces lisent ces valeurs via UICSS (ex : UICSS.text().gold, UICSS.border().accent).

UIText — rendu de texte

UIText est le système de rendu textuel. Il fonctionne comme un builder chainé :

  • Factories prédéfinies : UIText.of(), UIText.title(), UIText.subtitle(), UIText.dim(), UIText.price(), UIText.badge(), UIText.countdown(), UIText.gradient()
  • Options : couleur, ombre, outline, scale, alignement (LEFT/CENTER/RIGHT), maxWidth avec troncature automatique, prefix/suffix, fond avec bordure
  • Rendu dégradé : chaque caractère est coloré individuellement pour créer un gradient horizontal
  • TextBlock : rendu multi-lignes avec word-wrap automatique
  • TextRow : label + valeur alignés sur une même ligne (ex : "Prix : 1 500 ■")

UIAnimation — animations

Le système d'animation repose sur deux couches :

UIAnimation (haut niveau) — gestion de canaux nommés, lerp par tick :

  • hover(key, isHovered) — animation de survol (vitesse 0.18)
  • screenOpen(key) — animation d'ouverture d'écran (vitesse 0.10)
  • popIn(key, visible) — animation pop avec Bounce.OUT
  • Courbes disponibles : LINEAR, EASE_IN, EASE_OUT, EASE_IN_OUT, BOUNCE_OUT, ELASTIC_OUT
  • Utilitaires statiques : pulse(periodMs), floatOffset(amplitude, period), lerpColor()

Tween Engine (bas niveau) — moteur de tweening complet dans fr.vartax.vartacraft.lib.animation :

  • Courbes : Linear, Quad, Cubic, Quart, Quint, Circ, Sine, Expo, Back, Bounce, Elastic
  • Chemins d'interpolation : Linear, CatmullRom
  • Support des séquences (Timeline) et des callbacks (TweenCallback)

UICSS — méthodes de dessin prêtes à l'emploi

UICSS expose des méthodes statiques pour dessiner les éléments courants sans avoir à répéter la logique :

  • drawBody() — fond principal avec ombre multi-couches et accent en haut
  • drawHeader() — en-tête avec dégradé
  • drawCard() — carte avec fond et bordure
  • drawPanel() — panneau secondaire
  • drawPopupBg() / drawPopupTitle() — fond et titre de popup
  • drawButton() / drawButtonLabel() — bouton avec 5 variantes (PRIMARY, SUCCESS, DANGER, WARNING, DISABLED) et animation hover
  • drawRow() — ligne de liste avec alternance pair/impair, hover, featured
  • drawShadow() — ombre portée multi-couches
  • drawAccentTop() — barre d'accent en haut d'un élément
  • alpha(), lerp() — manipulation de couleurs ARGB

Composants disponibles

Composant Rôle
UIButtonBouton cliquable avec variantes de couleur
UITextBoxChamp de saisie de texte
UISliderCurseur de valeur
UIDropdownListe déroulante
UIScrollPanelPanneau scrollable
UIProgressBarBarre de progression
UICardCarte avec fond et bordure thémée
UIGridGrille de mise en page
UIPopupPopup générique avec overlay
UIImage / UIVideoAffichage d'images et de vidéos (GIF inclus)
UIRoundedRectangles et badges avec coins arrondis
UIGlowEffet de lueur (glow) autour d'éléments
UIEmojiRendu d'emojis dans les interfaces
UINewsCarouselCarrousel de news défilantes
UICinematiqueÉcrans de cinématique en jeu

Système de polices custom

La lib embarque un moteur de rendu de polices MSDF (Multi-channel Signed Distance Field) — une technique qui permet d'afficher des polices vectorielles nettes à toute taille, sans pixellisation. Les polices sont chargées depuis des atlas de glyphes JSON + PNG via CustomFontLoader.

Signaux réactifs

Le package lib.utils.signal implémente un système signal/slot : une valeur (Signal<T>) notifie automatiquement ses abonnés quand elle change. Disponible pour tous les types primitifs (int, float, boolean, String…) et pour les collections (List, Map, Set).