Documentation Steamworks
Couches de groupes d'actions
Les couches de groupes d'actions sont des ensembles de configurations optionnels qui peuvent être ajoutés en surcouche sur des ensembles de commandes existants. À la différence des groupes d'actions, les couches tirent leurs actions du groupe d'actions dans lequel elles existent et n'effectuent que des petites modifications de l'existant sans remplacer complètement ce qui est déjà actif. Il peut s'agir de changements de configuration ainsi que d'ajouts ou de suppressions d'associations du groupe d'actions de base. Vous pouvez appliquer plus d'une couche, auquel cas les couches seront appliquées de manière consécutive.

Il n'y a techniquement pas de limite au nombre de couches qui peuvent être actives en même temps, mais en pratique, un excès de couches dans le configurateur risque de créer de la confusion.

Remarques
  • L'activation d'un groupe d'actions déjà actif n'a aucun effet sur ses couches.
  • L'activation d'un nouveau groupe d'actions effacera toutes les couches actives de l'ancien ensemble.
  • L'activation d'un groupe d'actions déjà actif n'a aucun effet.
  • L'activation d'un groupe d'actions déjà actif ne modifiera pas son ordre dans la pile.
  • Si vous désactivez une couche de groupe d'actions, puis que vous l'activez, elle se retrouvera en haut de la pile.
  • 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.

    action_set_layers_basic_1.png

    Quand la personne en jeu sélectionne une classe, la couche appropriée est ajoutée, par exemple « sniper ».

    action_set_layers_sniper_2.png

    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.

    action_set_layers_vehicle_1.png

    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.

    action_set_layers_scope.png

    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.

    action_set_layers_result_2.png

    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 :

    add_action_layer.png

    À 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) :

    bind_action_set.png

    Ceci fait apparaitre le menu d'activation du groupe d'actions :

    change_action_set.png

    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 :

    apply_action_set_layer.png

    Enfin, on doit choisir la couche à appliquer :

    select_action_set_layer.png

    On peut utiliser la même procédure pour assigner une association séparée afin de supprimer la couche.