Dokumentasi Steamworks
Layer Set Tindakan
Layer Set Tindakan merupakan set pengikatan tindakan opsional yang dapat ditumpukkan ke set kontrol yang sudah ada. Berbeda dengan Set Tindakan, layer mengambil tindakan dari Set Tindakan tempatnya berada dan tidak serta merta menggantikan apa yang sudah aktif saat diterapkan, melainkan menambahkan modifikasi kecil. Ini dapat berupa perubahan pengaturan, serta penambahan atau penghapusan pengikatan dari set tindakan dasar. Lebih dari satu layer dapat diterapkan sekaligus dan akan diterapkan secara berurutan.

Secara teknis, tidak ada batasan untuk banyaknya lapisan yang dapat aktif sekaligus. Namun, terlalu banyak layer di konfigurator akan membuat pemain bingung.

Perlu diingat bahwa:
  • Mengaktifkan set tindakan yang sudah aktif tidak akan berpengaruh pada layer-nya.
  • Mengaktifkan set tindakan baru tidak akan menghapus semua layer yang aktif dari set lama.
  • Mengaktifkan layer set tindakan yang sudah aktif tidak akan memengaruhi apa pun.
  • Mengaktifkan layer set tindakan yang sudah aktif tidak akan mengubah urutannya dari tumpukan.
  • Menonaktifkan dan kemudian mengaktifkan kembali layer set tindakan akan menempatkan layer tersebut ke bagian atas tumpukan.
  • Memanggil ActivateActionSetLayer tidaklah mahal dan dapat dilakukan berulang kali dengan aman (tapi, lihat penjelasan di bawah)

    Hati-hati dengan banyak layer!

    Hanya karena kamu bisa menerapkan kembali layer set tindakan pada setiap frame, bukan berarti kamu perlu melakukannya, terutama jika kamu menggunakan lebih dari satu layer. Layer terakhir yang diterapkan akan menimpa informasi yang saling bertentangan yang muncul sebelumnya. Jadi, pastikan untuk menerapkan layer dalam urutan yang benar. Kondisi balapan dan bug waktu kecil lainnya yang menyebabkan penyusunan ulang dapat dengan mudah terjadi pada kodemu.

    Layer set tindakan dimaksudkan untuk penggunaan sempit dan direkomendasikan untuk diterapkan dan dihapus hanya untuk perubahan status game tertentu.

    Untuk game dengan dukungan Steam Input bawaan, pengembang dapat menetapkan layer set tindakan spesifik yang diaktifkan oleh kode game. Selain itu, dalam mode klasik, pemain dapat menetapkan layer set tindakannya sendiri beserta input yang memicunya, sama seperti mereka dapat menetapkan set tindakan yang dapat mereka picu sendiri.

    Contoh praktis


    Bayangkan game penembak berbasis kelas dengan fitur kendaraan. Game ini memiliki dukungan Steam Input bawaan dan memanfaatkan layer set tindakan. Untuk gameplay dasar, set tindakan dasar selalu aktif dan mencakup tindakan-tindakan seperti lari, mengambil item, lompat, dll.

    action_set_layers_basic_1.png

    Ketika pemain memilih kelas, layer yang sesuai kemudian ditambahkan, mis. "sniper"

    action_set_layers_sniper_2.png

    Kode untuk ini mungkin terlihat seperti:

    void changeClass(EClassID myClass) { if(myClass == SNIPER) { SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle ); } //logika untuk kelas lainnya }

    Jika pemain masuk atau keluar dari kendaraan, kontrol untuk layer kendaraan akan aktif/nonaktif berdasarkan perubahan status tersebut, yang menambahkan atau menghapus kontrol baru untuk fungsi khusus kendaraan.

    action_set_layers_vehicle_1.png

    void changeVehicle(EVehicleID myVehicle, bool entering) { InputActionSetHandle_t layerHandle; if(myVehicle == AUTOMATIC) { layerHandle = automaticHandle; //transmisi otomatis -- setir, gas, rem } else if(myVehicle == STICK_SHIFT) { layerHandle = stickShiftHandle; //transmisi manual -- setir, gas, rem, kopling, perpindahan gigi, dll. } if(entering) { SteamInput()>ActivateActionSetLayer( controllerHandle1, layerHandle ); //menerapkan layer set tindakan kendaraan ketika kamu masuk ke dalam kendaraan } else { SteamInput()>DeactivateActionSetLayer( controllerHandle1, layerHandle ); //menghapus layer set tindakan kendaraan ketika kamu keluar dari kendaraan } }

    Dalam game ini, pemain dapat menggunakan senjata mereka sambil berkendara. Jadi, ketika sniper menggunakan teleskop di rifle, ini akan mengaktifkan layer set tindakan ketiga, terlepas dari apakah pemain sedang berdiri atau berkendara.

    action_set_layers_scope.png

    void useScope(bool entering) { if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //menerapkan layer teleskop ketika menggunakan teleskop } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //menghapus layer teleskop ketika berhenti menggunakan teleskop } }

    Beginilah cara semua lapisan digabungkan.

    action_set_layers_result_2.png

    Perhatikan bahwa selain menerapkan tindakan baru ke layer yang mendasarinya, layer juga dapat menimpa pengikatan yang sudah ada sebelumnya. Dalam hal ini, tindakan khusus untuk kendaraan seperti "rem" dan "gas" dapat menimpa tindakan dasar seperti "lompat" dan "interaksi". Kemudian, "setir" dapat menimpa tindakan "gerak" yang terikat pada trackpad dan joystick di layer dasar, dan ini pada gilirannya ditimpa oleh tindakan "bidik" dari layer set tindakan untuk penggunaan teleskop. Setelah ketiga layer set tindakan ditumpuk di atas, satu-satunya tindakan yang tersisa dari set dasar adalah "tembak".

    Mode Klasik


    Kamu dapat membuat layer set tindakan hampir persis seperti set tindakan biasa. Cukup klik tombol "Tambahkan Layer Tindakan" di konfigurator:

    add_action_layer.png

    Dari sini, kamu dapat menamai layer set tindakanmu dan menetapkan pengikatannya. Karena ini adalah layer set tindakan klasik, maka game tidak mengetahuinya dan pemain harus mengaktifkannya sendiri. Tentukan input yang akan memicu layer set tindakan, kemudian buka menu pengikatan, dan klik ikon pengaktifan set tindakan, yang merupakan ikon khusus di paling kiri:

    bind_action_set.png

    Ini akan memunculkan menu pengaktifan set tindakan:

    change_action_set.png

    Di sini, kita akan menerapkan layer, bukan mengaktifkan set tindakan. Pilih "Terapkan Layer Tindakan" dari menu drop down:

    apply_action_set_layer.png

    Terakhir, pilih layer yang ingin kita terapkan:

    select_action_set_layer.png

    Kita dapat menggunakan prosedur yang sama untuk menetapkan pengikatan terpisah untuk menghapus layer-nya.