Triggers2 is an improvement of the Triggers section. Combined with the triggerEventLinks2 and actionsEnabled sections, it offers a more natural link between triggers and input actions. These sections make it possible to show and hide certain actions on the UI depending on the parts equipped on the vehicle.
Interaction maps
Triggers2 require an action map or an interaction map in order to work. The interaction map can be defined in a file with a *.interaction.json suffix. The format of the file is the same as of input_actions.json , and it can replace that file. The keyboard and controller inputmaps associated with it will still work after the name change. There can be many files with the *.interaction.json suffix for modding purposes. There is also a shared interaction map in the common vehicle folder which contains some generic interactions such as door latches. Example of an interaction map file:
{
"fileversion": 2,
"actions": {
//the content here is the same as in input_actions.json
"sleeper_door_R": {"order": 50.1, "onDown":"controller.getControllerSafe('sleeperDoorRCoupler').toggleGroup()", "title": "vehicle.interaction.sleeperDoorR.toggle.title", "desc": "vehicle.interaction.sleeperDoorR.toggle.desc" },
"sleeper_door_L": {"order": 50.2, "onDown":"controller.getControllerSafe('sleeperDoorLCoupler').toggleGroup()", "title": "vehicle.interaction.sleeperDoorL.toggle.title", "desc": "vehicle.interaction.sleeperDoorL.toggle.desc" },
}
}
Triggers2 section arguments
Note: The “label” argument has been removed.
Required arguments
example value for Box type:
{"x":0.25, "y":0.05, "z":0.08}
example value for Sphere type:
0.25
Uses the intrinsic Euler -X -Z -Y rotation system, the center of rotation being the corner of the box that defines position.
example value:
{"x":0, "y":0, "z":0}
Uses the intrinsic Euler -X -Z -Y rotation system, the center of rotation being the corner of the box that defines position.
example value:
{"x":0.2, "y":0.26, "z":-0.05}
Optional arguments
example value:
"color": [0, 0, 1, 0.4]
TriggerEventLinks2 section arguments
Note: This section no longer refers to events. They are not supported by triggers2. The “triggerInput” argument is the same as the old “action” argument.
Commonly used values are:
- action0 = left mouse button
- action1 = shift + left mouse button
- action2 = middle mouse button
When used without a prefix, the name will be found in a file with a *.interaction.json suffix in the vehicle’s own folder or the common folder.
As of update 0.31 the common_default.interaction.json file available for all vehicles contains the following interactions:
- “door_FL”: “onDown”:“controller.getControllerSafe(‘door_FL_coupler’).toggleGroup()”
- “door_FR”: “onDown”:“controller.getControllerSafe(‘door_FR_coupler’).toggleGroup()”
- “toggle_cargodoorRL”: “onDown”:“controller.getControllerSafe(‘cargoDoorRLCoupler’).toggleGroup()”
- “toggle_cargodoorRR”: “onDown”:“controller.getControllerSafe(‘cargoDoorRRCoupler’).toggleGroup()”
When the “common:” prefix is added to the action name, it will be found in the VehicleCommonActionMap . You can see the available actions in lua\ge\extensions\core\input\actions\vehicle.json.
ActionsEnabled
Actions in *.interaction.json files, similarly to custom action maps, will be disabled by default (this means the tooltip showing the key mapped to them in top right corner of the screen will not be displayed, but the code will still be executed when that key is pressed). They can be enabled in Jbeam for a vehicle part that uses them using the ActionsEnabled section. It only takes one argument which is the ID of the action to enable. Example usage:
"actionsEnabled": [
["id"],
["door_FR"],
],
This is especially useful for vehicles that have lots of possible actions and only a small part of them is usable at a time depending on the chosen parts, like a semi truck with multiple upfit variants and interior controls.
Simple Example
A standard triggers2 setup for a door latch. It makes use of the door_FR action defined in common_default.interaction.json.
"triggers2":[
["id", "idRef:", "idX:", "idY:", "type", "size", "baseRotation", "rotation", "translation", "baseTranslation"],
["door_R", "d3r","d2r","d6r", "box", {"x":0.1, "y":0.03, "z":0.1}, {"x":0, "y":90, "z":0}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":0.24, "y":0.13, "z":-0.003}],
["door_R_int", "d4r","d5r","d1r", "box", {"x":0.1, "y":0.03, "z":0.1}, {"x":-0, "y":0, "z":-0}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":0.15, "y":-0.2, "z":0.0175}],
],
"triggerEventLinks2":[
["triggerId:triggers2", "triggerInput", "inputAction"],
["door_R", "action0", "door_FR"],
["door_R_int", "action0", "door_FR"],
],
"actionsEnabled": [
["id"],
["door_FR"],
],
Advanced Example
A more complicated setup, which uses colored triggers, actions from VehicleCommonActionMap, and a custom action from the vehicle’s interaction map.
"triggers2": [
["id", "idRef:", "idX:", "idY:", "type", "size", "baseRotation", "rotation", "translation", "baseTranslation"],
["sw_ignition", "dsh","dshr","dsh2", "box", {"x":0.05, "y":0.02, "z":0.02}, {"x":17, "y":-5, "z":8}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":-0.19, "y":0.155, "z":0.129}, {"deformGroup":"", "color": [0, 0, 1, 0.4]}],
["sw_starter", "dsh","dshr","dsh2", "box", {"x":0.05, "y":0.05, "z":0.05}, {"x":17, "y":-5, "z":8}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":-0.18, "y":0.24, "z":0.094}, {"deformGroup":"", "color": [0, 0, 1, 0.4]}],
["trailerAir", "dsh","dshr","dsh2", "box", {"x":0.07, "y":0.03, "z":0.07}, {"x":8, "y":-8, "z":-24}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":0.025, "y":0.053, "z":-0.036}, {"deformGroup":"", "color": [0, 0, 1, 0.4]}],
["parkingBrake", "dsh","dshr","dsh2", "box", {"x":-0.07, "y":0.03, "z":0.07}, {"x":8, "y":-8, "z":-24}, {"x":0, "y":0, "z":0}, {"x":0, "y":0, "z":0}, {"x":-0.001, "y":0.057, "z":-0.025}, {"deformGroup":"", "color": [0, 0, 1, 0.4]}],
],
"triggerEventLinks2": [
["triggerId:triggers2", "triggerInput", "inputAction"],
["sw_ignition", "action0", "common:activateStarterMotor"],
["sw_starter", "action0", "common:setIgnitionLevel3Momentary"],
["parkingBrake", "action0", "common:parkingbrake"],
["trailerAir", "action0", "toggleTrailerAirSupply"],
],
"actionsEnabled": [
["id"],
["toggleTrailerAirSupply"],
],
The corresponding action from the interaction map:
"toggleTrailerAirSupply": {"order": 30.1, "onDown":"energyStorage.getStorageSafe('mainAirTank'):toggleConsumerPressureCoef()", "title": "vehicle.interaction.pneumatics.trailerAirSupply.toggle.title", "desc": "vehicle.interaction.pneumatics.trailerAirSupply.toggle.desc" },