Le client est envisagé comme comportant deux zones distinctes, le InGame and le OutGame, chacun placés dans la hiérarchie d’une node de ce nom dans la scène Main. Le InGame concerne tout ce qui nécessite la connexion à un serveur de jeu, et le OutGame, tout ce qui ne le nécessite pas. Bien que certains sytèmes soient partagés, comme les préférences (via le Global Settings), le jeu est soit dans un état, soit dans l’autre.
En InGame, il est prévu pour faire tourner une architecture de type ECS, basée sur le plugin GECS.
Dans ce répertoire sont enregistrés scènes et scripts des classes enregistrée comme Globals dans le projet.
Répertoire où sont stockés les assets, les Resources. Ce répertoire sera alimenté à l’avenir par un autre système, par le biais du Khreator, quand celui-ci sera effectif. Il s’agit de toutes les data nécessaires pour le jeu.
Scripts servant à la création des classes de données du répertoire data et de tous les autres objets dérivés de la classe Resource.
Scènes utilisées pour le jeu, avec leur script lié s’il est unique. Le sous-répertoire accueille les widgets qui sont réutilisés de nombreuses fois.
Scripts qui ne sont liés ni à une scène .tscn ni héritant de la classe Resource.
Gabarits pour les scripts proposés automatiquement par Godot, afin d’aider à conserver toujours la même organisation.
Pour l’instant, seules la classe Node et celles qui en héritent proposent un gabarit Custom organized Node script.
Tout ce qui est audio dans le client est géré par un Global, une scène en autoload appelé AudioManager (res://autoloads/audio_manager.gd).
Pour le moment, il existe 5 bus pour le son:
Chaque sous-sytème est une node fille du système de gestion général.
Ces sous-systèmes proposent chacun un certain nombre de paramètres pour gérer le sound design:
Depuis le code, pour émettre un son, il suffit d’appeler le submanager audio dédié et le nom de fichier de la Resource à émettre (sans son suffixe) et le son sera pris en charge. Pour le moment, seuls les sons d’interface (gui) sont implémentés correctement et la musique de façon minimale.
Exemples:
Pour émettre un son de click, indiquer:
AudioManager.gui.play_sound("ui_click")
Pour lancer le thème principal du jeu:
AudioManager.music.play_sound("main_theme")
Le système de préférences ’géré par le Global Settings (res://autoloads/settings.gd) intègre la gestion du thème qui définit les différents éléments d’affichage.
Les icônes sont définies dans la sous section GuiIcons, dans la section Theme dédiée au thème dans les presets (ceux par défault créé à l’origine sont créés à partir de la Resource SettingsPreset situé à res://data/settings/settings_default.tres
Les éléments à indiquer sont:
Avec ces informations, le Global GuiMedia(res://autoloads/gui_media.gd) va aller chercher dans le fichier les appels qui lui sont faits depuis le code pour indiquer la bonne icône d’interface pour le thème choisi.
L’ordre dans lequel les icônes sont disposées est crucial, car le système ira les chercher dans l’ordre indiqué par l’enum GuiMedia.Icon. C’est ce qui permet pour les appels depuis les nodes Control de simplement écrire :
Button.icon = GuiMedia.get_gui_icon(GuiIcon.Icon.GO_LEFT)
pour obtenir la flêche indiquant vers la gauche
Une scène (res://scenes/lobby.tscn) gère le menu principal de navigation.