overte/tools/jsdoc/ControllerExamine
2018-04-30 16:55:42 -07:00

4792 lines
No EOL
208 KiB
Text

<section>
<article>
<div class="container-overview">
<div class="description">The Controller API provides facilities to interact with computer and controller hardware.
<h5>Functions:</h5>
<p>Properties</p>
<ul>
<li>
<a href="Controller#.getActions">getActions</a>
</li>
<li>
<a href="Controller#.getHardware">getHardware</a>
</li>
<li>
<a href="Controller#.getStandard">getStandard</a>
</li>
</ul>
<p>Mappings</p>
<ul>
<li>
<a href="Controller#.disableMapping">disableMapping</a>
</li>
<li>
<a href="Controller#.enableMapping">enableMapping</a>
</li>
<li>
<a href="Controller#.loadMapping">loadMapping</a>
</li>
<li>
<a href="Controller#.newMapping">newMapping</a>
</li>
<li>
<a href="Controller#.parseMapping">parseMapping</a>
</li>
</ul>
<p>Input, Hardware, and Action Reflection</p>
<ul>
<li>
<a href="Controller#.findAction">findAction</a>
</li>
<li>
<a href="Controller#.findDevice">findDevice</a>
</li>
<li>
<a href="Controller#.getActionNames">getActionNames</a>
</li>
<li>
<a href="Controller#.getAllActions">getAllActions</a>
</li>
<li>
<a href="Controller#.getAvailableInputs">getAvailableInputs</a>
</li>
<li>
<a href="Controller#.getDeviceName">getDeviceName</a>
</li>
<li>
<a href="Controller#.getDeviceNames">getDeviceNames</a>
</li>
</ul>
<p>Input, Hardware, and Action Events</p>
<ul>
<li>
<a href="Controller#.actionEvent">actionEvent</a>
</li>
<li>
<a href="Controller#.hardwareChanged">hardwareChanged</a>
</li>
<li>
<a href="Controller#.inputEvent">inputEvent</a>
</li>
</ul>
<p>Mouse, Keyboard, and Touch Events</p>
<ul>
<li>
<a href="Controller#.keyPressEvent">keyPressEvent</a>
</li>
<li>
<a href="Controller#.keyReleaseEvent">keyReleaseEvent</a>
</li>
<li>
<a href="Controller#.mouseDoublePressEvent">mouseDoublePressEvent</a>
</li>
<li>
<a href="Controller#.mouseMoveEvent">mouseMoveEvent</a>
</li>
<li>
<a href="Controller#.mousePressEvent">mousePressEvent</a>
</li>
<li>
<a href="Controller#.mouseReleaseEvent">mouseReleaseEvent</a>
</li>
<li>
<a href="Controller#.touchBeginEvent">touchBeginEvent</a>
</li>
<li>
<a href="Controller#.touchEndEvent">touchEndEvent</a>
</li>
<li>
<a href="Controller#.touchUpdateEvent">touchUpdateEvent</a>
</li>
<li>
<a href="Controller#.wheelEvent">wheelEvent</a>
</li>
</ul>
<p>Control Capturing</p>
<ul>
<li>
<a href="Controller#.captureMouseEvents">captureMouseEvents</a>
</li>
<li>
<a href="Controller#.captureTouchEvents">captureTouchEvents</a>
</li>
<li>
<a href="Controller#.captureWheelEvents">captureWheelEvents</a>
</li>
<li>
<a href="Controller#.releaseMouseEvents">releaseMouseEvents</a>
</li>
<li>
<a href="Controller#.releaseTouchEvents">releaseTouchEvents</a>
</li>
<li>
<a href="Controller#.releaseWheelEvents">releaseWheelEvents</a>
</li>
</ul>
<p>Action Capturing</p>
<ul>
<li>
<a href="Controller#.captureActionEvents">captureActionEvents</a>
</li>
<li>
<a href="Controller#.captureEntityClickEvents">captureEntityClickEvents</a>
</li>
<li>
<a href="Controller#.captureJoystick">captureJoystick</a>
</li>
<li>
<a href="Controller#.captureKeyEvents">captureKeyEvents</a>
</li>
<li>
<a href="Controller#.releaseActionEvents">releaseActionEvents</a>
</li>
<li>
<a href="Controller#.releaseEntityClickEvents">releaseEntityClickEvents</a>
</li>
<li>
<a href="Controller#.releaseJoystick">releaseJoystick</a>
</li>
<li>
<a href="Controller#.releaseKeyEvents">releaseKeyEvents</a>
</li>
</ul>
<p>Controller and Action Values</p>
<ul>
<li>
<a href="Controller#.getValue">getValue</a>
</li>
<li>
<a href="Controller#.getAxisValue">getAxisValue</a>
</li>
<li>
<a href="Controller#.getPoseValue">getgetPoseValue</a>
</li>
<li>
<a href="Controller#.getButtonValue">getButtonValue</a> for a particular device</li>
<li>
<a href="Controller#.getAxisValue0">getAxisValue</a> for a particular device</li>
<li>
<a href="Controller#.getPoseValue0">getPoseValue</a> for a particular device</li>
<li>
<a href="Controller#.getActionValue">getActionValue</a>
</li>
</ul>
<p>Haptics</p>
<ul>
<li>
<a href="Controller#.triggerHapticPulse">triggerHapticPulse</a>
</li>
<li>
<a href="Controller#.triggerHapticPulseOnDevice">triggerHapticPulseOnDevice</a>
</li>
<li>
<a href="Controller#.triggerShortHapticPulse">triggerShortHapticPulse</a>
</li>
<li>
<a href="Controller#.triggerShortHapticPulseOnDevice">triggerShortHapticPulseOnDevice</a>
</li>
</ul>
<p>Display Information</p>
<ul>
<li>
<a href="Controller#.getViewportDimensions">getViewportDimensions</a>
</li>
<li>
<a href="Controller#.getRecommendedHUDRect">getRecommendedHUDRect</a>
</li>
</ul>
<p>Virtual Game Pad</p>
<ul>
<li>
<a href="Controller#.setVPadEnabled">setVPadEnabled</a>
</li>
<li>
<a href="Controller#.setVPadHidden">setVPadHidden</a>
</li>
<li>
<a href="Controller#.setVPadExtraBottomMargin">setVPadExtraBottomMargin</a>
</li>
</ul>
<p>Input Recordings</p>
<ul>
<li>
<a href="Controller#.startInputRecording">startInputRecording</a>
</li>
<li>
<a href="Controller#.stopInputRecording">stopInputRecording</a>
</li>
<li>
<a href="Controller#.saveInputRecording">saveInputRecording</a>
</li>
<li>
<a href="Controller#.getInputRecorderSaveDirectory">getInputRecorderSaveDirectory</a>
</li>
<li>
<a href="Controller#.loadInputRecording">loadInputRecording</a>
</li>
<li>
<a href="Controller#.startInputPlayback">startInputPlayback</a>
</li>
<li>
<a href="Controller#.stopInputPlayback">stopInputPlayback</a>
</li>
</ul>
<table>
<tbody><tr>
<th>Available in:</th>
<td>Interface Scripts</td>
<td>Client Entity Scripts</td>
</tr>
</tbody></table>
</div>
<h4 class="subsection-title">Properties</h4>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>Actions</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Actions">Controller.Actions</a></span></td>
<td class="description last">Predefined actions on Interface and the user&apos;s avatar. These can be used as end points in a
<a href="RouteObject">RouteObject</a> mapping. A synonym for <code>Controller.Hardware.Actions</code>. <em>Read-only.</em>
<br> Default mappings are provided from the <code>Controller.Hardware.Keyboard</code> and <code>Controller.Standard</code> to actions in
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/keyboardMouse.json">keyboardMouse.json</a> and
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/standard.json">standard.json</a>, respectively.</td>
</tr>
<tr>
<td class="name"><code>Hardware</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Hardware">Controller.Hardware</a></span></td>
<td class="description last">Standard and hardware-specific controller and computer outputs, plus predefined actions on Interface and the user&apos;s avatar. The outputs can be mapped to <code>Actions</code> or functions in a
<a href="RouteObject">RouteObject</a> mapping. Additionally, hardware-specific controller outputs can be mapped to <code>Standard</code> controller outputs. <em>Read-only.</em></td>
</tr>
<tr>
<td class="name"><code>Standard</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Standard">Controller.Standard</a></span></td>
<td class="description last">Standard controller outputs that can be mapped to <code>Actions</code> or functions in a
<a href="RouteObject">RouteObject</a> mapping. <em>Read-only.</em>
<br> Each hardware device has a mapping from its outputs to <code>Controller.Standard</code> items, specified in a JSON file. For example,
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/leapmotion.json">leapmotion.json</a> and
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/vive.json">vive.json</a>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
</div>
<h4 class="subsection-title">Methods</h4>
<h5 class="name" id=".actionEvent"> actionEvent<span class="signature">(actionID, value)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when an action occurs.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>actionID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The ID of the action, per
<a href="Controller#.findAction">findAction</a>.</td>
</tr>
<tr>
<td class="name"><code>value</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The value associated with the action.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report action events as they occur.</p><pre class="prettyprint"><code>var actionNamesForID = {};
var actionNames = Controller.getActionNames();
for (var i = 0, length = actionNames.length; i &lt; length; i++) {
actionNamesForID[Controller.findAction(actionNames[i])] = actionNames[i];
}
function onActionEvent(action, value) {
print(&quot;onActionEvent() : &quot; + action + &quot; ( &quot; + actionNamesForID[action] + &quot; ) ; &quot; + value);
}
Controller.actionEvent.connect(onActionEvent);
Script.scriptEnding.connect(function () {
Controller.actionEvent.disconnect(onActionEvent);
});</code></pre>
<h5 class="name" id=".captureActionEvents"> captureActionEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Disable translating and rotating the user&apos;s avatar in response to keyboard and controller controls.</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Disable avatar translation and rotation for a short period.</p><pre class="prettyprint"><code>Script.setTimeout(function () {
Controller.captureActionEvents();
}, 5000);
Script.setTimeout(function () {
Controller.releaseActionEvents();
}, 10000);</code></pre>
<h5 class="name" id=".captureEntityClickEvents"> captureEntityClickEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Disable
<a href="Entities#.mousePressOnEntity">Entities.mousePressOnEntity</a> and
<a href="Entities#.mouseDoublePressOnEntity">Entities.mouseDoublePressOnEntity</a> events on entities.</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Disable entity click events for a short period.</p><pre class="prettyprint"><code>Entities.mousePressOnEntity.connect(function (entityID, event) {
print(&quot;Clicked on entity: &quot; + entityID);
});
Script.setTimeout(function () {
Controller.captureEntityClickEvents();
}, 5000);
Script.setTimeout(function () {
Controller.releaseEntityClickEvents();
}, 10000);</code></pre>
<h5 class="name" id=".captureJoystick"> captureJoystick<span class="signature">(joystickID)</span><span class="type-signature"></span></h5>
<div class="description"> Disable default Interface actions for a joystick.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>joystickID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The integer ID of the joystick.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer has any effect.</li>
</ul>
</dd>
</dl>
<h5 class="name" id=".captureKeyEvents"> captureKeyEvents<span class="signature">(event)</span><span class="type-signature"></span></h5>
<div class="description"> Disable default Interface actions for a particular key event.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#KeyEvent">KeyEvent</a></span></td>
<td class="description last">Details of the key event to be captured. The <code>key</code> property must be specified. The <code>text</code> property is ignored. The other properties default to <code>false</code>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Disable left and right strafing.</p><pre class="prettyprint"><code>var STRAFE_LEFT = { &quot;key&quot;: 16777234, isShifted: true };
var STRAFE_RIGHT = { &quot;key&quot;: 16777236, isShifted: true };
Controller.captureKeyEvents(STRAFE_LEFT);
Controller.captureKeyEvents(STRAFE_RIGHT);
Script.scriptEnding.connect(function () {
Controller.releaseKeyEvents(STRAFE_LEFT);
Controller.releaseKeyEvents(STRAFE_RIGHT);
});</code></pre>
<h5 class="name" id=".captureMouseEvents"> captureMouseEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Disable processing of mouse &quot;move&quot;, &quot;press&quot;, &quot;double-press&quot;, and &quot;release&quot; events into
<a href="Controller#.Hardware">Controller.Hardware.Keyboard</a> outputs.</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Disable Controller.Hardware.Keyboard mouse events for a short period.</p><pre class="prettyprint"><code>var MAPPING_NAME = &quot;com.highfidelity.controllers.example.newMapping&quot;;
var mapping = Controller.newMapping(MAPPING_NAME);
mapping.from(Controller.Hardware.Keyboard.MouseX).to(function (x) {
print(&quot;Mouse x = &quot; + x);
});
mapping.from(Controller.Hardware.Keyboard.MouseY).to(function (y) {
print(&quot;Mouse y = &quot; + y);
});
Controller.enableMapping(MAPPING_NAME);
Script.scriptEnding.connect(function () {
Controller.disableMapping(MAPPING_NAME);
});
Script.setTimeout(function () {
Controller.captureMouseEvents();
}, 5000);
Script.setTimeout(function () {
Controller.releaseMouseEvents();
}, 10000);</code></pre>
<h5 class="name" id=".captureTouchEvents"> captureTouchEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Disable processing of touch &quot;begin&quot;, &quot;update&quot;, and &quot;end&quot; events into
<a href="Controller#.Hardware">Controller.Hardware.Keyboard</a>,
<a href="Controller#.Hardware">Controller.Hardware.Touchscreen</a>, and
<a href="Controller#.Hardware">Controller.Hardware.TouchscreenVirtualPad</a> outputs.</div>
<dl class="details"></dl>
<h5 class="name" id=".captureWheelEvents"> captureWheelEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Disable processing of mouse wheel rotation events into
<a href="Controller#.Hardware">Controller.Hardware.Keyboard</a> outputs.</div>
<dl class="details"></dl>
<h5 class="name" id=".disableMapping"> disableMapping<span class="signature">(mappingName)</span><span class="type-signature"></span></h5>
<div class="description"> Disable a controller mapping. When disabled, the routes in the mapping have no effect.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mappingName</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The name of the mapping.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".enableMapping"> enableMapping<span class="signature">(mappingName, enable)</span><span class="type-signature"></span></h5>
<div class="description"> Enable or disable a controller mapping. When enabled, the routes in the mapping have effect.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mappingName</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="default"></td>
<td class="description last">The name of the mapping.</td>
</tr>
<tr>
<td class="name"><code>enable</code></td>
<td class="type"> <span class="param-type">boolean</span></td>
<td class="default"> true</td>
<td class="description last">If <code>true</code> then the mapping is enabled, otherwise it is disabled.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".findAction"> findAction<span class="signature">(actionName)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Find the ID of an action from its name.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>actionName</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The name of the action: one of the
<a href="Controller#.Actions">Controller.Actions</a> property names.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The integer ID of the action if found, otherwise <code>4095</code>. Note that this value is not the same as the value of the relevant
<a href="Controller#.Actions">Controller.Actions</a> property.</div>
<dl>
<dt> Type: number</dt></dl>
<h5>Example</h5>
<p class="code-caption">Get the ID of the &quot;TranslateY&quot; action. Compare with the property value.</p><pre class="prettyprint"><code>var actionID = Controller.findAction(&quot;TranslateY&quot;);
print(&quot;Action ID = &quot; + actionID); // 1
print(&quot;Property value = &quot; + Controller.Actions.TranslateY); // 537001728 or similar value.</code></pre>
<h5 class="name" id=".findDevice"> findDevice<span class="signature">(deviceName)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Find the ID of a specific controller from its device name.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>deviceName</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The name of the device to find.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The integer ID of the device if available, otherwise <code>65535</code>.</div>
<dl>
<dt> Type: number</dt></dl>
<h5>Example</h5>
<p class="code-caption">Get the ID of the Oculus Touch.</p><pre class="prettyprint"><code>var deviceID = Controller.findDevice(&quot;OculusTouch&quot;);
print(&quot;Device ID = &quot; + deviceID);</code></pre>
<h5 class="name" id=".getActionNames"> getActionNames<span class="signature">()</span> <span class="type-signature">&#x2192; {Array.&lt;string&gt;}</span></h5>
<div class="description"> Get the names of all actions available as properties of
<a href="Controller#.Actions">Controller.Actions</a>.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> An array of action names.</div>
<dl>
<dt> Type: Array.&lt;string&gt;</dt></dl>
<h5>Example</h5>
<p class="code-caption">Get the names of all actions.</p><pre class="prettyprint"><code>var actionNames = Controller.getActionNames();
print(&quot;Action names: &quot; + JSON.stringify(actionNames));
// [&quot;TranslateX&quot;,&quot;TranslateY&quot;,&quot;TranslateZ&quot;,&quot;Roll&quot;, ...</code></pre>
<h5 class="name" id=".getActions"> getActions<span class="signature">()</span> <span class="type-signature">&#x2192; {<a href="Controller#.Actions">Controller.Actions</a>}</span></h5>
<div class="description"> Get the
<a href="Controller#.Actions">Controller.Actions</a> property tree. Calling this function is the same as using the
<a href="Controller">Controller</a> property, <code>Controller.Actions</code>.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The
<a href="Controller#.Actions">Controller.Actions</a> property tree.</div>
<dl>
<dt> Type: <a href="Controller#.Actions">Controller.Actions</a></dt></dl>
<h5 class="name" id=".getActionValue"> getActionValue<span class="signature">(actionID)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Get the current value of an action.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>actionID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The integer ID of the action.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the action.</div>
<dl>
<dt> Type: number</dt></dl>
<h5>Example</h5>
<p class="code-caption">Periodically report the value of the &quot;TranslateX&quot; action.</p><pre class="prettyprint"><code>var actionID = Controller.findAction(&quot;TranslateX&quot;);
function reportValue() {
print(Controller.getActionValue(actionID));
}
reportTimer = Script.setInterval(reportValue, 1000);</code></pre>
<h5 class="name" id=".getAllActions"> getAllActions<span class="signature">()</span> <span class="type-signature">&#x2192; {Array.&lt;Action&gt;}</span></h5>
<div class="description"> Get a list of all available actions.</div>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer works.</li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> All available actions.</div>
<dl>
<dt> Type: Array.&lt;Action&gt;</dt></dl>
<h5 class="name" id=".getAvailableInputs"> getAvailableInputs<span class="signature">(deviceID)</span> <span class="type-signature">&#x2192; {Array.&lt;NamedPair&gt;}</span></h5>
<div class="description"> Get a list of all available inputs for a hardware device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>deviceID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">Integer ID of the hardware device.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer works.</li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> All available inputs for the device.</div>
<dl>
<dt> Type: Array.&lt;NamedPair&gt;</dt></dl>
<h5 class="name" id=".getAxisValue"> getAxisValue<span class="signature">(source)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Get the value of a controller axis output. Note: Also gets the value of a controller button output.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The
<a href="Controller#.Standard">Controller.Standard</a> or
<a href="Controller#.Hardware">Controller.Hardware</a> item.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the controller item output if <code>source</code> is valid, otherwise <code>0</code>.</div>
<dl>
<dt> Type: number</dt></dl>
<h5 class="name" id=".getAxisValue0"> getAxisValue<span class="signature">(source, device<span class="signature-attributes">opt</span>)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Get the value of an axis control on a particular device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">StandardAxisChannel</span></td>
<td class="attributes"></td>
<td class="default"></td>
<td class="description last">The axis to get the value of.</td>
</tr>
<tr>
<td class="name"><code>device</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> 0</td>
<td class="description last">The ID of the hardware device to get the value from. The default value of <code>0</code> corresponds to <code>Standard</code>.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer works.</li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the axis if the parameters are valid, otherwise <code>0</code>.</div>
<dl>
<dt> Type: number</dt></dl>
<h5 class="name" id=".getButtonValue"> getButtonValue<span class="signature">(source, device<span class="signature-attributes">opt</span>)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Get the value of a button on a particular device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">StandardButtonChannel</span></td>
<td class="attributes"></td>
<td class="default"></td>
<td class="description last">The button to get the value of.</td>
</tr>
<tr>
<td class="name"><code>device</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> 0</td>
<td class="description last">The ID of the hardware device to get the value from. The default value of <code>0</code> corresponds to <code>Standard</code>.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer works.</li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the button if the parameters are valid, otherwise <code>0</code>.</div>
<dl>
<dt> Type: number</dt></dl>
<h5 class="name" id=".getDeviceName"> getDeviceName<span class="signature">(deviceID)</span> <span class="type-signature">&#x2192; {string}</span></h5>
<div class="description"> Find the name of a particular controller from its device ID.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>deviceID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The integer ID of the device.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The name of the device if found, otherwise <code>&quot;unknown&quot;</code>.</div>
<dl>
<dt> Type: string</dt></dl>
<h5>Example</h5>
<p class="code-caption">Get the name of the Oculus Touch controller from its ID.</p><pre class="prettyprint"><code>var deviceID = Controller.findDevice(&quot;OculusTouch&quot;);
print(&quot;Device ID = &quot; + deviceID);
var deviceName = Controller.getDeviceName(deviceID);
print(&quot;Device name = &quot; + deviceName);</code></pre>
<h5 class="name" id=".getDeviceNames"> getDeviceNames<span class="signature">()</span> <span class="type-signature">&#x2192; {Array.&lt;string&gt;}</span></h5>
<div class="description"> Get the names of all currently available controller devices plus &quot;Actions&quot;, &quot;Application&quot;, and &quot;Standard&quot;.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> An array of device names.</div>
<dl>
<dt> Type: Array.&lt;string&gt;</dt></dl>
<h5>Example</h5>
<p class="code-caption">Get the names of all currently available controller devices.</p><pre class="prettyprint"><code>var deviceNames = Controller.getDeviceNames();
print(JSON.stringify(deviceNames));
// [&quot;Standard&quot;,&quot;Keyboard&quot;,&quot;LeapMotion&quot;,&quot;OculusTouch&quot;,&quot;Application&quot;,&quot;Actions&quot;] or similar.</code></pre>
<h5 class="name" id=".getHardware"> getHardware<span class="signature">()</span> <span class="type-signature">&#x2192; {<a href="Controller#.Hardware">Controller.Hardware</a>}</span></h5>
<div class="description"> Get the
<a href="Controller#.Hardware">Controller.Hardware</a> property tree. Calling this function is the same as using the
<a href="Controller">Controller</a> property, <code>Controller.Hardware</code>.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The
<a href="Controller#.Hardware">Controller.Hardware</a> property tree.</div>
<dl>
<dt> Type: <a href="Controller#.Hardware">Controller.Hardware</a></dt></dl>
<h5 class="name" id=".getInputRecorderSaveDirectory"> getInputRecorderSaveDirectory<span class="signature">()</span> <span class="type-signature">&#x2192; {string}</span></h5>
<div class="description"> Get the directory in which input recordings are saved.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The directory in which input recordings are saved.</div>
<dl>
<dt> Type: string</dt></dl>
<h5 class="name" id=".getPoseValue"> getPoseValue<span class="signature">(source)</span> <span class="type-signature">&#x2192; {<a href="global#Pose">Pose</a>}</span></h5>
<div class="description"> Get the value of a controller pose output.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The
<a href="Controller#.Standard">Controller.Standard</a> or
<a href="Controller#.Hardware">Controller.Hardware</a> pose output.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the controller pose output if <code>source</code> is a pose output, otherwise an invalid pose with <code>Pose.valid == false</code>.</div>
<dl>
<dt> Type: <a href="global#Pose">Pose</a></dt></dl>
<h5 class="name" id=".getPoseValue0"> getPoseValue<span class="signature">(source, device<span class="signature-attributes">opt</span>)</span> <span class="type-signature">&#x2192; {<a href="global#Pose">Pose</a>}</span></h5>
<div class="description">
Get the value of an pose control on a particular device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">StandardPoseChannel</span></td>
<td class="attributes"></td>
<td class="default"></td>
<td class="description last">The pose to get the value of.</td>
</tr>
<tr>
<td class="name"><code>device</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> 0</td>
<td class="description last">The ID of the hardware device to get the value from. The default value of <code>0</code> corresponds to <code>Standard</code>.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer works.</li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the controller pose output if the parameters are valid, otherwise an invalid pose with <code>Pose.valid == false</code>.</div>
<dl>
<dt> Type: <a href="global#Pose">Pose</a></dt></dl>
<h5 class="name" id=".getRecommendedHUDRect"> getRecommendedHUDRect<span class="signature">()</span> <span class="type-signature">&#x2192; {<a href="global#Rect">Rect</a>}</span></h5>
<div class="description"> Get the recommended area to position UI on the HUD surface if in HMD mode or Interface&apos;s window interior if in desktop mode.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The recommended area in which to position UI.</div>
<dl>
<dt> Type: <a href="global#Rect">Rect</a></dt></dl>
<h5 class="name" id=".getStandard"> getStandard<span class="signature">()</span> <span class="type-signature">&#x2192; {<a href="Controller#.Standard">Controller.Standard</a>}</span></h5>
<div class="description"> Get the
<a href="Controller#.Standard">Controller.Standard</a> property tree. Calling this function is the same as using the
<a href="Controller">Controller</a> property, <code>Controller.Standard</code>.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The
<a href="Controller#.Standard">Controller.Standard</a> property tree.</div>
<dl>
<dt> Type: <a href="Controller#.Standard">Controller.Standard</a></dt></dl>
<h5 class="name" id=".getValue"> getValue<span class="signature">(source)</span> <span class="type-signature">&#x2192; {number}</span></h5>
<div class="description"> Get the value of a controller button or axis output. Note: Also gets the value of a controller axis output.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>source</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The
<a href="Controller#.Standard">Controller.Standard</a> or
<a href="Controller#.Hardware">Controller.Hardware</a> item.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The current value of the controller item output if <code>source</code> is valid, otherwise <code>0</code>.</div>
<dl>
<dt> Type: number</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report the Standard and Vive right trigger values.</p><pre class="prettyprint"><code>var triggerValue = Controller.getValue(Controller.Standard.RT);
print(&quot;Trigger value: &quot; + triggerValue);
if (Controller.Hardware.Vive) {
triggerValue = Controller.getValue(Controller.Hardware.Vive.RT);
print(&quot;Vive trigger value: &quot; + triggerValue);
} else {
print(&quot;No Vive present&quot;);
}</code></pre>
<h5 class="name" id=".getViewportDimensions"> getViewportDimensions<span class="signature">()</span> <span class="type-signature">&#x2192; {<a href="global#Vec2">Vec2</a>}</span></h5>
<div class="description"> Get the dimensions of the Interface window&apos;s interior if in desktop mode or the HUD surface if in HMD mode.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> The dimensions of the Interface window interior if in desktop mode or HUD surface if in HMD mode.</div>
<dl>
<dt> Type: <a href="global#Vec2">Vec2</a></dt></dl>
<h5 class="name" id=".hardwareChanged"> hardwareChanged<span class="signature">()</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a device is registered or unregistered by a plugin. Not all plugins generate <code>hardwareChanged</code> events: for example connecting or disconnecting a mouse will not generate an event but connecting or disconnecting an Xbox
controller will.</div>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".inputEvent"> inputEvent<span class="signature">(action, value)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when there is a new controller input event.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>action</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The input action, per
<a href="Controller#.Standard">Controller.Standard</a>.</td>
</tr>
<tr>
<td class="name"><code>value</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The value associated with the input action.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report input events as they occur.</p><pre class="prettyprint"><code>var inputNamesForID = {};
for (var property in Controller.Standard) {
inputNamesForID[Controller.Standard[property]] = &quot;Controller.Standard.&quot; + property;
}
function onInputEvent(input, value) {
print(&quot;onInputEvent() : &quot; + input + &quot; ( &quot; + inputNamesForID[input] + &quot; ) ; &quot; + value);
}
Controller.inputEvent.connect(onInputEvent);
Script.scriptEnding.connect(function () {
Controller.inputEvent.disconnect(onInputEvent);
});</code></pre>
<h5 class="name" id=".keyPressEvent"> keyPressEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a keyboard key is pressed.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#KeyEvent">KeyEvent</a></span></td>
<td class="description last">Details of the key press.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report the KeyEvent details for each key press.</p><pre class="prettyprint"><code>Controller.keyPressEvent.connect(function (event) {
print(JSON.stringify(event));
});</code></pre>
<h5 class="name" id=".keyReleaseEvent"> keyReleaseEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a keyboard key is released from being pressed.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#KeyEvent">KeyEvent</a></span></td>
<td class="description last">Details of the key release.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".loadInputRecording"> loadInputRecording<span class="signature">(file)</span><span class="type-signature"></span></h5>
<div class="description"> Load an input recording, ready for play back.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>file</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The path to the recording file, prefixed by <code>&quot;file:///&quot;</code>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".loadMapping"> loadMapping<span class="signature">(jsonURL)</span> <span class="type-signature">&#x2192; {<a href="MappingObject">MappingObject</a>}</span></h5>
<div class="description"> Create a new controller mapping from a
<a href="Controller#.MappingJSON">MappingJSON</a> JSON file at a URL. Use
<a href="Controller#.enableMapping">enableMapping</a> to enable the mapping for it to take effect.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>jsonURL</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The URL the
<a href="Controller#.MappingJSON">MappingJSON</a> JSON file.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-todo">To Do:</dt>
<dd class="tag-todo">
<ul>
<li><em>Implement this function. It currently does not load the mapping from the file; it just returns <code>null</code>.</em></li>
</ul>
</dd>
</dl>
<h6>Returns:</h6>
<div class="param-desc"> A controller mapping object.</div>
<dl>
<dt> Type: <a href="MappingObject">MappingObject</a></dt></dl>
<h5 class="name" id=".mouseDoublePressEvent"> mouseDoublePressEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a mouse button is double-pressed.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#MouseEvent">MouseEvent</a></span></td>
<td class="description last">Details of the button double-press.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".mouseMoveEvent"> mouseMoveEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when the mouse moves.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#MouseEvent">MouseEvent</a></span></td>
<td class="description last">Details of the mouse movement.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report the MouseEvent details for each mouse move.</p><pre class="prettyprint"><code>Controller.mouseMoveEvent.connect(function (event) {
print(JSON.stringify(event));
});</code></pre>
<h5 class="name" id=".mousePressEvent"> mousePressEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a mouse button is pressed.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#MouseEvent">MouseEvent</a></span></td>
<td class="description last">Details of the button press.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".mouseReleaseEvent"> mouseReleaseEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a mouse button is released from being pressed.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#MouseEvent">MouseEvent</a></span></td>
<td class="description last">Details of the button release.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".newMapping"> newMapping<span class="signature">(mappingName)</span> <span class="type-signature">&#x2192; {<a href="MappingObject">MappingObject</a>}</span></h5>
<div class="description"> Create a new controller mapping. Routes can then be added to the mapping using
<a href="MappingObject">MappingObject</a> methods and routed to <code>Standard</code> controls, <code>Actions</code>, or script functions using
<a href="RouteObject">RouteObject</a> methods. The mapping can then be enabled using
<a href="Controller#.enableMapping">enableMapping</a> for it to take effect.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mappingName</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="default"> Uuid.generate()</td>
<td class="description last">A unique name for the mapping. If not specified a new UUID generated by
<a href="Uuid#.generate">Uuid.generate</a> is used.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> A controller mapping object.</div>
<dl>
<dt> Type: <a href="MappingObject">MappingObject</a></dt></dl>
<h5>Example</h5>
<p class="code-caption">Create a simple mapping that makes the right trigger move your avatar up.</p><pre class="prettyprint"><code>var MAPPING_NAME = &quot;com.highfidelity.controllers.example.newMapping&quot;;
var mapping = Controller.newMapping(MAPPING_NAME);
mapping.from(Controller.Standard.RT).to(Controller.Actions.TranslateY);
Controller.enableMapping(MAPPING_NAME);
Script.scriptEnding.connect(function () {
Controller.disableMapping(MAPPING_NAME);
});</code></pre>
<h5 class="name" id=".parseMapping"> parseMapping<span class="signature">(jsonString)</span> <span class="type-signature">&#x2192; {<a href="MappingObject">MappingObject</a>}</span></h5>
<div class="description"> Create a new controller mapping from a
<a href="Controller#.MappingJSON">MappingJSON</a> string. Use
<a href="Controller#.enableMapping">enableMapping</a> to enable the mapping for it to take effect.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>jsonString</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">A JSON string of the
<a href="Controller#.MappingJSON">MappingJSON</a>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<div class="param-desc"> A controller mapping object.</div>
<dl>
<dt> Type: <a href="MappingObject">MappingObject</a></dt></dl>
<h5>Example</h5>
<p class="code-caption">Create a simple mapping that makes the right trigger move your avatar up.</p><pre class="prettyprint"><code>var mappingJSON = {
&quot;name&quot;: &quot;com.highfidelity.controllers.example.jsonMapping&quot;,
&quot;channels&quot;: [
{ &quot;from&quot;: &quot;Standard.RT&quot;, &quot;to&quot;: &quot;Actions.TranslateY&quot; }
]
};
var mapping = Controller.parseMapping(JSON.stringify(mappingJSON));
mapping.enable();
Script.scriptEnding.connect(function () {
mapping.disable();
});</code></pre>
<h5 class="name" id=".releaseActionEvents"> releaseActionEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Enable translating and rotating the user&apos;s avatar in response to keyboard and controller controls that were disabled using
<a href="Controller#.captureActionEvents">captureActionEvents</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".releaseEntityClickEvents"> releaseEntityClickEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Re-enable
<a href="Entities#.mousePressOnEntity">Entities.mousePressOnEntity</a> and
<a href="Entities#.mouseDoublePressOnEntity">Entities.mouseDoublePressOnEntity</a> events on entities that were disabled using
<a href="Controller#.captureEntityClickEvents">captureEntityClickEvents</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".releaseJoystick"> releaseJoystick<span class="signature">(joystickID)</span><span class="type-signature"></span></h5>
<div class="description"> Re-enable default Interface actions for a joystick that has been disabled using
<a href="Controller#.captureJoystick">captureJoystick</a>.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>joystickID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">The integer ID of the joystick.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt>
<dd>
<ul class="dummy">
<li>This function no longer has any effect.</li>
</ul>
</dd>
</dl>
<h5 class="name" id=".releaseKeyEvents"> releaseKeyEvents<span class="signature">(event)</span><span class="type-signature"></span></h5>
<div class="description"> Re-enable default Interface actions for a particular key event that has been disabled using
<a href="Controller#.captureKeyEvents">captureKeyEvents</a>.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#KeyEvent">KeyEvent</a></span></td>
<td class="description last">Details of the key event to release from capture. The <code>key</code> property must be specified. The <code>text</code> property is ignored. The other properties default to <code>false</code>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".releaseMouseEvents"> releaseMouseEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Enable processing of mouse &quot;move&quot;, &quot;press&quot;, &quot;double-press&quot;, and &quot;release&quot; events into
<a href="Controller#.Hardware-Keyboard">Controller.Hardware.Keyboard</a> outputs that were disabled using
<a href="Controller#.captureMouseEvents">captureMouseEvents</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".releaseTouchEvents"> releaseTouchEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Enable processing of touch &quot;begin&quot;, &quot;update&quot;, and &quot;end&quot; events into
<a href="Controller#.Hardware">Controller.Hardware.Keyboard</a>,
<a href="Controller#.Hardware">Controller.Hardware.Touchscreen</a>, and
<a href="Controller#.Hardware">Controller.Hardware.TouchscreenVirtualPad</a> outputs that were disabled using
<a href="Controller#.captureTouchEvents">captureTouchEvents</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".releaseWheelEvents"> releaseWheelEvents<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Enable processing of mouse wheel rotation events into
<a href="Controller#.Hardware">Controller.Hardware.Keyboard</a> outputs that wer disabled using
<a href="Controller#.captureWheelEvents">captureWheelEvents</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".saveInputRecording"> saveInputRecording<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Save the current recording to a file. The current recording may have been recorded by
<a href="Controller#.startInputRecording">startInputRecording</a> and
<a href="Controller#.stopInputRecording">stopInputRecording</a>, or loaded by
<a href="Controller#.loadInputRecording">loadInputRecording</a>. It is saved in the directory returned by
<a href="Controller#.getInputRecorderSaveDirectory">getInputRecorderSaveDirectory</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".setVPadEnabled"> setVPadEnabled<span class="signature">(enable)</span><span class="type-signature"></span></h5>
<div class="description"> Enables or disables the virtual game pad that is displayed on certain devices (e.g., Android).</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>enable</code></td>
<td class="type"> <span class="param-type">boolean</span></td>
<td class="description last">If <code>true</code> then the virtual game pad doesn&apos;t work, otherwise it does work provided that it is not hidden by
<a href="Controller#.setVPadHidden">setVPadHidden</a>.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".setVPadExtraBottomMargin"> setVPadExtraBottomMargin<span class="signature">(margin)</span><span class="type-signature"></span></h5>
<div class="description"> Sets the amount of extra margin between the virtual game pad that is displayed on certain devices (e.g., Android) and the bottom of the display.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>margin</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="description last">Integer number of pixels in the extra margin.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".setVPadHidden"> setVPadHidden<span class="signature">(hidden)</span><span class="type-signature"></span></h5>
<div class="description"> Shows or hides the virtual game pad that is displayed on certain devices (e.g., Android).</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>hidden</code></td>
<td class="type"> <span class="param-type">boolean</span></td>
<td class="description last">If <code>true</code> then the virtual game pad is hidden, otherwise it is shown.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".startInputPlayback"> startInputPlayback<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Play back the current recording from the beginning. The current recording may have been recorded by
<a href="Controller#.startInputRecording">startInputRecording</a> and
<a href="Controller#.stopInputRecording">stopInputRecording</a>, or loaded by
<a href="Controller#.loadInputRecording">loadInputRecording</a>. Playback repeats in a loop until
<a href="Controller#.stopInputPlayback">stopInputPlayback</a> is called.</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Play back a controller recording.</p><pre class="prettyprint"><code>var file = Window.browse(&quot;Select Recording&quot;, Controller.getInputRecorderSaveDirectory());
if (file !== null) {
print(&quot;Play recording: &quot; + file);
Controller.loadInputRecording(&quot;file:///&quot; + file);
Controller.startInputPlayback();
// Stop playback after 20s.
Script.setTimeout(function () {
print(&quot;Stop playing recording&quot;);
Controller.stopInputPlayback();
}, 20000);
}</code></pre>
<h5 class="name" id=".startInputRecording"> startInputRecording<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Start making a recording of currently active controllers.</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Make a controller recording.</p><pre class="prettyprint"><code>// Delay start of recording for 2s.
Script.setTimeout(function () {
print(&quot;Start input recording&quot;);
Controller.startInputRecording();
}, 2000);
// Make a 10s recording.
Script.setTimeout(function () {
print(&quot;Stop input recording&quot;);
Controller.stopInputRecording();
Controller.saveInputRecording();
print(&quot;Input recording saved in: &quot; + Controller.getInputRecorderSaveDirectory());
}, 12000);</code></pre>
<h5 class="name" id=".stopInputPlayback"> stopInputPlayback<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Stop play back of a recording started by
<a href="Controller#.startInputPlayback">startInputPlayback</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".stopInputRecording"> stopInputRecording<span class="signature">()</span><span class="type-signature"></span></h5>
<div class="description"> Stop making a recording started by
<a href="Controller#.startInputRecording">startInputRecording</a>.</div>
<dl class="details"></dl>
<h5 class="name" id=".touchBeginEvent"> touchBeginEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a touch event starts in the Interface window on a touch-enabled display or device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#TouchEvent">TouchEvent</a></span></td>
<td class="description last">Details of the touch begin.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report the TouchEvent details when a touch event starts.</p><pre class="prettyprint"><code>Controller.touchBeginEvent.connect(function (event) {
print(JSON.stringify(event));
});</code></pre>
<h5 class="name" id=".touchEndEvent"> touchEndEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a touch event ends in the Interface window on a touch-enabled display or device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#TouchEvent">TouchEvent</a></span></td>
<td class="description last">Details of the touch end.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".touchUpdateEvent"> touchUpdateEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when a touch event update occurs in the Interface window on a touch-enabled display or device.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#TouchEvent">TouchEvent</a></span></td>
<td class="description last">Details of the touch update.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5 class="name" id=".triggerHapticPulse"> triggerHapticPulse<span class="signature">(strength, duration, hand)</span><span class="type-signature"></span></h5>
<div class="description"> Triggers a haptic pulse on connected and enabled devices that have the capability.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>strength</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The strength of the haptic pulse, <code>0.0</code> &#x2013; <code>1.0</code>.</td>
</tr>
<tr>
<td class="name"><code>duration</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The duration of the haptic pulse, in milliseconds.</td>
</tr>
<tr>
<td class="name"><code>hand</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Hand">Controller.Hand</a></span></td>
<td class="default"> 2</td>
<td class="description last">The hand or hands to trigger the haptic pulse on.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Trigger a haptic pulse on the right hand.</p><pre class="prettyprint"><code>var HAPTIC_STRENGTH = 0.5;
var HAPTIC_DURATION = 10;
var RIGHT_HAND = 1;
Controller.triggerHapticPulse(HAPTIC_STRENGTH, HAPTIC_DURATION, RIGHT_HAND);</code></pre>
<h5 class="name" id=".triggerHapticPulseOnDevice"> triggerHapticPulseOnDevice<span class="signature">(deviceID, strength, duration, hand)</span><span class="type-signature"></span></h5>
<div class="description"> Triggers a haptic pulse on a particular device if connected and enabled and it has the capability.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>deviceID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The ID of the device to trigger the haptic pulse on.</td>
</tr>
<tr>
<td class="name"><code>strength</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The strength of the haptic pulse, <code>0.0</code> &#x2013; <code>1.0</code>.</td>
</tr>
<tr>
<td class="name"><code>duration</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The duration of the haptic pulse, in milliseconds.</td>
</tr>
<tr>
<td class="name"><code>hand</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Hand">Controller.Hand</a></span></td>
<td class="default"> 2</td>
<td class="description last">The hand or hands to trigger the haptic pulse on.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">Trigger a haptic pulse on an Oculus Touch controller.</p><pre class="prettyprint"><code>var HAPTIC_STRENGTH = 0.5;
var deviceID = Controller.findDevice(&quot;OculusTouch&quot;);
var HAPTIC_DURATION = 10;
var RIGHT_HAND = 1;
Controller.triggerHapticPulseOnDevice(deviceID, HAPTIC_STRENGTH, HAPTIC_DURATION, RIGHT_HAND);</code></pre>
<h5 class="name" id=".triggerShortHapticPulse"> triggerShortHapticPulse<span class="signature">(strength, hand)</span><span class="type-signature"></span></h5>
<div class="description"> Triggers a 250ms haptic pulse on connected and enabled devices that have the capability.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>strength</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The strength of the haptic pulse, <code>0.0</code> &#x2013; <code>1.0</code>.</td>
</tr>
<tr>
<td class="name"><code>hand</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Hand">Controller.Hand</a></span></td>
<td class="default"> 2</td>
<td class="description last">The hand or hands to trigger the haptic pulse on.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".triggerShortHapticPulseOnDevice"> triggerShortHapticPulseOnDevice<span class="signature">(deviceID, strength, hand)</span><span class="type-signature"></span></h5>
<div class="description"> Triggers a 250ms haptic pulse on a particular device if connected and enabled and it has the capability.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>deviceID</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The ID of the device to trigger the haptic pulse on.</td>
</tr>
<tr>
<td class="name"><code>strength</code></td>
<td class="type"> <span class="param-type">number</span></td>
<td class="default"></td>
<td class="description last">The strength of the haptic pulse, <code>0.0</code> &#x2013; <code>1.0</code>.</td>
</tr>
<tr>
<td class="name"><code>hand</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.Hand">Controller.Hand</a></span></td>
<td class="default"> 2</td>
<td class="description last">The hand or hands to trigger the haptic pulse on.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5 class="name" id=".wheelEvent"> wheelEvent<span class="signature">(event)</span> <span class="type-signature">&#x2192; {Signal}</span></h5>
<div class="description"> Triggered when the mouse wheel is rotated.</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type"> <span class="param-type"><a href="global#WheelEvent">WheelEvent</a></span></td>
<td class="description last">Details of the wheel movement.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h6>Returns:</h6>
<dl>
<dt> Type: Signal</dt></dl>
<h5>Example</h5>
<p class="code-caption">Report the WheelEvent details for each wheel rotation.</p><pre class="prettyprint"><code>Controller.wheelEvent.connect(function (event) {
print(JSON.stringify(event));
});
</code></pre>
<h4 class="subsection-title">Type Definitions</h4>
<h4 class="name" id=".Actions">Actions</h4>
<div class="description">
<p>The <code>Controller.Actions</code> object has properties representing predefined actions on the user&apos;s avatar and Interface. The property values are integer IDs, uniquely identifying each action. <em>Read-only.</em> These can be used as end
points in the routes of a
<a href="MappingObject">MappingObject</a>. The data routed to each action is either a number or a
<a href="global#Pose">Pose</a>.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Data</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4"><strong>Avatar Movement</strong></td>
</tr><tr>
<td><code>TranslateX</code></td>
<td>number</td>
<td>number</td>
<td>Move the user&apos;s avatar in the direction of its x-axis, if the camera isn&apos;t in independent or mirror modes.</td>
</tr>
<tr>
<td><code>TranslateY</code></td>
<td>number</td>
<td>number</td>
<td>Move the user&apos;s avatar in the direction of its y-axis, if the camera isn&apos;t in independent or mirror modes.</td>
</tr>
<tr>
<td><code>TranslateZ</code></td>
<td>number</td>
<td>number</td>
<td>Move the user&apos;s avatar in the direction of its z-axis, if the camera isn&apos;t in independent or mirror modes.</td>
</tr>
<tr>
<td><code>Pitch</code></td>
<td>number</td>
<td>number</td>
<td>Rotate the user&apos;s avatar head and attached camera about its negative x-axis (i.e., positive values pitch down), if the camera isn&apos;t in HMD, independent, or mirror modes.</td>
</tr>
<tr>
<td><code>Yaw</code></td>
<td>number</td>
<td>number</td>
<td>Rotate the user&apos;s avatar about its y-axis, if the camera isn&apos;t in independent or mirror modes.</td>
</tr>
<tr>
<td><code>Roll</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td><code>StepTranslateX</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td><code>StepTranslateY</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td><code>StepTranslateZ</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td><code>StepPitch</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td><code>StepYaw</code></td>
<td>number</td>
<td>number</td>
<td>Rotate the user&apos;s avatar about its y-axis in a step increment, if the camera isn&apos;t in independent or mirror modes.</td>
</tr>
<tr>
<td><code>StepRoll</code></td>
<td>number</td>
<td>number</td>
<td>No action.</td>
</tr>
<tr>
<td colspan="4"><strong>Avatar Skeleton</strong></td>
</tr><tr>
<td><code>Hips</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the hips pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>Spine2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the spine2 pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>Head</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the head pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left arm pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right arm pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left hand pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandThumb1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left thumb 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandThumb2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left thumb 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandThumb3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left thumb 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandThumb4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left thumb 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandIndex1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left index 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandIndex2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left index 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandIndex3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left index 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandIndex4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left index 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandMiddle1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left middle 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandMiddle2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left middle 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandMiddle3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left middle 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandMiddle4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left middle 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandRing1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left ring 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandRing2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left ring 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandRing3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left ring 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandRing4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left ring 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandPinky1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left pinky 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandPinky2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left pinky 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandPinky3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left pinky 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftHandPinky4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left pinky 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right hand of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandThumb1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right thumb 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandThumb2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right thumb 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandThumb3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right thumb 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandThumb4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right thumb 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandIndex1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right index 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandIndex2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right index 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandIndex3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right index 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandIndex4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right index 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandMiddle1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right middle 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandMiddle2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right middle 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandMiddle3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right middle 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandMiddle4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right middle 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandRing1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right ring 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandRing2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right ring 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandRing3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right ring 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandRing4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right ring 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandPinky1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right pinky 1 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandPinky2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right pinky 2 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandPinky3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right pinky 3 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightHandPinky4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right pinky 4 finger joint pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>LeftFoot</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the left foot pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td><code>RightFoot</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Set the right foot pose of the user&apos;s avatar.</td>
</tr>
<tr>
<td colspan="4"><strong><strong>Application</strong></strong></td>
</tr><tr>
<td><code>BoomIn</code></td>
<td>number</td>
<td>number</td>
<td>Zoom camera in from third person toward first person view.</td>
</tr>
<tr>
<td><code>BoomOut</code></td>
<td>number</td>
<td>number</td>
<td>Zoom camera out from first person to third person view.</td>
</tr>
<tr>
<td><code>CycleCamera</code></td>
<td>number</td>
<td>number</td>
<td>Cycle the camera view from first person, to third person, to full screen mirror, then back to first person and repeat.</td>
</tr>
<tr>
<td><code>ContextMenu</code></td>
<td>number</td>
<td>number</td>
<td>Show / hide the tablet.</td>
</tr>
<tr>
<td><code>ToggleMute</code></td>
<td>number</td>
<td>number</td>
<td>Toggle the microphone mute.</td>
</tr>
<tr>
<td><code>ToggleOverlay</code></td>
<td>number</td>
<td>number</td>
<td>Toggle the display of overlays.</td>
</tr>
<tr>
<td><code>Sprint</code></td>
<td>number</td>
<td>number</td>
<td>Set avatar sprint mode.</td>
</tr>
<tr>
<td><code>ReticleClick</code></td>
<td>number</td>
<td>number</td>
<td>Set mouse-pressed.</td>
</tr>
<tr>
<td><code>ReticleX</code></td>
<td>number</td>
<td>number</td>
<td>Move the cursor left/right in the x direction.</td>
</tr>
<tr>
<td><code>ReticleY</code></td>
<td>number</td>
<td>number</td>
<td>move the cursor up/down in the y direction.</td>
</tr>
<tr>
<td><code>ReticleLeft</code></td>
<td>number</td>
<td>number</td>
<td>Move the cursor left.</td>
</tr>
<tr>
<td><code>ReticleRight</code></td>
<td>number</td>
<td>number</td>
<td>Move the cursor right.</td>
</tr>
<tr>
<td><code>ReticleUp</code></td>
<td>number</td>
<td>number</td>
<td>Move the cursor up.</td>
</tr>
<tr>
<td><code>ReticleDown</code></td>
<td>number</td>
<td>number</td>
<td>Move the cursor down.</td>
</tr>
<tr>
<td><code>UiNavLateral</code></td>
<td>number</td>
<td>number</td>
<td>Generate a keyboard left or right arrow key event.</td>
</tr>
<tr>
<td><code>UiNavVertical</code></td>
<td>number</td>
<td>number</td>
<td>Generate a keyboard up or down arrow key event.</td>
</tr>
<tr>
<td><code>UiNavGroup</code></td>
<td>number</td>
<td>number</td>
<td>Generate a keyboard tab or back-tab key event.</td>
</tr>
<tr>
<td><code>UiNavSelect</code></td>
<td>number</td>
<td>number</td>
<td>Generate a keyboard Enter key event.</td>
</tr>
<tr>
<td><code>UiNavBack</code></td>
<td>number</td>
<td>number</td>
<td>Generate a keyboard Esc key event.</td>
</tr>
<tr>
<td><code>LeftHandClick</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>RightHandClick</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>Shift</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>PrimaryAction</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>SecondaryAction</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td colspan="4"><strong>Aliases</strong></td>
</tr><tr>
<td><code>Backward</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateZ</code> in the positive direction.</td>
</tr>
<tr>
<td><code>Forward</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateZ</code> in the negative direction.</td>
</tr>
<tr>
<td><code>StrafeRight</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateX</code> in the positive direction.</td>
</tr>
<tr>
<td><code>StrafeLeft</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateX</code> in the negative direction.</td>
</tr>
<tr>
<td><code>Up</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateY</code> in the positive direction.</td>
</tr>
<tr>
<td><code>Down</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>TranslateY</code> in the negative direction.</td>
</tr>
<tr>
<td><code>PitchDown</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Pitch</code> in the positive direction.</td>
</tr>
<tr>
<td><code>PitchUp</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Pitch</code> in the negative direction.</td>
</tr>
<tr>
<td><code>YawLeft</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Yaw</code> in the positive direction.</td>
</tr>
<tr>
<td><code>YawRight</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Yaw</code> in the negative direction.</td>
</tr>
<tr>
<td colspan="4"><strong>Deprecated Aliases</strong></td>
</tr><tr>
<td><code>LEFT_HAND</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> Use <code>LeftHand</code> instead.</td>
</tr>
<tr>
<td><code>RIGHT_HAND</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> Use <code>RightHand</code> instead.</td>
</tr>
<tr>
<td><code>BOOM_IN</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>BoomIn</code> instead.</td>
</tr>
<tr>
<td><code>BOOM_OUT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>BoomOut</code> instead.</td>
</tr>
<tr>
<td><code>CONTEXT_MENU</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>ContextMenu</code> instead.</td>
</tr>
<tr>
<td><code>TOGGLE_MUTE</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>ToggleMute</code> instead.</td>
</tr>
<tr>
<td><code>SPRINT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Sprint</code> instead.</td>
</tr>
<tr>
<td><code>LONGITUDINAL_BACKWARD</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Backward</code> instead.</td>
</tr>
<tr>
<td><code>LONGITUDINAL_FORWARD</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Forward</code> instead.</td>
</tr>
<tr>
<td><code>LATERAL_LEFT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>StrafeLeft</code> instead.</td>
</tr>
<tr>
<td><code>LATERAL_RIGHT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>StrafeRight</code> instead.</td>
</tr>
<tr>
<td><code>VERTICAL_UP</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Up</code> instead.</td>
</tr>
<tr>
<td><code>VERTICAL_DOWN</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Down</code> instead.</td>
</tr>
<tr>
<td><code>PITCH_DOWN</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>PitchDown</code> instead.</td>
</tr>
<tr>
<td><code>PITCH_UP</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>PitchUp</code> instead.</td>
</tr>
<tr>
<td><code>YAW_LEFT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>YawLeft</code> instead.</td>
</tr>
<tr>
<td><code>YAW_RIGHT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>YawRight</code> instead.</td>
</tr>
<tr>
<td><code>LEFT_HAND_CLICK</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>LeftHandClick</code> instead.</td>
</tr>
<tr>
<td><code>RIGHT_HAND_CLICK</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>RightHandClick</code> instead.</td>
</tr>
<tr>
<td><code>SHIFT</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>Shift</code> instead.</td>
</tr>
<tr>
<td><code>ACTION1</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>PrimaryAction</code> instead.</td>
</tr>
<tr>
<td><code>ACTION2</code></td>
<td>number</td>
<td>number</td>
<td><strong>Deprecated:</strong> Use <code>SecondaryAction</code> instead.</td>
</tr>
<tr>
<td colspan="4"><strong>Deprecated Trackers</strong></td>
</tr><tr>
<td><code>TrackedObject00</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject01</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject02</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject03</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject04</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject05</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject06</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject07</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject08</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject09</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject10</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject11</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject12</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject13</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject14</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
<tr>
<td><code>TrackedObject15</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td><strong>Deprecated:</strong> No action.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
<h4 class="name" id=".Hand">Hand</h4>
<div class="description">
<p>Some controller actions may be associated with one or both hands:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0</code></td>
<td>Left hand.</td>
</tr>
<tr>
<td><code>1</code></td>
<td>Right hand.</td>
</tr>
<tr>
<td><code>2</code></td>
<td>Both hands.</td>
</tr>
</tbody>
</table>
</div>
<h5>Type:</h5>
<ul>
<li> <span class="param-type">number</span></li>
</ul>
<dl class="details"></dl>
<h4 class="name" id=".Hardware">Hardware</h4>
<div class="description">
<p>The <code>Controller.Hardware</code> object has properties representing standard and hardware-specific controller and computer outputs, plus predefined actions on Interface and the user&apos;s avatar. <em>Read-only.</em> The outputs can be mapped
to actions or functions in a
<a href="RouteObject">RouteObject</a> mapping. Additionally, hardware-specific controller outputs can be mapped to standard controller outputs.
</p><p>Controllers typically implement a subset of the
<a href="Controller#.Standard">Controller.Standard</a> controls, plus they may implement some extras. Some common controllers are included in the table. You can see the outputs provided by these and others by viewing their
<a href="Controller#.MappingJSON">MappingJSON</a> files at
<a href="https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers">https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers</a>.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Controller.Hardware.Actions</code></td>
<td>object</td>
<td>Synonym for
<a href="Controller#.Actions">Controller.Actions</a>.</td>
</tr>
<tr>
<td><code>Controller.Hardware.Application</code></td>
<td>object</td>
<td>Interface state outputs. See
<a href="Controller#.Hardware-Application">Controller.Hardware-Application</a>.</td>
</tr>
<tr>
<td><code>Controller.Hardware.Keyboard</code></td>
<td>object</td>
<td>Keyboard, mouse, and touch pad outputs. See
<a href="Controller#.Hardware-Keyboard">Controller.Hardware-Keyboard</a>.</td>
</tr>
<tr>
<td><code>Controller.Hardware.OculusTouch</code></td>
<td>object</td>
<td>Oculus Rift HMD outputs. See
<a href="Controller#.Hardware-OculusTouch">Controller.Hardware-OculusTouch</a>.</td>
</tr>
<tr>
<td><code>Controller.Hardware.Vive</code></td>
<td>object</td>
<td>Vive HMD outputs. See
<a href="Controller#.Hardware-Vive">Controller.Hardware-Vive</a>.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">List all the currently available <code>Controller.Hardware</code> properties.</p><pre class="prettyprint"><code>function printProperties(string, item) {
print(string);
for (var key in item) {
if (item.hasOwnProperty(key)) {
printProperties(string + &quot;.&quot; + key, item[key]);
}
}
}
printProperties(&quot;Controller.Hardware&quot;, Controller.Hardware);
</code></pre>
<h4 class="name" id=".Hardware-Application">Hardware-Application</h4>
<div class="description">
<p>The <code>Controller.Hardware.Application</code> object has properties representing Interface&apos;s state. The property values are integer IDs, uniquely identifying each output. <em>Read-only.</em> These can be mapped to actions or functions or
<code>Controller.Standard</code> items in a
<a href="RouteObject">RouteObject</a> mapping (e.g., using the
<a href="RouteObject#when">RouteObject#when</a> method). Each data value is either <code>1.0</code> for &quot;true&quot; or <code>0.0</code> for &quot;false&quot;.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Data</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>CameraFirstPerson</code></td>
<td>number</td>
<td>number</td>
<td>The camera is in first-person mode.</td>
</tr>
<tr>
<td><code>CameraThirdPerson</code></td>
<td>number</td>
<td>number</td>
<td>The camera is in third-person mode.</td>
</tr>
<tr>
<td><code>CameraFSM</code></td>
<td>number</td>
<td>number</td>
<td>The camera is in full screen mirror mode.</td>
</tr>
<tr>
<td><code>CameraIndependent</code></td>
<td>number</td>
<td>number</td>
<td>The camera is in independent mode.</td>
</tr>
<tr>
<td><code>CameraEntity</code></td>
<td>number</td>
<td>number</td>
<td>The camera is in entity mode.</td>
</tr>
<tr>
<td><code>InHMD</code></td>
<td>number</td>
<td>number</td>
<td>The user is in HMD mode.</td>
</tr>
<tr>
<td><code>AdvancedMovement</code></td>
<td>number</td>
<td>number</td>
<td>Advanced movement controls are enabled.</td>
</tr>
<tr>
<td><code>SnapTurn</code></td>
<td>number</td>
<td>number</td>
<td>Snap turn is enabled.</td>
</tr>
<tr>
<td><code>Grounded</code></td>
<td>number</td>
<td>number</td>
<td>The user&apos;s avatar is on the ground.</td>
</tr>
<tr>
<td><code>NavigationFocused</code></td>
<td>number</td>
<td>number</td>
<td><em>Not used.</em></td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
<h4 class="name" id=".Hardware-Keyboard">Hardware-Keyboard</h4>
<div class="description">
<p>The <code>Controller.Hardware.Keyboard</code> object has properties representing keyboard, mouse, and display touch events. The property values are integer IDs, uniquely identifying each output. <em>Read-only.</em> These can be mapped to actions
or functions or <code>Controller.Standard</code> items in a
<a href="RouteObject">RouteObject</a> mapping. For presses, each data value is either <code>1.0</code> for &quot;true&quot; or <code>0.0</code> for &quot;false&quot;.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<td>Data
</td><th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0</code> &#x2013; <code>9</code></td>
<td>number</td>
<td>number</td>
<td>A &quot;0&quot; &#x2013; &quot;1&quot; key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>A</code> &#x2013; <code>Z</code></td>
<td>number</td>
<td>number</td>
<td>A &quot;A&quot; &#x2013; &quot;Z&quot; key on the keyboard is pressed.</td>
</tr>
<tr>
<td><code>Space</code></td>
<td>number</td>
<td>number</td>
<td>The space bar on the keyboard is pressed.</td>
</tr>
<tr>
<td><code>Tab</code></td>
<td>number</td>
<td>number</td>
<td>The tab key on the keyboard is pressed.</td>
</tr>
<tr>
<td><code>Shift</code></td>
<td>number</td>
<td>number</td>
<td>The shift key on the keyboard is pressed.</td>
</tr>
<tr>
<td><code>Control</code></td>
<td>number</td>
<td>number</td>
<td>The control key on the keyboard is pressed. (The &quot;Command&quot; key on OSX.)</td>
</tr>
<tr>
<td><code>Left</code></td>
<td>number</td>
<td>number</td>
<td>The left arrow key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>Right</code></td>
<td>number</td>
<td>number</td>
<td>The right arrow key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>Up</code></td>
<td>number</td>
<td>number</td>
<td>The up arrow key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>Down</code></td>
<td>number</td>
<td>number</td>
<td>The down arrow key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>PgUp</code></td>
<td>number</td>
<td>number</td>
<td>The page up key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>PgDown</code></td>
<td>number</td>
<td>number</td>
<td>The page down key on the keyboard or keypad is pressed.</td>
</tr>
<tr>
<td><code>LeftMouseButton</code></td>
<td>number</td>
<td>number</td>
<td>The left mouse button pressed.</td>
</tr>
<tr>
<td><code>MiddleMouseButton</code></td>
<td>number</td>
<td>number</td>
<td>The middle mouse button pressed.</td>
</tr>
<tr>
<td><code>RightMouseButton</code></td>
<td>number</td>
<td>number</td>
<td>The right mouse button pressed.</td>
</tr>
<tr>
<td><code>LeftMouseClicked</code></td>
<td>number</td>
<td>number</td>
<td>The left mouse button clicked.</td>
</tr>
<tr>
<td><code>MiddleMouseClicked</code></td>
<td>number</td>
<td>number</td>
<td>The middle mouse button clicked.</td>
</tr>
<tr>
<td><code>RightMouseClicked</code></td>
<td>number</td>
<td>number</td>
<td>The right mouse button clicked.</td>
</tr>
<tr>
<td><code>MouseMoveRight</code></td>
<td>number</td>
<td>number</td>
<td>The mouse moved right.</td>
</tr>
<tr>
<td><code>MouseMoveLeft</code></td>
<td>number</td>
<td>number</td>
<td>The mouse moved left.</td>
</tr>
<tr>
<td><code>MouseMoveUp</code></td>
<td>number</td>
<td>number</td>
<td>The mouse moved up.</td>
</tr>
<tr>
<td><code>MouseMoveDown</code></td>
<td>number</td>
<td>number</td>
<td>The mouse moved down.</td>
</tr>
<tr>
<td><code>MouseX</code></td>
<td>number</td>
<td>number</td>
<td>The mouse x-coordinate changed. The data value is its new x-coordinate value.</td>
</tr>
<tr>
<td><code>MouseY</code></td>
<td>number</td>
<td>number</td>
<td>The mouse y-coordinate changed. The data value is its new y-coordinate value.</td>
</tr>
<tr>
<td><code>MouseWheelRight</code></td>
<td>number</td>
<td>number</td>
<td>The mouse wheel rotated left. The data value is the number of units rotated (typically <code>1.0</code>).</td>
</tr>
<tr>
<td><code>MouseWheelLeft</code></td>
<td>number</td>
<td>number</td>
<td>The mouse wheel rotated left. The data value is the number of units rotated (typically <code>1.0</code>).</td>
</tr>
<tr>
<td><code>MouseWheelUp</code></td>
<td>number</td>
<td>number</td>
<td>The mouse wheel rotated up. The data value is the number of units rotated (typically <code>1.0</code>).</td>
</tr>
<tr>
<td><code>MouseWheelDown</code></td>
<td>number</td>
<td>number</td>
<td>The mouse wheel rotated down. The data value is the number of units rotated (typically <code>1.0</code>).</td>
</tr>
<tr>
<td><code>TouchpadRight</code></td>
<td>number</td>
<td>number</td>
<td>The average touch on a touch-enabled device moved right. The data value is how far the average position of all touch points moved.</td>
</tr>
<tr>
<td><code>TouchpadLeft</code></td>
<td>number</td>
<td>number</td>
<td>The average touch on a touch-enabled device moved left. The data value is how far the average position of all touch points moved.</td>
</tr>
<tr>
<td><code>TouchpadUp</code></td>
<td>number</td>
<td>number</td>
<td>The average touch on a touch-enabled device moved up. The data value is how far the average position of all touch points moved.</td>
</tr>
<tr>
<td><code>TouchpadDown</code></td>
<td>number</td>
<td>number</td>
<td>The average touch on a touch-enabled device moved down. The data value is how far the average position of all touch points moved.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
<dt class="tag-todo">To Do:</dt>
<dd class="tag-todo">
<ul>
<li><em>Currently, the mouse wheel in an ordinary mouse generates left/right wheel events instead of up/down.</em></li>
</ul>
</dd>
</dl>
<h4 class="name" id=".Hardware-OculusTouch">Hardware-OculusTouch</h4>
<div class="description">
<p>The <code>Controller.Hardware.OculusTouch</code> object has properties representing Oculus Rift. The property values are integer IDs, uniquely identifying each output. <em>Read-only.</em> These can be mapped to actions or functions or <code>Controller.Standard</code> items in a
<a href="RouteObject">RouteObject</a> mapping.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Data</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4"><strong>Buttons</strong></td>
</tr>
<tr>
<td><code>A</code></td>
<td>number</td>
<td>number</td>
<td>&quot;A&quot; button pressed.</td>
</tr>
<tr>
<td><code>B</code></td>
<td>number</td>
<td>number</td>
<td>&quot;B&quot; button pressed.</td>
</tr>
<tr>
<td><code>X</code></td>
<td>number</td>
<td>number</td>
<td>&quot;X&quot; button pressed.</td>
</tr>
<tr>
<td><code>Y</code></td>
<td>number</td>
<td>number</td>
<td>&quot;Y&quot; button pressed.</td>
</tr>
<tr>
<td><code>LeftApplicationMenu</code></td>
<td>number</td>
<td>number</td>
<td>Left application menu button pressed.</td>
</tr>
<tr>
<td><code>RightApplicationMenu</code></td>
<td>number</td>
<td>number</td>
<td>Right application menu button pressed.</td>
</tr>
<tr>
<td colspan="4"><strong>Sticks</strong></td>
</tr>
<tr>
<td><code>LX</code></td>
<td>number</td>
<td>number</td>
<td>Left stick x-axis scale.</td>
</tr>
<tr>
<td><code>LY</code></td>
<td>number</td>
<td>number</td>
<td>Left stick y-axis scale.</td>
</tr>
<tr>
<td><code>RX</code></td>
<td>number</td>
<td>number</td>
<td>Right stick x-axis scale.</td>
</tr>
<tr>
<td><code>RY</code></td>
<td>number</td>
<td>number</td>
<td>Right stick y-axis scale.</td>
</tr>
<tr>
<td><code>LS</code></td>
<td>number</td>
<td>number</td>
<td>Left stick button pressed.</td>
</tr>
<tr>
<td><code>RS</code></td>
<td>number</td>
<td>number</td>
<td>Right stick button pressed.</td>
</tr>
<tr>
<td><code>LSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left stick is touched.</td>
</tr>
<tr>
<td><code>RSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right stick is touched.</td>
</tr>
<tr>
<td colspan="4"><strong>Triggers</strong></td>
</tr>
<tr>
<td><code>LT</code></td>
<td>number</td>
<td>number</td>
<td>Left trigger scale.</td>
</tr>
<tr>
<td><code>RT</code></td>
<td>number</td>
<td>number</td>
<td>Right trigger scale.</td>
</tr>
<tr>
<td><code>LeftGrip</code></td>
<td>number</td>
<td>number</td>
<td>Left grip scale.</td>
</tr>
<tr>
<td><code>RightGrip</code></td>
<td>number</td>
<td>number</td>
<td>Right grip scale.</td>
</tr>
<tr>
<td colspan="4"><strong>Finger Abstractions</strong></td>
</tr>
<tr>
<td><code>LeftPrimaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb touching primary thumb button.</td>
</tr>
<tr>
<td><code>LeftSecondaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb touching secondary thumb button.</td>
</tr>
<tr>
<td><code>LeftThumbUp</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb not touching primary or secondary thumb buttons.</td>
</tr>
<tr>
<td><code>RightPrimaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb touching primary thumb button.</td>
</tr>
<tr>
<td><code>RightSecondaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb touching secondary thumb button.</td>
</tr>
<tr>
<td><code>RightThumbUp</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb not touching primary or secondary thumb buttons.</td>
</tr>
<tr>
<td><code>LeftPrimaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left index finger is touching primary index finger control.</td>
</tr>
<tr>
<td><code>LeftIndexPoint</code></td>
<td>number</td>
<td>number</td>
<td>Left index finger is pointing, not touching primary or secondary index finger controls.</td>
</tr>
<tr>
<td><code>RightPrimaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right index finger is touching primary index finger control.</td>
</tr>
<tr>
<td><code>RightIndexPoint</code></td>
<td>number</td>
<td>number</td>
<td>Right index finger is pointing, not touching primary or secondary index finger controls.</td>
</tr>
<tr>
<td colspan="4"><strong>Avatar Skeleton</strong></td>
</tr>
<tr>
<td><code>Head</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Head pose.</td>
</tr>
<tr>
<td><code>LeftHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left hand pose.</td>
</tr>
<tr>
<td><code>RightHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>right hand pose.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
<h4 class="name" id=".Hardware-Vive">Hardware-Vive</h4>
<div class="description">
<p>The <code>Controller.Hardware.Vive</code> object has properties representing Vive. The property values are integer IDs, uniquely identifying each output. <em>Read-only.</em> These can be mapped to actions or functions or <code>Controller.Standard</code> items in a
<a href="RouteObject">RouteObject</a> mapping.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Data</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4"><strong>Touch Pad (Sticks)</strong></td>
</tr>
<tr>
<td><code>LX</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad x-axis scale.</td>
</tr>
<tr>
<td><code>LY</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad y-axis scale.</td>
</tr>
<tr>
<td><code>RX</code></td>
<td>number</td>
<td>number</td>
<td>Right stick x-axis scale.</td>
</tr>
<tr>
<td><code>RY</code></td>
<td>number</td>
<td>number</td>
<td>Right stick y-axis scale.</td>
</tr>
<tr>
<td><code>LS</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad pressed.</td>
</tr>
<tr>
<td><code>LS_CENTER</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad center pressed.</td>
</tr>
<tr>
<td><code>LS_X</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad pressed x-coordinate.</td>
</tr>
<tr>
<td><code>LS_Y</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad pressed y-coordinate.</td>
</tr>
<tr>
<td><code>RS</code></td>
<td>number</td>
<td>number</td>
<td>Right touch pad pressed.</td>
</tr>
<tr>
<td><code>RS_CENTER</code></td>
<td>number</td>
<td>number</td>
<td>Right touch pad center pressed.</td>
</tr>
<tr>
<td><code>RS_X</code></td>
<td>number</td>
<td>number</td>
<td>Right touch pad pressed x-coordinate.</td>
</tr>
<tr>
<td><code>RS_Y</code></td>
<td>number</td>
<td>number</td>
<td>Right touch pad pressed y-coordinate.</td>
</tr>
<tr>
<td><code>LSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left touch pad is touched.</td>
</tr>
<tr>
<td><code>RSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right touch pad is touched.</td>
</tr>
<tr>
<td colspan="4"><strong>Triggers</strong></td>
</tr>
<tr>
<td><code>LT</code></td>
<td>number</td>
<td>number</td>
<td>Left trigger scale.</td>
</tr>
<tr>
<td><code>RT</code></td>
<td>number</td>
<td>number</td>
<td>Right trigger scale.</td>
</tr>
<tr>
<td><code>LTClick</code></td>
<td>number</td>
<td>number</td>
<td>Left trigger click.</td>
</tr>
<tr>
<td><code>RTClick</code></td>
<td>number</td>
<td>number</td>
<td>Right trigger click.</td>
</tr>
<tr>
<td><code>LeftGrip</code></td>
<td>number</td>
<td>number</td>
<td>Left grip scale.</td>
</tr>
<tr>
<td><code>RightGrip</code></td>
<td>number</td>
<td>number</td>
<td>Right grip scale.</td>
</tr>
<tr>
<td colspan="4"><strong>Avatar Skeleton</strong></td>
</tr>
<tr>
<td><code>Hips</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Hips pose.</td>
</tr>
<tr>
<td><code>Spine2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Spine2 pose.</td>
</tr>
<tr>
<td><code>Head</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Head pose.</td>
</tr>
<tr>
<td><code>LeftArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left arm pose.</td>
</tr>
<tr>
<td><code>RightArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right arm pose</td>
</tr>
<tr>
<td><code>LeftHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left hand pose.</td>
</tr>
<tr>
<td><code>RightHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right hand pose.</td>
</tr>
<tr>
<td colspan="4"><strong>Trackers</strong></td>
</tr>
<tr>
<td><code>TrackedObject00</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 0 pose.</td>
</tr>
<tr>
<td><code>TrackedObject01</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 1 pose.</td>
</tr>
<tr>
<td><code>TrackedObject02</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 2 pose.</td>
</tr>
<tr>
<td><code>TrackedObject03</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 3 pose.</td>
</tr>
<tr>
<td><code>TrackedObject04</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 4 pose.</td>
</tr>
<tr>
<td><code>TrackedObject05</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 5 pose.</td>
</tr>
<tr>
<td><code>TrackedObject06</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 6 pose.</td>
</tr>
<tr>
<td><code>TrackedObject07</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 7 pose.</td>
</tr>
<tr>
<td><code>TrackedObject08</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 8 pose.</td>
</tr>
<tr>
<td><code>TrackedObject09</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 9 pose.</td>
</tr>
<tr>
<td><code>TrackedObject10</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 10 pose.</td>
</tr>
<tr>
<td><code>TrackedObject11</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 11 pose.</td>
</tr>
<tr>
<td><code>TrackedObject12</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 12 pose.</td>
</tr>
<tr>
<td><code>TrackedObject13</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 13 pose.</td>
</tr>
<tr>
<td><code>TrackedObject14</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 14 pose.</td>
</tr>
<tr>
<td><code>TrackedObject15</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 15 pose.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
<h4 class="name" id=".MappingJSON">MappingJSON</h4>
<div class="description"> A
<a href="MappingObject">MappingObject</a> can be specified in JSON format. A simple example is provided below. Full examples &#x2014; the default mappings provided in Interface &#x2014; can be found at
<a href="https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers">https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers</a>.</div>
<h5>Type:</h5>
<ul>
<li> <span class="param-type">object</span></li>
</ul>
<h4 class="subsection-title">Properties:</h4>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>name</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="description last">The name of the mapping.</td>
</tr>
<tr>
<td class="name"><code>channels</code></td>
<td class="type"> <span class="param-type">Array.&lt;<a href="Controller#.MappingJSONRoute">Controller.MappingJSONRoute</a>&gt;</span></td>
<td class="description last">An array of routes.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">A simple mapping JSON that makes the right trigger move your avatar up after a dead zone.</p><pre class="prettyprint"><code>{
&quot;name&quot;: &quot;com.highfidelity.controllers.example.jsonMapping&quot;,
&quot;channels&quot;: [
{
&quot;from&quot;: &quot;Standard.RT&quot;,
&quot;filters&quot;: { &quot;type&quot;: &quot;deadZone&quot;, &quot;min&quot;: 0.05 },
&quot;to&quot;: &quot;Actions.TranslateY&quot;
}
]
}</code></pre>
<h4 class="name" id=".MappingJSONAxis">MappingJSONAxis</h4>
<div class="description"> An axis pair in a
<a href="Controller#.MappingJSONRoute">Controller.MappingJSONRoute</a>.</div>
<h5>Type:</h5>
<ul>
<li> <span class="param-type">object</span></li>
</ul>
<h4 class="subsection-title">Properties:</h4>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>makeAxis</code></td>
<td class="type"> <span class="param-type">Array.&lt;Array.&lt;string&gt;&gt;</span></td>
<td class="description last">A two-member array of single-member arrays of
<a href="Controller#.Hardware">Controller.Hardware</a> property names. The leading <code>&quot;Controller.Hardware.&quot;</code> can be omitted from the property names.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">An axis using the keyboard&apos;s left and right keys.</p><pre class="prettyprint"><code>{ &quot;makeAxis&quot; : [
[&quot;Keyboard.Left&quot;],
[&quot;Keyboard.Right&quot;]
]
}</code></pre>
<h4 class="name" id=".MappingJSONFilter">MappingJSONFilter</h4>
<div class="description"> A filter in a
<a href="Controller#.MappingJSONRoute">Controller.MappingJSONRoute</a>.</div>
<h5>Type:</h5>
<ul>
<li> <span class="param-type">object</span></li>
</ul>
<h4 class="subsection-title">Properties:</h4>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>type</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="attributes"></td>
<td class="description last">The name of the filter, being the name of the one of the
<a href="RouteObject">RouteObject</a>&apos;s filter methods.</td>
</tr>
<tr>
<td class="name"><code>?</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="description last">If the filter method has a first parameter, the property name is the name of that parameter and the property value is the value to use.</td>
</tr>
<tr>
<td class="name"><code>?</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="description last">If the filter method has a second parameter, the property name is the name of that parameter and the property value is the value to use.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h5>Example</h5>
<p class="code-caption">A hysteresis filter.</p><pre class="prettyprint"><code>{
&quot;type&quot;: &quot;hysteresis&quot;,
&quot;min&quot;: 0.85,
&quot;max&quot;: 0.9
}</code></pre>
<h4 class="name" id=".MappingJSONRoute">MappingJSONRoute</h4>
<div class="description"> A route in a
<a href="Controller#.MappingJSON">Controller.MappingJSON</a>.</div>
<h5>Type:</h5>
<ul>
<li> <span class="param-type">object</span></li>
</ul>
<h4 class="subsection-title">Properties:</h4>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>from</code></td>
<td class="type"> <span class="param-type">string</span> | <span class="param-type"><a href="Controller#.MappingJSONAxis">Controller.MappingJSONAxis</a></span></td>
<td class="attributes"></td>
<td class="default"></td>
<td class="description last">The name of a
<a href="Controller#.Hardware">Controller.Hardware</a> property name or an axis made from them. If a property name, the leading <code>&quot;Controller.Hardware.&quot;</code> can be omitted.</td>
</tr>
<tr>
<td class="name"><code>peek</code></td>
<td class="type"> <span class="param-type">boolean</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> false</td>
<td class="description last">If
<codd>true then peeking is enabled per
<a href="RouteObject#peek">RouteObject#peek</a>.</codd></td>
</tr>
<tr>
<td class="name"><code>debug</code></td>
<td class="type"> <span class="param-type">boolean</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> false</td>
<td class="description last">If <code>true</code> then debug is enabled per
<a href="RouteObject#debug">RouteObject#debug</a>.</td>
</tr>
<tr>
<td class="name"><code>when</code></td>
<td class="type"> <span class="param-type">string</span> | <span class="param-type">Array.&lt;string&gt;</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> []</td>
<td class="description last">One or more numeric
<a href="Controller#.Hardware">Controller.Hardware</a> property names which are evaluated as booleans and ANDed together. Prepend with a <code>!</code> to use the logical NOT of the property value. The leading <code>&quot;Controller.Hardware.&quot;</code> can be omitted from
the property names.</td>
</tr>
<tr>
<td class="name"><code>filters</code></td>
<td class="type"> <span class="param-type"><a href="Controller#.MappingJSONFilter">Controller.MappingJSONFilter</a></span> | <span class="param-type">Array.&lt;<a href="Controller#.MappingJSONFilter">Controller.MappingJSONFilter</a>&gt;</span></td>
<td class="attributes"> &lt;optional&gt;
<br>
</td>
<td class="default"> []</td>
<td class="description last">One or more filters in the route.</td>
</tr>
<tr>
<td class="name"><code>to</code></td>
<td class="type"> <span class="param-type">string</span></td>
<td class="attributes"></td>
<td class="default"></td>
<td class="description last">The name of a
<a href="Controller#.Actions">Controller.Actions</a> or
<a href="Controller#.Standard">Controller.Standard</a> property. The leading <code>&quot;Controller.&quot;</code> can be omitted.</td>
</tr>
</tbody>
</table>
<dl class="details"></dl>
<h4 class="name" id=".Standard">Standard</h4>
<div class="description">
<p>The <code>Controller.Standard</code> object has properties representing standard controller outputs. Those for physical controllers are based on the XBox controller, with aliases for PlayStation. The property values are integer IDs, uniquely
identifying each output. <em>Read-only.</em> These can be mapped to actions or functions in a
<a href="RouteObject">RouteObject</a> mapping.</p>
<p>The data value provided by each control is either a number or a
<a href="global#Pose">Pose</a>. Numbers are typically normalized to <code>0.0</code> or <code>1.0</code> for button states, the range <code>0.0 &#x2013; 1.0</code> for unidirectional scales, and the range <code>-1.0 &#x2013; 1.0</code> for bidirectional scales.</p>
<p>Each hardware device has a mapping from its outputs to <code>Controller.Standard</code> items, specified in a JSON file. For example,
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/leapmotion.json">leapmotion.json</a> and
<a href="https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/vive.json">vive.json</a>.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Type</th>
<th>Data</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4"><strong>Buttons</strong></td>
</tr>
<tr>
<td><code>A</code></td>
<td>number</td>
<td>number</td>
<td>&quot;A&quot; button pressed.</td>
</tr>
<tr>
<td><code>B</code></td>
<td>number</td>
<td>number</td>
<td>&quot;B&quot; button pressed.</td>
</tr>
<tr>
<td><code>X</code></td>
<td>number</td>
<td>number</td>
<td>&quot;X&quot; button pressed.</td>
</tr>
<tr>
<td><code>Y</code></td>
<td>number</td>
<td>number</td>
<td>&quot;Y&quot; button pressed.</td>
</tr>
<tr>
<td><code>DL</code></td>
<td>number</td>
<td>number</td>
<td>D-pad left pressed.</td>
</tr>
<tr>
<td><code>DR</code></td>
<td>number</td>
<td>number</td>
<td>D-pad right pressed.</td>
</tr>
<tr>
<td><code>DU</code></td>
<td>number</td>
<td>number</td>
<td>D-pad up pressed.</td>
</tr>
<tr>
<td><code>DD</code></td>
<td>number</td>
<td>number</td>
<td>D-pad down pressed.</td>
</tr>
<tr>
<td><code>Start</code></td>
<td>number</td>
<td>number</td>
<td>&quot;Start&quot; center button pressed.</td>
</tr>
<tr>
<td><code>Back</code></td>
<td>number</td>
<td>number</td>
<td>&quot;Back&quot; center button pressed.</td>
</tr>
<tr>
<td><code>LB</code></td>
<td>number</td>
<td>number</td>
<td>Left bumper button pressed.</td>
</tr>
<tr>
<td><code>RB</code></td>
<td>number</td>
<td>number</td>
<td>Right bumper button pressed.</td>
</tr>
<tr>
<td colspan="4"><strong>Sticks</strong></td>
</tr>
<tr>
<td><code>LX</code></td>
<td>number</td>
<td>number</td>
<td>Left stick x-axis scale.</td>
</tr>
<tr>
<td><code>LY</code></td>
<td>number</td>
<td>number</td>
<td>Left stick y-axis scale.</td>
</tr>
<tr>
<td><code>RX</code></td>
<td>number</td>
<td>number</td>
<td>Right stick x-axis scale.</td>
</tr>
<tr>
<td><code>RY</code></td>
<td>number</td>
<td>number</td>
<td>Right stick y-axis scale.</td>
</tr>
<tr>
<td><code>LS</code></td>
<td>number</td>
<td>number</td>
<td>Left stick button pressed.</td>
</tr>
<tr>
<td><code>RS</code></td>
<td>number</td>
<td>number</td>
<td>Right stick button pressed.</td>
</tr>
<tr>
<td><code>LSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left stick is touched.</td>
</tr>
<tr>
<td><code>RSTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right stick is touched.</td>
</tr>
<tr>
<td colspan="4"><strong>Triggers</strong></td>
</tr>
<tr>
<td><code>LT</code></td>
<td>number</td>
<td>number</td>
<td>Left trigger scale.</td>
</tr>
<tr>
<td><code>RT</code></td>
<td>number</td>
<td>number</td>
<td>Right trigger scale.</td>
</tr>
<tr>
<td><code>LTClick</code></td>
<td>number</td>
<td>number</td>
<td>Left trigger click.</td>
</tr>
<tr>
<td><code>RTClick</code></td>
<td>number</td>
<td>number</td>
<td>Right trigger click.</td>
</tr>
<tr>
<td><code>LeftGrip</code></td>
<td>number</td>
<td>number</td>
<td>Left grip scale.</td>
</tr>
<tr>
<td><code>RightGrip</code></td>
<td>number</td>
<td>number</td>
<td>Right grip scale.</td>
</tr>
<tr>
<td><code>LeftGripTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left grip is touched.</td>
</tr>
<tr>
<td><code>RightGripTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right grip is touched.</td>
</tr>
<tr>
<td colspan="4"><strong>Aliases, PlayStation Style Names</strong></td>
</tr>
<tr>
<td><code>Cross</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>A</code>.</td>
</tr>
<tr>
<td><code>Circle</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>B</code>.</td>
</tr>
<tr>
<td><code>Square</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>X</code>.</td>
</tr>
<tr>
<td><code>Triangle</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Y</code>.</td>
</tr>
<tr>
<td><code>Left</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>DL</code>.</td>
</tr>
<tr>
<td><code>Right</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>DR</code>.</td>
</tr>
<tr>
<td><code>Up</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>DU</code>.</td>
</tr>
<tr>
<td><code>Down</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>DD</code>.</td>
</tr>
<tr>
<td><code>Select</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>Back</code>.</td>
</tr>
<tr>
<td><code>L1</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>LB</code>.</td>
</tr>
<tr>
<td><code>R1</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>RB</code>.</td>
</tr>
<tr>
<td><code>L3</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>LS</code>.</td>
</tr>
<tr>
<td><code>R3</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>RS</code>.</td>
</tr>
<tr>
<td><code>L2</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>LT</code>.</td>
</tr>
<tr>
<td><code>R2</code></td>
<td>number</td>
<td>number</td>
<td>Alias for <code>RT</code>.</td>
</tr>
<tr>
<td colspan="4"><strong>Finger Abstractions</strong></td>
</tr>
<tr>
<td><code>LeftPrimaryThumb</code></td>
<td>number</td>
<td>number</td>
<td>Left primary thumb button pressed.</td>
</tr>
<tr>
<td><code>LeftSecondaryThumb</code></td>
<td>number</td>
<td>number</td>
<td>Left secondary thumb button pressed.</td>
</tr>
<tr>
<td><code>RightPrimaryThumb</code></td>
<td>number</td>
<td>number</td>
<td>Right primary thumb button pressed.</td>
</tr>
<tr>
<td><code>RightSecondaryThumb</code></td>
<td>number</td>
<td>number</td>
<td>Right secondary thumb button pressed.</td>
</tr>
<tr>
<td><code>LeftPrimaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb touching primary thumb button.</td>
</tr>
<tr>
<td><code>LeftSecondaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb touching secondary thumb button.</td>
</tr>
<tr>
<td><code>LeftThumbUp</code></td>
<td>number</td>
<td>number</td>
<td>Left thumb not touching primary or secondary thumb buttons.</td>
</tr>
<tr>
<td><code>RightPrimaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb touching primary thumb button.</td>
</tr>
<tr>
<td><code>RightSecondaryThumbTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb touching secondary thumb button.</td>
</tr>
<tr>
<td><code>RightThumbUp</code></td>
<td>number</td>
<td>number</td>
<td>Right thumb not touching primary or secondary thumb buttons.</td>
</tr>
<tr>
<td><code>LeftPrimaryIndex</code></td>
<td>number</td>
<td>number</td>
<td>Left primary index control pressed. <strong>To Do:</strong> <em>Implement this for current controllers.</em></td>
</tr>
<tr>
<td><code>LeftSecondaryIndex</code></td>
<td>number</td>
<td>number</td>
<td>Left secondary index control pressed.</td>
</tr>
<tr>
<td><code>RightPrimaryIndex</code></td>
<td>number</td>
<td>number</td>
<td>Right primary index control pressed. <strong>To Do:</strong> <em>Implement this for current controllers.</em></td>
</tr>
<tr>
<td><code>RightSecondaryIndex</code></td>
<td>number</td>
<td>number</td>
<td>Right secondary index control pressed.</td>
</tr>
<tr>
<td><code>LeftPrimaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left index finger is touching primary index finger control.</td>
</tr>
<tr>
<td><code>LeftSecondaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Left index finger is touching secondary index finger control.</td>
</tr>
<tr>
<td><code>LeftIndexPoint</code></td>
<td>number</td>
<td>number</td>
<td>Left index finger is pointing, not touching primary or secondary index finger controls.</td>
</tr>
<tr>
<td><code>RightPrimaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right index finger is touching primary index finger control.</td>
</tr>
<tr>
<td><code>RightSecondaryIndexTouch</code></td>
<td>number</td>
<td>number</td>
<td>Right index finger is touching secondary index finger control.</td>
</tr>
<tr>
<td><code>RightIndexPoint</code></td>
<td>number</td>
<td>number</td>
<td>Right index finger is pointing, not touching primary or secondary index finger controls.</td>
</tr>
<tr>
<td colspan="4"><strong>Avatar Skeleton</strong></td>
</tr>
<tr>
<td><code>Hips</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Hips pose.</td>
</tr>
<tr>
<td><code>Spine2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Spine2 pose.</td>
</tr>
<tr>
<td><code>Head</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Head pose.</td>
</tr>
<tr>
<td><code>LeftArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left arm pose.</td>
</tr>
<tr>
<td><code>RightArm</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right arm pose</td>
</tr>
<tr>
<td><code>LeftHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left hand pose.</td>
</tr>
<tr>
<td><code>LeftHandThumb1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left thumb 1 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandThumb2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left thumb 2 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandThumb3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left thumb 3 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandThumb4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left thumb 4 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandIndex1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left index 1 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandIndex2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left index 2 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandIndex3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left index 3 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandIndex4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left index 4 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandMiddle1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left middle 1 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandMiddle2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left middle 2 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandMiddle3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left middle 3 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandMiddle4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left middle 4 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandRing1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left ring 1 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandRing2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left ring 2 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandRing3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left ring 3 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandRing4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left ring 4 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandPinky1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left pinky 1 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandPinky2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left pinky 2 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandPinky3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left pinky 3 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftHandPinky4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left pinky 4 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHand</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right hand pose.</td>
</tr>
<tr>
<td><code>RightHandThumb1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right thumb 1 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandThumb2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right thumb 2 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandThumb3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right thumb 3 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandThumb4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right thumb 4 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandIndex1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right index 1 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandIndex2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right index 2 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandIndex3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right index 3 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandIndex4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right index 4 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandMiddle1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right middle 1 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandMiddle2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right middle 2 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandMiddle3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right middle 3 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandMiddle4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right middle 4 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandRing1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right ring 1 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandRing2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right ring 2 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandRing3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right ring 3 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandRing4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right ring 4 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandPinky1</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right pinky 1 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandPinky2</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right pinky 2 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandPinky3</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right pinky 3 finger joint pose.</td>
</tr>
<tr>
<td><code>RightHandPinky4</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right pinky 4 finger joint pose.</td>
</tr>
<tr>
<td><code>LeftFoot</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Left foot pose.</td>
</tr>
<tr>
<td><code>RightFoot</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Right foot pose.</td>
</tr>
<tr>
<td colspan="4"><strong>Trackers</strong></td>
</tr>
<tr>
<td><code>TrackedObject00</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 0 pose.</td>
</tr>
<tr>
<td><code>TrackedObject01</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 1 pose.</td>
</tr>
<tr>
<td><code>TrackedObject02</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 2 pose.</td>
</tr>
<tr>
<td><code>TrackedObject03</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 3 pose.</td>
</tr>
<tr>
<td><code>TrackedObject04</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 4 pose.</td>
</tr>
<tr>
<td><code>TrackedObject05</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 5 pose.</td>
</tr>
<tr>
<td><code>TrackedObject06</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 6 pose.</td>
</tr>
<tr>
<td><code>TrackedObject07</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 7 pose.</td>
</tr>
<tr>
<td><code>TrackedObject08</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 8 pose.</td>
</tr>
<tr>
<td><code>TrackedObject09</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 9 pose.</td>
</tr>
<tr>
<td><code>TrackedObject10</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 10 pose.</td>
</tr>
<tr>
<td><code>TrackedObject11</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 11 pose.</td>
</tr>
<tr>
<td><code>TrackedObject12</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 12 pose.</td>
</tr>
<tr>
<td><code>TrackedObject13</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 13 pose.</td>
</tr>
<tr>
<td><code>TrackedObject14</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 14 pose.</td>
</tr>
<tr>
<td><code>TrackedObject15</code></td>
<td>number</td>
<td>
<a href="global#Pose">Pose</a>
</td>
<td>Tracker 15 pose.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details"></dl>
</article>
</section>