Appel de Fonction
Bloc technique
Les blocs techniques permettent de créer des scénarios plus complexes et innovants.
Ils ont généralement aucun ou peu d'impact visuel, et se concentrent sur la logique de déroulement de votre scénario.
Ce bloc est disponible uniquement via le Menu de création de blocs rapide.
Fonctionnement
En bref, le bloc Appel de fonction permet d'appeler à tout endroit du scénario un bloc Groupe en mode "Fonction". Cela permet d'éviter des solutions alternatives parfois peu pratiques, consistant à copier-coller des blocs de nombreuses fois ou à revoir significativement la structure de son graphe pour parvenir à ses fins.
Par exemple, le graphe suivant duplique le même bloc Groupe "Mon groupe" 3 fois :
Grâce au système de fonctions, ce graphe peut être transformé de la manière suivante :
Dans le graphe ci-dessus, le bloc Groupe "Mon groupe" n'est défini qu'une seule fois, mais il est référencé par 3 blocs Appel de fonction. Ces 3 références ne dupliquent le contenu du bloc Groupe. Au moment de rentrer dans un bloc Appel de fonction, une téléportation est effectuée au début du bloc Groupe ciblé. Puis à la fin du déroulement du bloc Groupe, le graphe reprend à la sortie du bloc Appel de fonction.
Voyons en quelques étapes comment mettre en place un bloc Groupe utilisé plusieurs fois grâce à son mode "Fonction" et au bloc Appel de fonction.
Étape 1 : créer le bloc Groupe
Créez un bloc Groupe contenant le graphe que vous souhaitez réutiliser, et nommez ce groupe comme vous le souhaitez. Vous pouvez définir plusieurs entrées ou sorties. Ces multiples entrées et sorties seront utilisables à l'identique via les blocs Appel de fonction. Votre bloc Groupe ressemble donc pour l'instant à un groupe standard :
Étape 2 : activer le mode "Fonction" pour ce bloc Groupe
Sélectionnez votre bloc Groupe, et pressez les touches MAJ + F pour le transformer en "Fonction". Son état visuel s'adapte à ce nouveau mode pour le différentier des autres groupes standards. En particulier, ses entrées et sorties disparaissent, car vous ne pourrez pas vous connecter directement à ce Groupe ; il n'est maintenant utilisable que via des blocs Appel de fonction. Vous pourrez toujours modifier le nombre d'entrée et de sorties de cette fonction via les blocs Début et Fin à l'intérieur du graphe.
Au moment de transformer votre groupe en fonction, si celui-ci n'avait pas de nom ou avait un nom identique à une autre fonction déjà existante, VTS Editor se chargera de lui attribuer automatiquement un nom différent et unique.
Au moment de transformer votre groupe en fonction, si celui-ci est déjà connecté à d'autres blocs, VTS Editor vous propose de créer immédiatement un bloc Appel de fonction au même endroit, ce qui équivaut à faire automatiquement l'Étape 3 et l'Étape 4.
Étape 3 : créer un bloc Appel de fonction
Votre fonction est prête à être utilisée. Créez maintenant un bloc Appel de fonction (via le menu de création de bloc rapide) à l'endroit où vous souhaitez utiliser votre fonction dans votre graphe. Ce bloc nouvellement créé n'est pas encore fonctionnel car il ne référence pour l'instant pas votre fonction. Il affiche donc un point d'interrogation et n'a qu'une entrée et une sortie.
Étape 4 : référencer le bloc Groupe
Ouvrez votre bloc Appel de fonction et choisissez le nom de votre fonction dans le menu déroulant.
Votre bloc Appel de fonction est est maintenant correctement rattaché à votre fonction.
Si votre bloc Groupe fonction possédait plusieurs entrées ou plusieurs sorties, le bloc Appel de fonction se mettra automatiquement à jour pour en avoir le même nombre.
C'est terminé !
Vous pouvez placer autant de blocs Appel de fonction que vous le souhaitez dans votre scénario, appelant la même fonction.
Contexte d'exécution d'une Fonction
Une Fonction s'exécute uniquement dans le contexte où elle est appelée. C'est-à-dire que si cette Fonction référence certains éléments comme un personnage, ce personnage doit aussi être présent dans la scène qui appelle la Fonction (via un bloc Appel de Fonction). Sans cela, les références à ce personnage seront ignorées.
Exemple
- J'ai une scène A contenant un bloc Fonction nommé "Ma Fonction", contenant un bloc Parler faisant parler un personnage P présent dans cette scène A.
- J'ai une scène B contenant un bloc Appel de fonction qui appelle la Fonction "Ma Fonction".
- Si la scène B contient elle aussi le personnage P, alors la fonction "Ma Fonction" sera bien capable de faire parler le personnage P, car il existe effectivement dans le contexte de la scène B (qui appelle la fonction).
- Si en revanche la scène B ne contient pas le personnage P, alors la fonction "Ma Fonction" sera appelée quand même, mais au moment de traverser le bloc Parler, celui-ci ignorera la phrase relative au personnage P, exactement de la même manière que si ce bloc référençait un personnage manquant dans la scène (qui aurait été supprimé après l'avoir assigné dans le bloc Parler).
Remarques
- Une Fonction peut appeler d'autres Fonctions.
- Une Fonction peut s'appeler elle-même. Il faut juste prévoir un cas où la fonction sort par une autre sortie, sinon la chaîne d'appels ne se terminera jamais.
- Astuce technique : si vous créez une fonction contenant beaucoup de blocs Variables qui sont exécutés de nombreuses fois, par exemple via des boucles qui parcourent des listes, vous serez confronté à une restriction présente par défaut dans VTS : un bloc ne peut être exécuté qu'une seule fois par frame (environ 50 fois par seconde). Cela peut provoquer un ralentissement significatif des fonctions où un même bloc peut être exécuté des centaines de fois dans un même algorithme construit à base de blocs Variables et Conditions. Il est possible de dire à VTS Editor d'ignorer temporairement cette restriction en utilisant la fonction allowMultipleExecByFrame(true) avant le début de l'algorithme, et allowMultipleExecByFrame(false) après.
- ${ child.title }