Llamar a ActivateActionSetLayer es barato y puede hacerse repetidamente de forma segura (pero mira la advertencia de abajo).¡Cuidado al usar varias capas!
Solo porque puedas volver a aplicar capas de set de acción en cada fotograma, no significa que debas, especialmente si estás utilizando más de una capa. La última capa que se aplica anulará cualquier información contradictoria que había antes, así que ten especial cuidado y aplícalas en el orden correcto. El código podría tener fácilmente las condiciones de carrera u otros errores de sincronización sutiles que podrían cambiar el orden.
Las capas del set de acción sirven para casos de uso estrecho y es una buena práctica aplicarlos y eliminarlos solo en cambios específicos en el estado del juego.
Para juegos con soporte nativo de Steam Input, el desarrollador puede definir capas del set de acciones específicas activadas por el código del juego. Además, en el modo clásico, los jugadores pueden definir sus propias capas del set de acciones y las entradas que las provocan, tal como pueden definir sus propios sets de acciones desencadenados por el jugador.Un ejemplo práctico
Imagina un juego de disparos basado en clases con vehículos. Este juego tiene un soporte nativo de Steam Input y hace uso de capas de set de acciones. Para un juego básico, un set de acciones base siempre está activo y cubre: correr, recoger objetos, saltar, etc.
Cuando el jugador selecciona una clase, se agrega la capa apropiada. Por ejemplo, "francotirador".
El código podría ser algo así:
void changeClass(EClassID myClass)
{
if(myClass == SNIPER)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle );
}
//Lógica para otras clases
}
Si el jugador entra o sale de un vehículo, los controles para la capa del vehículo se activan/desactivan en esos cambios de estado, agregando o eliminando nuevos controles para las funciones específicas del vehículo.
void changeVehicle(EVehicleID myVehicle, bool entering)
{
InputActionSetHandle_t layerHandle;
if(myVehicle == AUTOMATIC)
{
layerHandle = automaticHandle; //Transmisión automática: dirección, acelerador, freno.
}
else if(myVehicle == STICK_SHIFT)
{
layerHandle = stickShiftHandle; //Transmisión manual: dirección, acelerador, freno, embrague, cambio de marcha, etc.
}
if(entering)
{
SteamInput()>ActivateActionSetLayer( controllerHandle1, layerHandle ); //Aplica la capa de set de acciones del vehículo cuando te subes a él.
}
else
{
SteamInput()>DeactivateActionSetLayer( controllerHandle1, layerHandle ); //Elimina la capa de set de acciones del vehículo cuando te bajas de él.
}
}
En este juego, los jugadores pueden usar su arma incluso cuando van en un vehículo. Entonces, cuando el francotirador usa su mira telescópica en el rifle, activa una tercera capa de acciones, independientemente de si el jugador está caminando o va en un vehículo.
void useScope(bool entering)
{
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //Aplica la capa de mira telescópica cuando la utilizas
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //Elimina la capa de mira telescópica cuando dejas de utilizarla
}
}
Así es como se combinan todas las capas.
Ten en cuenta que las capas no solo pueden agregar nuevas acciones sobre las capas subyacentes, sino que también pueden anular los enlaces anteriores; en este caso, en el vehículo, las acciones de "frenar" y "acelerar" anulan las acciones de la capa base de "saltar" e "interactuar", y la "dirección" anula la acción de "mover" vinculada al trackpad y al joystick en la capa base. Lo que, a su vez, está anulado por la acción de "apuntar" desde la capa del set de acciones de la mira. Una vez que las tres capas del set de acciones se apilan en la parte superior, la única acción restante del conjunto base es "disparar".Modo clásico
Creas capas de set de acciones casi exactamente como set de acciones normales. Simplemente, haz clic en el botón "Agregar capa de acción" en el configurador:
Desde aquí, puedes asignar un nombre a la capa del set de acciones y especificar asignaciones para la misma. Dado que se trata de una capa de set de acciones del modo clásico, el juego no tiene conocimiento de eso y el jugador tendrá que activarlo por su cuenta. Decide qué entrada debe de activar la capa del set de acciones y abre el menú de asignación; después haz clic en el ícono de activación del set de acciones (el ícono especial más a la izquierda):
Esto abre el menú de activación del set de acciones:
En este caso, queremos aplicar una capa, no activar un set de acciones. Seleccionamos "Aplicar capa de acción" desde el menú desplegable:
Para terminar, necesitamos seleccionar qué capa queremos aplicar:
Podemos usar el mismo procedimiento para asignar un enlace separado para eliminar la capa.