**Language / Langue :** **FR** | [[en:yaml:modeles|EN]]
====== Modèles (YAML) ======
Un modèle contient des salles réutilisables. Chaque instance associe ses noms de variables et de sorties à ceux du scénario.
===== Exemple : une salle de soins =====
Ce scénario ouvre le modèle, permet de se soigner, puis revient aux choix de la salle appelante.
titre: Infirmerie
vars:
pv: 10
modeles:
soins:
variables:
vie: 0
salles:
- id: fiche
texte: 'Points de vie : v_vie_v'
auto_refresh: true
actions:
- verbe: soigner
cible: all
bouton: Soigner
faire: vie + 5
choix:
- bouton: Sortir
vers: fin_modele
salles:
- id: depart
texte: Tu entres dans l'infirmerie.
modeles:
- modele: soins
variables:
vie: pv
choix:
- bouton: Terminer
vers: conclusion
- id: conclusion
evenements:
- fin: victoire
Les définitions de ''modeles:'' sont rangées par nom, ici ''soins''. La salle ''depart'' contient une liste d'instances : ''modele: soins'' choisit la définition et ''vie: pv'' relie la variable générique à ''pv'', déclarée dans le scénario.
Les salles internes reçoivent un préfixe pour éviter les collisions d'ID. ''fin_modele'' reprend après le modèle : ici, le choix Terminer devient disponible. Une sortie générique déclarée dans ''sorties:'' peut aussi être associée à une salle du scénario dans l'instance.
===== Listes et collections associées (4.17) =====
Le modèle peut déclarer des listes et collections génériques. Dans l'instance, les associer aux données du scénario, sans copie :
listes:
produits: monde.marchand.sac
collections:
heros: monde.etat
Les cibles doivent exister. Le chemin traverse uniquement des collections, sans indice de liste. Les propriétés requises restent contrôlées si un parent est remplacé ou après une reprise de sauvegarde.
Voir [[fr:yaml:listes-boucles|Listes et collections]], [[fr:yaml:tags|Tags]] et [[fr:yaml:evenements|Événements]].
===== Ajouter un modèle dans la salle : sur_place =====
''sur_place: true'' se place dans la définition du modèle. Il doit contenir exactement une salle interne. Ses initialisations, objets, actions, événements, choix, raccourcis et encadrés sont ajoutés à la salle appelante, sans détour par une salle virtuelle. Le texte et l'identifiant de la salle appelante sont conservés ; le texte de la salle interne n'est pas ajouté.
titre: Un modèle dans l'atelier
collections:
joueur: {}
modeles:
soins_sur_place:
sur_place: true
collections:
heros: {vie: 0}
defauts:
heros: {vie: 100}
salles:
- id: contenu
encadre:
position: haut-droite
portee: salle
texte: 'Vie : v_heros.vie_v'
actions:
- verbe: soigner
cible: all
bouton: Soigner
faire: heros.vie + 1
salles:
- id: atelier
texte: Vous êtes dans l'atelier.
modeles:
- modele: soins_sur_place
collections: {heros: joueur}
choix:
- {commande: sortir, vers: couloir}
- id: couloir
texte: Le couloir.
choix:
- {commande: revenir, vers: atelier}
Ici, Soigner agit dans l'atelier et Sortir reste disponible. En revenant, la valeur de ''joueur.vie'' est conservée. Les ''init:'' du modèle sont exécutés à chaque entrée comme ceux de la salle : ils peuvent donc réinitialiser explicitement des valeurs.
Les ''sorties:'' et leurs associations dans l'instance restent utilisables. ''fin_modele'' désigne la salle appelante pour un modèle sur place. Les champs simples fournis par le modèle peuvent remplacer ceux de la salle : vérifier notamment les réglages d'affichage. Éviter aussi les commandes et positions d'encadrés concurrentes ; le linter signale un encadré de modèle qui remplace celui de la salle.
''sur_place'' règle l'intégration du modèle. ''portee: salle'' règle séparément la durée de vie d'un encadré. **Sans portée explicite, un encadré reste persistant, même dans un modèle sur place.** Voir [[fr:yaml:hud|Encadrés HUD]]. En anglais : ''inline: true'' et ''scope: room''.
===== Valeurs par défaut des collections =====
Le bloc ''defauts:'' de l'exemple complète uniquement les propriétés absentes des collections associées, avant leur validation. Une valeur déjà fournie par le scénario reste conservée, y compris dans les collections imbriquées. La collection cible doit exister : ''joueur: {}'' suffit ici. Les valeurs par défaut s'appliquent aux collections génériques déclarées par le modèle ; elles ne remplacent pas une initialisation de salle.
Dans l'éditeur, la définition du modèle propose l'insertion dans la salle appelante et les valeurs par défaut de chaque collection. En anglais, le bloc s'appelle ''defaults:''.
La bibliothèque fournie comprend ''grille_2d'', un modèle sur place associant une carte et un joueur à des collections. Ses démonstrations montrent déplacements, collisions, meubles, portes et combat facultatif. Il utilise les objets et choix ordinaires de la salle, ainsi qu'un encadré explicitement limité à cette salle. Copier le modèle et suivre les commentaires de sa définition pour préparer la carte et les associations.