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 |
|---|---|---|
| Varta | UIStyleSheet.VARTA | Thème sombre chaud (fond brun foncé, accent violet/or). Thème par défaut du mod. |
| Light | UIStyleSheet.LIGHT | Thème clair (fond beige/blanc, accent violet bleu). |
| Dark Blue | UIStyleSheet.DARK_BLUE | Thè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 hautdrawHeader()— en-tête avec dégradédrawCard()— carte avec fond et borduredrawPanel()— panneau secondairedrawPopupBg()/drawPopupTitle()— fond et titre de popupdrawButton()/drawButtonLabel()— bouton avec 5 variantes (PRIMARY, SUCCESS, DANGER, WARNING, DISABLED) et animation hoverdrawRow()— ligne de liste avec alternance pair/impair, hover, featureddrawShadow()— ombre portée multi-couchesdrawAccentTop()— barre d'accent en haut d'un élémentalpha(),lerp()— manipulation de couleurs ARGB
Composants disponibles
| Composant | Rôle |
|---|---|
| UIButton | Bouton cliquable avec variantes de couleur |
| UITextBox | Champ de saisie de texte |
| UISlider | Curseur de valeur |
| UIDropdown | Liste déroulante |
| UIScrollPanel | Panneau scrollable |
| UIProgressBar | Barre de progression |
| UICard | Carte avec fond et bordure thémée |
| UIGrid | Grille de mise en page |
| UIPopup | Popup générique avec overlay |
| UIImage / UIVideo | Affichage d'images et de vidéos (GIF inclus) |
| UIRounded | Rectangles et badges avec coins arrondis |
| UIGlow | Effet de lueur (glow) autour d'éléments |
| UIEmoji | Rendu d'emojis dans les interfaces |
| UINewsCarousel | Carrousel 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).