L'appel de ActivateActionSetLayer est peu couteux et peut être répété sans risque (mais avec les caveat ci-dessous).Attention aux couches multiples !
Ce n'est pas parce que vous pouvez réappliquer des couches de groupes d'actions à chaque image que vous devez le faire, surtout si vous utilisez plus d'une couche. La dernière couche appliquée l'emportera sur toute information antérieure avec laquelle elle serait en conflit. Il est donc crucial que vous appliquiez les couches dans l'ordre correct. Votre code pourrait facilement être sujet à une condition de concurrence ou d'autres bugs de synchronisation subtils qui pourraient inverser l'ordre.
Les couches de groupes d'actions sont destinées à des cas d'usage restreint et une bonne pratique consiste à les appliquer et les supprimer seulement lors de changements d'état spécifiques du jeu.
Pour les jeux intégrant la prise en charge native de Steam Input, l'équipe de développement peut définir des couches de groupes d'actions spécifiques activées par le code du jeu. En outre, en mode hérité, les joueurs et joueuses peuvent définir leurs propres couches de groupes d'actions et les entrées qui les déclenchent, et définir de la même façon leurs propres groupes d'actions déclenchés par la personne en jeu.Exemple pratique
Imaginez un jeu de tir basé sur des classes avec des véhicules. Ce jeu intègre la prise en charge native de Steam Input et utilise des couches de groupes d'actions. Pour le gameplay de base, un groupe d'actions de base est toujours actif et couvre des actions telles que courir, ramasser des objets ou sauter.
Quand la personne en jeu sélectionne une classe, la couche appropriée est ajoutée, par exemple « sniper ».
Le code correspondant pourrait ressembler à ceci :
void changeClass(EClassID myClass)
{
if(myClass == SNIPER)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle );
}
//logique pour les autres classes
}
Si la personne entre dans un véhicule ou en sort, les commandes pour la couche du véhicule sont activées ou désactivées au moment de ces changements d'état, ajoutant ou supprimant de nouvelles commandes pour les fonctions spécifiques du véhicule.
void changeVehicle(EVehicleID myVehicle, bool entering)
{
InputActionSetHandle_t layerHandle;
if(myVehicle == AUTOMATIC)
{
layerHandle = automaticHandle; //boite automatique -- volant, essence, frein
}
else if(myVehicle == STICK_SHIFT)
{
layerHandle = stickShiftHandle; //boite manuelle -- volant, essence, frein, embrayage, levier de vitesse, etc.
}
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, layerHandle ); //appliquer la couche de groupe d'actions à l'entrée dans le véhicule
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, layerHandle ); //supprimer la couche de groupe d'actions à la sortie du véhicule
}
}
Dans ce jeu, on peut utiliser son arme même quand on se déplace dans un véhicule. De ce fait, quand le sniper utilise la lunette sur le fusil, cela active une troisième couche de groupe d'actions, que la personne soit à pied ou dans un véhicule.
void useScope(bool entering)
{
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //appliquer la couche d'utilisation de la lunette quand la personne parcourt des yeux
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //supprimer la couche d'utilisation de la lunette quand la personne baisse la lunette
}
}
Voici comment toutes les couches se combinent.
Remarquez comment les couches peuvent non seulement ajouter de nouvelles actions par-dessus les couches sous-jacentes, mais aussi remplacer des associations précédentes : dans notre exemple, les actions « frein » et « essence » spécifiques au véhicule remplacent les actions des couches de base « sauter » et « interaction » ; l'action « volant » remplace l'action « se déplacer » liée au trackpad et au joystick sur la couche de base et est à son tour remplacée par l'action « viser » de la couche de groupe d'actions d'utilisation de la lunette. Une fois les trois couches de groupes d'actions empilées sur le dessus de la pile, la seule action provenant du groupe de base qui reste est « tirer ».Mode hérité
Vous pouvez créer des couches de groupes d'actions quasiment de la même façon que les groupes d'actions normaux. Il vous suffit de cliquer sur le bouton « Ajouter couche d'actions » dans le configurateur :
À partir de là, vous pouvez donner un nom à votre couche de groupe d'actions et définir des associations pour elle. Puisqu'il s'agit d'une couche de groupe d'actions héritée, le jeu n'en a pas connaissance et la personne en jeu devra l'activer elle-même. Décidez quelle entrée doit déclencher la couche du groupe d'actions et ouvrez le menu de configuration. Cliquez ensuite sur l'icône d'activation du groupe d'actions (c'est l'icône spéciale la plus à gauche) :
Ceci fait apparaitre le menu d'activation du groupe d'actions :
Dans cet exemple, on veut appliquer une couche, pas activer un groupe d'actions. On va sélectionner « Appliquer une couche d'actions » dans le menu déroulant :
Enfin, on doit choisir la couche à appliquer :
On peut utiliser la même procédure pour assigner une association séparée afin de supprimer la couche.