Az ActivateActionSetLayer hívása olcsó, így biztonságosan hívható ismétlődően (de lásd lent a kiemelést).Óvatosan több réteggel!
Csak az, hogy lehetséges a műveletkészlet-rétegek újra alkalmazása minden időkeretben, nem jelenti azt, hogy javasolt, különösen, ha egynél több réteget használsz. A legutóbb alkalmazott réteg felülír minden azt megelőző ütköző információt, ezért különösen ügyelj arra, hogy a megfelelő sorrendben alkalmazd őket. A kódodban könnyen kialakulhatnak versenyhelyzetek, vagy más finom időzítési hibák, amelyek felcserélhetik a sorrendet.
A műveletkészlet-rétegek szűk felhasználási esetekre készültek, és jó módszer csak bizonyos játékállapot-változásokkor alkalmazni és eltávolítani azokat.
A natív Steam Bevitel támogatású játékoknál a fejlesztő meghatározhat konkrét műveletkészlet-rétegeket, amelyeket a játék kódja aktivál. Ezen kívül hagyományos módban a játékosok meghatározhatják saját műveletkészlet-rétegeiket és az azokat kiváltó beviteleket, ugyanúgy, ahogyan saját, játékos által kiváltott műveletkészleteiket.Gyakorlati példa
Képzeljünk el egy osztályalapú lövöldözős játékot járművekkel. Ennek a játéknak van natív Steam Bevitel támogatása, és használ műveletkészlet-rétegeket. Az alap játékmenethez mindig aktív egy alap műveletkészlet, ami lefedi a futást, tárgyak felvételét, ugrást stb.
Amikor a játékos kiválaszt egy osztályt, hozzáadódik a megfelelő réteg, pl. „mesterlövész”.
Ehhez a kód nézhet ki valahogy így:
void changeClass(EClassID myClass)
{
if(myClass == SNIPER)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle );
}
// logika a többi osztályhoz
}
Ha a játékos beszáll egy járműbe vagy kiszáll egyből, a jármű réteg vezérlései az állapotváltozások hatására aktiválódnak/deaktiválódnak, új vezérléseket adva hozzá vagy távolítva el a járműspecifikus funkciókhoz.
void changeVehicle(EVehicleID myVehicle, bool entering)
{
InputActionSetHandle_t layerHandle;
if(myVehicle == AUTOMATIC)
{
layerHandle = automaticHandle; //automata váltó -- kormányzás, gáz fék
}
else if(myVehicle == STICK_SHIFT)
{
layerHandle = stickShiftHandle; // kézi váltó -- kormányzás, gáz, fék, kuplung, sebességváltás stb.
}
if(entering)
{
SteamInput()>ActivateActionSetLayer( controllerHandle1, layerHandle ); // a jármű műveletkészlet-rétegének alkalmazása, amikor beszállsz
}
else
{
SteamInput()>DeactivateActionSetLayer( controllerHandle1, layerHandle ); // a jármű műveletkészlet-rétegének eltávolítása, amikor kiszállsz
}
}
Ebben a játékban a játékosok akkor is használni tudják a fegyverüket, amikor járműben ülnek. Tehát amikor a mesterlövész a mesterlövész puska távcsövét használja, az aktivál egy harmadik műveletkészlet-réteget, függetlenül attól, hogy a játékos gyalog van vagy járműben ül.
void useScope(bool entering)
{
if(entering)
{
SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); // a ráközelített réteg alkalmazása ráközelítéskor
}
else
{
SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); // a ráközelített réteg eltávolítása a fegyver leengedésekor
}
}
Így kombinálódik az összes réteg:
Figyeld meg, ahogy a rétegek nem csak új műveleteket tudnak az alattuk levő rétegekhez adni, de felül is tudnak bírálni korábbi kiosztásokat; ebben az esetben a járműspecifikus „fék” és „gáz” műveletek felülbírálják az alapréteg „ugrás” és „interakció” műveleteit, a „kormányzás” pedig felülbírálja a trackpadhez és a botkormányhoz az alaprétegben hozzárendelt „mozgás” műveletkiosztást, amit pedig a „célzás” művelet bírál felül a ráközelített műveletkészlet-rétegből. Miután mindhárom műveletkészlet-réteg egymásra lett rétegezve, a „lövés” lesz az egyetlen megmaradt művelet az alapkészletből.Hagyományos mód
A műveletkészlet-rétegeket szinte pont ugyanúgy hozod létre, mint a szokásos műveletkészleteket. Egyszerűen kattints a „Műveletréteg hozzáadására” a konfigurálóban:
Innen nevet adhatsz a műveletkészlet-rétegednek, és megadhatod a hozzárendeléseit. Mivel ez egy hagyományos műveletkészlet-réteg, a játéknak nincs róla tudomása, és magának a játékosnak kell aktiválnia. Döntsd el, milyen bevitel aktiválja a műveletkészlet-réteget, nyisd meg a hozzárendelés menüt, majd kattints a műveletkészlet aktiválása ikonra, amely a bal szélső speciális ikon:
Ez megjeleníti a műveletkészlet aktiválás menüt:
Ebben az esetben réteget akarunk alkalmazni, nem műveletkészletet aktiválni. A „Műveletréteg alkalmazását” választjuk a lenyíló listából:
Végül ki kell választanunk, hogy melyik réteget akarjuk alkalmazni:
Ugyanezt az eljárást használhatjuk egy másik kiosztás hozzárendelésére a réteg eltávolításához.