Files
Documentation/content/ui-systems/ui-syntax.fr.md
2026-01-20 20:33:59 +01:00

5.4 KiB

title, type, weight
title type weight
Syntaxe UI docs 11

Cette page couvre la syntaxe complète du langage de balisage UI de Hytale.

Commentaires

// Commentaire sur une ligne

/* Commentaire
   multi-lignes */

Variables

Variables Locales

Définissez les variables avec le préfixe @ :

@MyNumber = 50;
@MyString = "Bonjour";
@MyColor = #ff5500;
@MyObject = (Key: value, Other: 123);

Types de Variables

Type Exemple
Nombre @Size = 50;
Chaîne @Text = "Bonjour";
Couleur @Color = #ff5500;
Objet @Obj = (Width: 100, Height: 50);
Tableau @List = [item1, item2, item3];
Booléen @Visible = true;

Utiliser les Variables

Référencez les variables avec @ :

Group {
  Anchor: (Height: @MyNumber);
  Background: (Color: @MyColor);
}

Imports

Importer des Fichiers

Utilisez le préfixe $ pour importer des fichiers externes :

$Common = "Common.ui";
$Sounds = "../Sounds.ui";
$ClientCommon = "../../Common.ui";

Référencer les Variables Importées

Accédez aux variables importées avec la notation pointée :

$Common.@DefaultButtonStyle
$Sounds.@ButtonsLight

Utiliser les Templates Importés

Instanciez les templates depuis les imports :

$Common.@TextButton {
  @Text = "Cliquez-moi";
}

Couleurs

Hexadécimal

@Color1 = #ff5500;          // RGB
@Color2 = #ff5500ff;        // RGBA

Avec Opacité

@Color3 = #ff5500(0.5);     // 50% d'opacité
@Color4 = #000000(0.8);     // 80% d'opacité

Objets

Objet Simple

@Style = (
  FontSize: 16,
  TextColor: #ffffff,
  RenderBold: true
);

Objets Imbriqués

@ButtonStyle = (
  Default: (
    Background: (TexturePath: "Button.png", Border: 12)
  ),
  Hovered: (
    Background: (TexturePath: "ButtonHovered.png", Border: 12)
  )
);

Opérateur Spread

Utilisez ... pour étendre/fusionner des objets :

@BaseStyle = (
  FontSize: 16,
  TextColor: #ffffff
);

@ExtendedStyle = (
  ...@BaseStyle,          // Hérite de toutes les propriétés de @BaseStyle
  RenderBold: true        // Ajoute/remplace des propriétés
);

Le spread fonctionne dans tout contexte d'objet :

Style: (
  ...$Common.@DefaultButtonStyle,
  Sounds: (
    ...$Sounds.@ButtonsLight,
    Activate: (Volume: 10)
  )
);

Templates (Macros)

Définir un Template

Les templates sont des définitions de widgets réutilisables avec paramètres :

@MyButton = TextButton {
  @Text = "";                    // Paramètre avec défaut
  @Anchor = Anchor();            // Paramètre avec défaut
  @Sounds = ();                  // Défaut vide

  Style: @DefaultTextButtonStyle;
  Anchor: (...@Anchor, Height: 44);
  Text: @Text;
};

Instancier un Template

// Utiliser avec les défauts
@MyButton {}

// Remplacer les paramètres
@MyButton {
  @Text = "Valider";
  @Anchor = (Width: 200);
}

// Depuis un import
$Common.@TextButton {
  @Text = %ui.button.confirm;
}

Déclarations de Widgets

Widget Simple

WidgetType {
  Property: value;
}

Widget avec ID

Les IDs commencent par # et permettent le ciblage depuis Java. Les IDs doivent être en format UpperCamelCase (pas de tirets ni underscores) :

Label #PlayerName {
  Text: "Inconnu";
}

// IDs valides
#MainPanel
#ConfirmButton
#PlayerHealthBar

// IDs invalides (causeront des erreurs)
#main-panel      // Pas de tirets
#confirm_button  // Pas d'underscores
#playerhealthbar // Doit être en UpperCamelCase

Widgets Imbriqués

Group #Container {
  Label #Title {
    Text: "En-tête";
  }

  Group #Content {
    Label {
      Text: "Corps du texte";
    }
  }
}

Widgets Anonymes

Les widgets sans ID sont anonymes :

Group {
  Label { Text: "Pas d'ID"; }
}

Sélecteurs

Les sélecteurs sont des chaînes commençant par # utilisées pour cibler des éléments :

// Dans le code Java
builder.set("#PlayerName", "Steve");
builder.append("#Container", "ui/child_template");
builder.clear("#Content");

Clés de Traduction

Utilisez le préfixe % pour les chaînes localisées :

Label {
  Text: %server.ui.shop.title;
}

TextButton {
  Text: %client.button.confirm;
}

Constructeurs Typés

Certains types complexes utilisent des constructeurs de style fonction :

// Constructeurs de styles
@Style = LabelStyle(FontSize: 16, TextColor: #fff);
@BtnStyle = ButtonStyle(Default: (...), Hovered: (...));

// Constructeurs de layout
@Pad = Padding(Full: 10);
@Anch = Anchor(Width: 100, Height: 50);

// Constructeurs visuels
@Bg = PatchStyle(TexturePath: "bg.png", Border: 12);
@Scroll = ScrollbarStyle(Size: 6, Spacing: 8);

Exemple Complet

$Common = "Common.ui";
$Sounds = "Sounds.ui";

@PanelWidth = 400;
@PanelHeight = 300;
@TitleColor = #b4c8c9;

@PanelTitle = Label {
  @Text = "";

  Style: (
    FontSize: 20,
    TextColor: @TitleColor,
    RenderBold: true,
    HorizontalAlignment: Center
  );
  Text: @Text;
};

Group #MainPanel {
  Anchor: (Width: @PanelWidth, Height: @PanelHeight);
  Background: (TexturePath: "Panel.png", Border: 20);
  LayoutMode: Top;
  Padding: (Full: 16);

  @PanelTitle {
    @Text = %ui.panel.title;
  }

  Group #Content {
    FlexWeight: 1;
    LayoutMode: TopScrolling;
    ScrollbarStyle: $Common.@DefaultScrollbarStyle;
  }

  $Common.@TextButton #ConfirmButton {
    @Text = %ui.button.confirm;
    @Sounds = $Sounds.@ButtonsLight;
  }
}