RetourOrévia
A0-11Les données
Jouer
ACTE 0 · CHAPITRE 11

Les données

Ce jeu se joue au clavier ou à la manette, sur un ordinateur

P pour mettre en pause et reprendre

Le jeu ne se charge pas ? Ouvrir le build seul

Ce qui est nouveau

Les héros, les lieux, les objets et les personnages sont des fiches. Des fichiers qu'on ouvre dans Unity, avec un nom traduit. Le code lit les fiches, il n'en contient aucune. Alicia, Liam et le village de Solea existent, en tant que données.

Ce qui a été fait

Ce qui cloche encore

Les fiches sont presque vides. Le modèle du héros, ses compétences, son portrait viendront chacun dans leur chapitre.

Comment c'est fait, et pourquoi

Pourquoi des fiches

Un héros, ce n'est pas du code. C'est une fiche : son nom, son rôle, plus tard son modèle et ses compétences. La première fois, les héros ont changé de prénom une fois, et on a couru après le prénom dans le code pendant trois semaines. Cette fois, on change un prénom en un endroit, et tout suit.

Unity a un type pour les fiches, le ScriptableObject. Un fichier dans le projet, avec des champs, qu'on remplit dans l'inspecteur. L'identifiant ne change jamais : c'est lui que la sauvegarde écrira, pas le nom.

PROMPT
Où on en est : le projet a Localization avec une table Catalogue vide, la classe
Textes, et aucune donnée de jeu. La bible dans C:\Atelier\Bible décrit deux héros,
Alicia, la principale, et Liam, l'acrobate, et un village, Solea.

Ce que je veux : dans Jeu/Scripts/Runtime/Donnees, quatre ScriptableObject, un par
fichier : Heros, Lieu, Objet, Personnage. Chacun a un identifiant texte stable en
minuscules (par exemple alicia, solea), un nom en LocalizedString pointant sur la
table Catalogue, et une description en LocalizedString, rien d'autre ce soir. Heros a
en plus un champ Role, une énumération avec Principal et Acrobate. Un menu de création
pour chaque type dans Assets > Créer > Jeu. Un ScriptableObject Catalogue, unique,
dans Jeu/Donnees/Catalogue.asset, avec une liste par type, et un outil d'éditeur dans
Jeu/Editeur, menu Jeu > Catalogue > Reconstruire, qui le remplit en parcourant
Jeu/Donnees, rejouable sans doublon, et qui signale deux fiches avec le même
identifiant. Le Catalogue expose Trouver(identifiant) et HerosParRole(role). Dans
Textes, remplace après traduction les jetons {principal} et {acrobate} par le nom du
héros du catalogue qui tient ce rôle. Crée les fiches Alicia, Liam et Solea dans
Jeu/Donnees/Heros et Jeu/Donnees/Lieux, avec le skill texte-joueur pour leurs noms
(Alicia, Liam, Solea, identiques en anglais) et une description d'une ligne tirée de
la bible, puis reconstruis le catalogue.

Puis le point onze de la doctrine : un dossier Jeu/Donnees/Reglages avec une première
fiche ReglagesDuTemps (ScriptableObject, échelle de départ et durée de fondu de
l'interface), que Horloge et BandeauDePause lisent à la place de leurs champs
propres ; un fichier Jeu/Scripts/Runtime/Commun/Noms.cs, classe statique avec les
noms de scènes (Demarrage, Etabli) et les noms de couches et de tags utilisés, et
remplace dans Amorceur la constante de nom de scène par Noms. Enfin, dans
Documentation/index.md, deux tables de plus : « Réglages » (une ligne par fiche de
réglages, son domaine, qui la lit) et « Noms » (le fichier et ce qu'il contient).

Plus tard : Heros recevra son prefab, ses compétences et ses portraits ; Lieu ses
scènes et sa musique ; Objet son poids et son icône ; Personnage ses dialogues et sa
voix ; les niveaux, énigmes et quêtes seront des fiches aussi. Chaque domaine aura sa
fiche de réglages, créée au premier réglage partagé, jamais avant.

Ce que je ne veux pas : pas de classe de base commune aux quatre fiches ce soir, pas
de prénom écrit dans un script, pas de champ en plus de ceux demandés.

Quand c'est fait, dis-moi quoi ouvrir dans Unity pour voir les fiches dans la fenêtre Projet, l'inspecteur d'Alicia,
le Catalogue rempli et ReglagesDuTemps.

Pas de classe commune aux quatre fiches, et pourtant elles se ressemblent. C'est la règle 2 : on factorise au second besoin réel, pas à la ressemblance. Le jour où la sauvegarde devra parcourir toutes les fiches pareil, on saura ce que la classe commune doit contenir.

Une valeur n'existe qu'à un endroit

La durée du fondu était dans le bandeau, l'échelle de départ dans l'horloge. Demain, trois autres composants les voudraient. Une fiche de réglages au mur, comme un thermostat : chacun la lit, personne ne la recopie. Les noms de scènes, pareil : un seul fichier, et l'index dit où ils sont.

Les jetons de rôle

Un texte ne dit jamais « Alicia ». Il dit {principal}. Le jour où la principale s'appelle autrement, zéro texte à reprendre. Et dans une autre langue, le prénom reste : on le remplace après la traduction.

PROMPT
Ajoute un texte joueur dans la table Interface, clé EssaiJetons, français
« {principal} et {acrobate} arrivent à {lieu:solea}. », anglais « {principal} and
{acrobate} arrive at {lieu:solea}. ». Puis étends Textes pour que {lieu:identifiant}
soit remplacé par le nom du lieu du catalogue, et ajoute un test EditMode qui vérifie
que Textes rend « Alicia et Liam arrivent à Solea. » en français et la phrase anglaise
en anglais. Ajoute aussi un test CatalogueTests : chaque fiche a un identifiant non
vide et unique, et un nom dans les deux langues. Lance verifier et montre-moi le résumé.

Comment on vérifie

Le test est vert. On change le nom d'Alicia en « Alice » dans sa fiche, on relance : rouge, parce que le test attend « Alicia ». On remet. Le prénom est dans le test, et c'est le seul endroit permis : le test vérifie justement la donnée.

Ce qui a mordu

Sources