332 lines
5.4 KiB
Markdown
332 lines
5.4 KiB
Markdown
---
|
|
title: Syntaxe UI
|
|
type: docs
|
|
weight: 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 :
|
|
|
|
```java
|
|
// 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;
|
|
}
|
|
}
|
|
```
|