Patches
Un patch est un comportement que vous dessinez. Il se place exactement entre les événements, simples mais incapables de retenir une valeur ou de calculer, et les scripts, capables de tout mais qui demandent d'écrire du code.
Recourez à un patch dès la première fois où vous vous surprenez à vouloir « …mais seulement si le score dépasse dix » ou « …le déplacer un peu plus loin à chaque fois ».
Les patches sont compilés, pas interprétés : ils tournent donc exactement aussi vite que du code écrit à la main. Vous pouvez lire le script généré à tout moment dans le panneau de code — c'est aussi le moyen le plus rapide de vérifier qu'un graphe fait bien ce que vous vouliez.
Chaque nœud avec ses ports : référence des nœuds de patch — 203 nœuds répartis en 24 catégories.
Quatre sortes de nœuds
| Sorte | Comment la repérer | Ce que c'est |
|---|---|---|
| Event | seulement des sorties, dont une pulsation | là où commence le graphe — au lancement, au toucher, à chaque image |
| Effect | une pulsation en entrée et une en sortie | fait quelque chose, dans l'ordre |
| Control | divise ou répète la pulsation | branche, porte, répétition, for-each, once, délai |
| Data | aucune pulsation | une valeur — un nombre, une somme, le champ d'un composant |
Le fil de pulsation est l'ordre dans lequel les choses se produisent. Suivez-le depuis un nœud d'événement et vous lisez la séquence. Les fils de données ne portent que des valeurs ; ils n'ont pas d'ordre.
Ports et fils
Les ports sont typés (nombre, booléen, chaîne, vecteur, couleur, objet) et des types incompatibles refusent de se connecter, ce qui attrape pas mal d'erreurs avant même d'exécuter quoi que ce soit.
Un port vecteur se déplie en x, y et z : vous pouvez en câbler un et saisir les deux
autres.
Une entrée laissée déconnectée utilise la valeur que vous avez saisie dans le nœud. C'est généralement ce que vous voulez : ne câblez que les parties qui changent.
Dire à un nœud sur quel objet travailler
Les nœuds de composant (« get transform », « set material ») doivent savoir quel objet.
Laissez la liaison vide et cela veut dire cet objet, celui auquel le patch est attaché. Remplissez-la et le nœud travaille sur cet objet-là.
Deux commodités à connaître :
- Les nœuds get sont indulgents. Lire un composant que l'objet n'a pas ne donne rien, plutôt que de casser le graphe.
- Les nœuds set n'écrivent que ce que vous avez rempli. Tout ce que vous avez laissé tranquille reste tel quel.
Ce qui correspond à tout le reste de ce que vous voyez. Souvenez-vous-en simplement si vous faites passer des valeurs entre un patch et un script, où la rotation est en radians.
Ce que contient le catalogue
| Catégorie | Ce que vous y trouverez |
|---|---|
| events | 30 points de départ — lancement, image, toucher, touches, collisions, suivi |
| components | lire et écrire n'importe quel composant |
| math · vector · logic · string | arithmétique, comparaisons, vecteurs, texte |
| flow | branche, porte, répétition, for-each, once, délai, séquence |
| state | compteur, bascule, minuteur, lissage |
| entities · lifecycle | trouver des objets, créer, faire apparaître, détruire |
| physics | impulsions, forces, vitesse, raycast |
| net | multijoueur — envoyer, recevoir, état partagé, faire apparaître |
| globals · variables · messaging | des valeurs partagées avec d'autres patches et scripts |
| ui | lire et écrire les variables d'une carte d'interface |
| functions | appeler un autre patch, ou un script |
Réutiliser un patch
Enregistrez un graphe comme ressource et vous pouvez le déposer sur d'autres canevas. Son comportement dépend de la façon dont vous l'avez construit :
| Vous avez construit | Vous obtenez |
|---|---|
| aucun nœud d'entrée ni de sortie | un comportement — déposez-le et il tourne, sans câblage |
| des entrées, des sorties et une entrée de pulsation | une étape — elle s'exécute à l'arrivée de la pulsation, sorties prêtes ensuite |
| des entrées et des sorties, sans pulsation | une fonction — ses sorties sont calculées là où on les lit |
Ses connecteurs viennent des nœuds d'entrée et de sortie que vous y avez mis : en ajouter un le fait apparaître chez tous les appelants. Modifiez le patch et tout ce qui l'appelle se met à jour en direct.
Dans une fonction pure il n'y a pas de « cet objet » : les nœuds d'objet et de composant n'y ont donc pas leur place. Gardez les fonctions pour les données, les maths et la logique, et faites le travail sur la scène chez l'appelant.
Les patches peuvent aussi appeler des scripts, ce qui est la façon habituelle d'atteindre ce que le catalogue ne couvre pas.
Des valeurs qui survivent au graphe
Trois façons de retenir quelque chose, qui diffèrent par leur portée :
| Stockage | Partagé avec |
|---|---|
| variables | les nœuds de ce seul patch |
| globals | tous les patches, scripts et événements du projet |
| messages | quiconque écoute, sous forme de notification ponctuelle nommée |
Les globals ont deux portées : à l'échelle du projet (elles survivent au passage d'un space à l'autre) et propres au space (elles repartent de zéro). Les noms se saisissent au lieu d'être câblés, ce qui garde le routage prévisible.
La sortie de secours
Deux nœuds acceptent du JavaScript directement : expression renvoie une valeur, action exécute des instructions. Tout ce qu'un script peut atteindre y est disponible.
Ils sont là pour la petite chose qui manque au catalogue — pas comme mode de vie. Si vous vous surprenez à y écrire beaucoup, écrivez plutôt un script et appelez-le depuis le graphe.
Quand quelque chose ne va pas
Ouvrez le panneau de code. Un graphe qui ne compile pas — une boucle dans les fils de données, du JavaScript cassé dans un nœud action — vous le dit là.
Et un patch cassé n'entraîne jamais la scène avec lui : les autres continuent de tourner.
Suite : Contrôles de jeu — laissez les gens se déplacer.