forked from highfidelity/hifi-content
-
Notifications
You must be signed in to change notification settings - Fork 0
/
hifiVsCode.json
1870 lines (1868 loc) · 478 KB
/
hifiVsCode.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[
{"Agent":{"prefix":"Agent","body":["Agent"],"description":"<table><tr><th>Available in:</th><td>Assignment Client Scripts</td></tr></table><br>"}},
{"Agent.setIsAvatar":{"prefix":"Agent.setIsAvatar","body":["Agent.setIsAvatar(${1:isAvatar: boolean})"]}},
{"Agent.isAvatar":{"prefix":"Agent.isAvatar","body":["Agent.isAvatar"]}},
{"Agent.playAvatarSound":{"prefix":"Agent.playAvatarSound","body":["Agent.playAvatarSound(${1:avatarSound: object})"]}},
{"Avatar":{"prefix":"Avatar","body":["Avatar"],"description":"<table><tr><th>Available in:</th><td>Assignment Client Scripts</td></tr></table><br>The <code>Avatar</code> API is used to manipulate scriptable avatars on the domain. This API is a subset of the \r{@link MyAvatar} API.\r\r<p><strong>Note:</strong> In the examples, use \"<code>Avatar</code>\" instead of \"<code>MyAvatar</code>\".</p>"}},
{"Avatar.startAnimation":{"prefix":"Avatar.startAnimation","body":["Avatar.startAnimation(${1:url: string},${2:fps: number},${3:priority: number},${4:loop: boolean},${5:hold: boolean},${6:firstFrame: number},${7:lastFrame: number},${8:maskedJoints: Array.<string>})"]}},
{"Avatar.stopAnimation":{"prefix":"Avatar.stopAnimation","body":["Avatar.stopAnimation"]}},
{"Avatar.getAnimationDetails":{"prefix":"Avatar.getAnimationDetails","body":["Avatar.getAnimationDetails"]}},
{"EntityViewer":{"prefix":"EntityViewer","body":["EntityViewer"],"description":"<table><tr><th>Available in:</th><td>Assignment Client Scripts</td></tr></table><br>"}},
{"EntityViewer.queryOctree":{"prefix":"EntityViewer.queryOctree","body":["EntityViewer.queryOctree"]}},
{"EntityViewer.setPosition":{"prefix":"EntityViewer.setPosition","body":["EntityViewer.setPosition(${1:position: Vec3})"]}},
{"EntityViewer.setOrientation":{"prefix":"EntityViewer.setOrientation","body":["EntityViewer.setOrientation(${1:orientation: Quat})"]}},
{"EntityViewer.setCenterRadius":{"prefix":"EntityViewer.setCenterRadius","body":["EntityViewer.setCenterRadius(${1:radius: number})"]}},
{"EntityViewer.setKeyholeRadius":{"prefix":"EntityViewer.setKeyholeRadius","body":["EntityViewer.setKeyholeRadius(${1:radius: number})"]}},
{"EntityViewer.setVoxelSizeScale":{"prefix":"EntityViewer.setVoxelSizeScale","body":["EntityViewer.setVoxelSizeScale(${1:sizeScale: number})"]}},
{"EntityViewer.setBoundaryLevelAdjust":{"prefix":"EntityViewer.setBoundaryLevelAdjust","body":["EntityViewer.setBoundaryLevelAdjust(${1:boundaryLevelAdjust: number})"]}},
{"EntityViewer.setMaxPacketsPerSecond":{"prefix":"EntityViewer.setMaxPacketsPerSecond","body":["EntityViewer.setMaxPacketsPerSecond(${1:maxPacketsPerSecond: number})"]}},
{"EntityViewer.getPosition":{"prefix":"EntityViewer.getPosition","body":["EntityViewer.getPosition"]}},
{"EntityViewer.getOrientation":{"prefix":"EntityViewer.getOrientation","body":["EntityViewer.getOrientation"]}},
{"EntityViewer.getVoxelSizeScale":{"prefix":"EntityViewer.getVoxelSizeScale","body":["EntityViewer.getVoxelSizeScale"]}},
{"EntityViewer.getBoundaryLevelAdjust":{"prefix":"EntityViewer.getBoundaryLevelAdjust","body":["EntityViewer.getBoundaryLevelAdjust"]}},
{"EntityViewer.getMaxPacketsPerSecond":{"prefix":"EntityViewer.getMaxPacketsPerSecond","body":["EntityViewer.getMaxPacketsPerSecond"]}},
{"EntityViewer.getOctreeElementsCount":{"prefix":"EntityViewer.getOctreeElementsCount","body":["EntityViewer.getOctreeElementsCount"]}},
{"HifiAbout":{"prefix":"HifiAbout","body":["HifiAbout"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"HifiAbout.openUrl":{"prefix":"HifiAbout.openUrl","body":["HifiAbout.openUrl(${1:url: string})"]}},
{"Controller.Hardware-Application":{"prefix":"Controller.Hardware-Application","body":["Controller.Hardware-Application"],"description":"<p>The <code>Controller.Hardware.Application</code> object has properties representing Interface's state. The property\rvalues are integer IDs, uniquely identifying each output. <em>Read-only.</em> These can be mapped to actions or functions or\r<code>Controller.Standard</code> items in a {@link RouteObject} mapping (e.g., using the {@link RouteObject#when} method).\rEach data value is either <code>1.0</code> for \"true\" or <code>0.0</code> for \"false\".</p>\r<table>\r <thead>\r <tr><th>Property</th><th>Type</th><th>Data</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>CameraFirstPerson</code></td><td>number</td><td>number</td><td>The camera is in first-person mode.\r </td></tr>\r <tr><td><code>CameraThirdPerson</code></td><td>number</td><td>number</td><td>The camera is in third-person mode.\r </td></tr>\r <tr><td><code>CameraFSM</code></td><td>number</td><td>number</td><td>The camera is in full screen mirror mode.</td></tr>\r <tr><td><code>CameraIndependent</code></td><td>number</td><td>number</td><td>The camera is in independent mode.</td></tr>\r <tr><td><code>CameraEntity</code></td><td>number</td><td>number</td><td>The camera is in entity mode.</td></tr>\r <tr><td><code>InHMD</code></td><td>number</td><td>number</td><td>The user is in HMD mode.</td></tr>\r <tr><td><code>AdvancedMovement</code></td><td>number</td><td>number</td><td>Advanced movement controls are enabled.\r </td></tr>\r <tr><td><code>SnapTurn</code></td><td>number</td><td>number</td><td>Snap turn is enabled.</td></tr>\r <tr><td><code>Grounded</code></td><td>number</td><td>number</td><td>The user's avatar is on the ground.</td></tr>\r <tr><td><code>NavigationFocused</code></td><td>number</td><td>number</td><td><em>Not used.</em></td></tr>\r </tbody>\r</table>"}},
{"AvatarBookmarks":{"prefix":"AvatarBookmarks","body":["AvatarBookmarks"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>This API helps manage adding and deleting avatar bookmarks."}},
{"AvatarBookmarks.addBookMark":{"prefix":"AvatarBookmarks.addBookMark","body":["AvatarBookmarks.addBookMark"],"description":"Add the current Avatar to your avatar bookmarks."}},
{"AvatarBookmarks.bookmarkLoaded":{"prefix":"AvatarBookmarks.bookmarkLoaded","body":["AvatarBookmarks.bookmarkLoaded(${1:bookmarkName: string})"],"description":"This function gets triggered after avatar loaded from bookmark"}},
{"AvatarBookmarks.bookmarkDeleted":{"prefix":"AvatarBookmarks.bookmarkDeleted","body":["AvatarBookmarks.bookmarkDeleted(${1:bookmarkName: string})"],"description":"This function gets triggered after avatar bookmark deleted"}},
{"AvatarBookmarks.bookmarkAdded":{"prefix":"AvatarBookmarks.bookmarkAdded","body":["AvatarBookmarks.bookmarkAdded(${1:bookmarkName: string})"],"description":"This function gets triggered after avatar bookmark added"}},
{"AvatarBookmarks.deleteBookmark":{"prefix":"AvatarBookmarks.deleteBookmark","body":["AvatarBookmarks.deleteBookmark"]}},
{"LocationBookmarks.deleteBookmark":{"prefix":"LocationBookmarks.deleteBookmark","body":["LocationBookmarks.deleteBookmark"]}},
{"Camera.getCameraEntity":{"prefix":"Camera.getCameraEntity","body":["Camera.getCameraEntity"],"description":"Get the ID of the entity that the camera is set to use the position and orientation from when it's in entity mode. You can\r also get the entity ID using the <code>Camera.cameraEntity</code> property."}},
{"Camera.setCameraEntity":{"prefix":"Camera.setCameraEntity","body":["Camera.setCameraEntity(${1:entityID: Uuid})"],"description":"Set the entity that the camera should use the position and orientation from when it's in entity mode. You can also set the\r entity using the <code>Camera.cameraEntity</code> property."}},
{"LocationBookmarks":{"prefix":"LocationBookmarks","body":["LocationBookmarks"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"LocationBookmarks.addBookmark":{"prefix":"LocationBookmarks.addBookmark","body":["LocationBookmarks.addBookmark"]}},
{"LocationBookmarks.setHomeLocationToAddress":{"prefix":"LocationBookmarks.setHomeLocationToAddress","body":["LocationBookmarks.setHomeLocationToAddress(${1:address: string})"]}},
{"LODManager":{"prefix":"LODManager","body":["LODManager"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The LOD class manages your Level of Detail functions within Interface."}},
{"LODManager.setAutomaticLODAdjust":{"prefix":"LODManager.setAutomaticLODAdjust","body":["LODManager.setAutomaticLODAdjust(${1:value: boolean})"]}},
{"LODManager.getAutomaticLODAdjust":{"prefix":"LODManager.getAutomaticLODAdjust","body":["LODManager.getAutomaticLODAdjust"]}},
{"LODManager.setDesktopLODTargetFPS":{"prefix":"LODManager.setDesktopLODTargetFPS","body":["LODManager.setDesktopLODTargetFPS(${1:value: number})"]}},
{"LODManager.getDesktopLODTargetFPS":{"prefix":"LODManager.getDesktopLODTargetFPS","body":["LODManager.getDesktopLODTargetFPS"]}},
{"LODManager.setHMDLODTargetFPS":{"prefix":"LODManager.setHMDLODTargetFPS","body":["LODManager.setHMDLODTargetFPS(${1:value: number})"]}},
{"LODManager.getHMDLODTargetFPS":{"prefix":"LODManager.getHMDLODTargetFPS","body":["LODManager.getHMDLODTargetFPS"]}},
{"LODManager.getLODFeedbackText":{"prefix":"LODManager.getLODFeedbackText","body":["LODManager.getLODFeedbackText"]}},
{"LODManager.setOctreeSizeScale":{"prefix":"LODManager.setOctreeSizeScale","body":["LODManager.setOctreeSizeScale(${1:sizeScale: number})"]}},
{"LODManager.getOctreeSizeScale":{"prefix":"LODManager.getOctreeSizeScale","body":["LODManager.getOctreeSizeScale"]}},
{"LODManager.setBoundaryLevelAdjust":{"prefix":"LODManager.setBoundaryLevelAdjust","body":["LODManager.setBoundaryLevelAdjust(${1:boundaryLevelAdjust: number})"]}},
{"LODManager.getBoundaryLevelAdjust":{"prefix":"LODManager.getBoundaryLevelAdjust","body":["LODManager.getBoundaryLevelAdjust"]}},
{"LODManager.getLODTargetFPS":{"prefix":"LODManager.getLODTargetFPS","body":["LODManager.getLODTargetFPS"]}},
{"LODManager.LODIncreased":{"prefix":"LODManager.LODIncreased","body":["LODManager.LODIncreased"]}},
{"LODManager.LODDecreased":{"prefix":"LODManager.LODDecreased","body":["LODManager.LODDecreased"]}},
{"SpeechRecognizer":{"prefix":"SpeechRecognizer","body":["SpeechRecognizer"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"SpeechRecognizer.setEnabled":{"prefix":"SpeechRecognizer.setEnabled","body":["SpeechRecognizer.setEnabled(${1:enabled: boolean})"]}},
{"SpeechRecognizer.addCommand":{"prefix":"SpeechRecognizer.addCommand","body":["SpeechRecognizer.addCommand(${1:command: string})"]}},
{"SpeechRecognizer.removeCommand":{"prefix":"SpeechRecognizer.removeCommand","body":["SpeechRecognizer.removeCommand(${1:command: string})"]}},
{"SpeechRecognizer.commandRecognized":{"prefix":"SpeechRecognizer.commandRecognized","body":["SpeechRecognizer.commandRecognized(${1:command: string})"]}},
{"SpeechRecognizer.enabledUpdated":{"prefix":"SpeechRecognizer.enabledUpdated","body":["SpeechRecognizer.enabledUpdated(${1:enabled: boolean})"]}},
{"AudioScope":{"prefix":"AudioScope","body":["AudioScope"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The AudioScope API helps control the Audio Scope features in Interface"}},
{"AudioScope.toggle":{"prefix":"AudioScope.toggle","body":["AudioScope.toggle"]}},
{"AudioScope.setVisible":{"prefix":"AudioScope.setVisible","body":["AudioScope.setVisible(${1:visible: boolean})"]}},
{"AudioScope.getVisible":{"prefix":"AudioScope.getVisible","body":["AudioScope.getVisible"]}},
{"AudioScope.togglePause":{"prefix":"AudioScope.togglePause","body":["AudioScope.togglePause"]}},
{"AudioScope.setPause":{"prefix":"AudioScope.setPause","body":["AudioScope.setPause(${1:paused: boolean})"]}},
{"AudioScope.getPause":{"prefix":"AudioScope.getPause","body":["AudioScope.getPause"]}},
{"AudioScope.toggleTrigger":{"prefix":"AudioScope.toggleTrigger","body":["AudioScope.toggleTrigger"]}},
{"AudioScope.getAutoTrigger":{"prefix":"AudioScope.getAutoTrigger","body":["AudioScope.getAutoTrigger"]}},
{"AudioScope.setAutoTrigger":{"prefix":"AudioScope.setAutoTrigger","body":["AudioScope.setAutoTrigger(${1:autoTrigger: boolean})"]}},
{"AudioScope.setTriggerValues":{"prefix":"AudioScope.setTriggerValues","body":["AudioScope.setTriggerValues(${1:x: number},${2:y: number})"]}},
{"AudioScope.setTriggered":{"prefix":"AudioScope.setTriggered","body":["AudioScope.setTriggered(${1:triggered: boolean})"]}},
{"AudioScope.getTriggered":{"prefix":"AudioScope.getTriggered","body":["AudioScope.getTriggered"]}},
{"AudioScope.getFramesPerSecond":{"prefix":"AudioScope.getFramesPerSecond","body":["AudioScope.getFramesPerSecond"]}},
{"AudioScope.getFramesPerScope":{"prefix":"AudioScope.getFramesPerScope","body":["AudioScope.getFramesPerScope"]}},
{"AudioScope.selectAudioScopeFiveFrames":{"prefix":"AudioScope.selectAudioScopeFiveFrames","body":["AudioScope.selectAudioScopeFiveFrames"]}},
{"AudioScope.selectAudioScopeTwentyFrames":{"prefix":"AudioScope.selectAudioScopeTwentyFrames","body":["AudioScope.selectAudioScopeTwentyFrames"]}},
{"AudioScope.selectAudioScopeFiftyFrames":{"prefix":"AudioScope.selectAudioScopeFiftyFrames","body":["AudioScope.selectAudioScopeFiftyFrames"]}},
{"AudioScope.getScopeInput":{"prefix":"AudioScope.getScopeInput","body":["AudioScope.getScopeInput"]}},
{"AudioScope.getScopeOutputLeft":{"prefix":"AudioScope.getScopeOutputLeft","body":["AudioScope.getScopeOutputLeft"]}},
{"AudioScope.getScopeOutputRight":{"prefix":"AudioScope.getScopeOutputRight","body":["AudioScope.getScopeOutputRight"]}},
{"AudioScope.getTriggerInput":{"prefix":"AudioScope.getTriggerInput","body":["AudioScope.getTriggerInput"]}},
{"AudioScope.getTriggerOutputLeft":{"prefix":"AudioScope.getTriggerOutputLeft","body":["AudioScope.getTriggerOutputLeft"]}},
{"AudioScope.getTriggerOutputRight":{"prefix":"AudioScope.getTriggerOutputRight","body":["AudioScope.getTriggerOutputRight"]}},
{"AudioScope.setLocalEcho":{"prefix":"AudioScope.setLocalEcho","body":["AudioScope.setLocalEcho"]}},
{"AudioScope.setServerEcho":{"prefix":"AudioScope.setServerEcho","body":["AudioScope.setServerEcho"]}},
{"AudioScope.pauseChanged":{"prefix":"AudioScope.pauseChanged","body":["AudioScope.pauseChanged"]}},
{"AudioScope.triggered":{"prefix":"AudioScope.triggered","body":["AudioScope.triggered"]}},
{"Entities.ActionArguments-FarGrab":{"prefix":"Entities.ActionArguments-FarGrab","body":["Entities.ActionArguments-FarGrab"],"description":"The <code>\"far-grab\"</code> {@link Entities.ActionType|ActionType} moves and rotates an entity to a target position and \rorientation, optionally relative to another entity. Collisions between the entity and the user's avatar are disabled during \rthe far-grab.\rIt has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}."}},
{"Entities.ActionArguments-Hold":{"prefix":"Entities.ActionArguments-Hold","body":["Entities.ActionArguments-Hold"],"description":"The <code>\"hold\"</code> {@link Entities.ActionType|ActionType} positions and rotates an entity relative to an avatar's hand. \rCollisions between the entity and the user's avatar are disabled during the hold.\rIt has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}."}},
{"AvatarManager":{"prefix":"AvatarManager","body":["AvatarManager"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The AvatarManager API has properties and methods which manage Avatars within the same domain.\r\r<p><strong>Note:</strong> This API is also provided to Interface and client entity scripts as the synonym, \r<code>AvatarList</code>. For assignment client scripts, see the separate {@link AvatarList} API."}},
{"AvatarManager.getAvatar":{"prefix":"AvatarManager.getAvatar","body":["AvatarManager.getAvatar(${1:avatarID: Uuid})"]}},
{"AvatarManager.getAvatarDataRate":{"prefix":"AvatarManager.getAvatarDataRate","body":["AvatarManager.getAvatarDataRate(${1:sessionID: Uuid},${2:rateName: string})"]}},
{"AvatarManager.getAvatarUpdateRate":{"prefix":"AvatarManager.getAvatarUpdateRate","body":["AvatarManager.getAvatarUpdateRate(${1:sessionID: Uuid},${2:rateName: string})"]}},
{"AvatarManager.getAvatarSimulationRate":{"prefix":"AvatarManager.getAvatarSimulationRate","body":["AvatarManager.getAvatarSimulationRate(${1:sessionID: Uuid},${2:rateName: string})"]}},
{"AvatarManager.findRayIntersection":{"prefix":"AvatarManager.findRayIntersection","body":["AvatarManager.findRayIntersection(${1:ray: PickRay},${2:avatarsToInclude: Array.<Uuid>},${3:avatarsToDiscard: Array.<Uuid>})"]}},
{"AvatarManager.findRayIntersectionVector":{"prefix":"AvatarManager.findRayIntersectionVector","body":["AvatarManager.findRayIntersectionVector(${1:ray: PickRay},${2:avatarsToInclude: Array.<Uuid>},${3:avatarsToDiscard: Array.<Uuid>})"]}},
{"AvatarManager.getAvatarSortCoefficient":{"prefix":"AvatarManager.getAvatarSortCoefficient","body":["AvatarManager.getAvatarSortCoefficient(${1:name: string})"]}},
{"AvatarManager.setAvatarSortCoefficient":{"prefix":"AvatarManager.setAvatarSortCoefficient","body":["AvatarManager.setAvatarSortCoefficient(${1:name: string},${2:value: number})"]}},
{"AvatarManager.getPalData":{"prefix":"AvatarManager.getPalData","body":["AvatarManager.getPalData(${1:specificAvatarIdentifiers: Array.<string>})"],"description":"Used in the PAL for getting PAL-related data about avatars nearby. Using this method is faster\rthan iterating over each avatar and obtaining data about them in JavaScript, as that method\rlocks and unlocks each avatar's data structure potentially hundreds of times per update tick."}},
{"AvatarManager.updateAvatarRenderStatus":{"prefix":"AvatarManager.updateAvatarRenderStatus","body":["AvatarManager.updateAvatarRenderStatus(${1:shouldRenderAvatars: boolean})"]}},
{"MyAvatar":{"prefix":"MyAvatar","body":["MyAvatar"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>Your avatar is your in-world representation of you. The <code>MyAvatar</code> API is used to manipulate the avatar.\rFor example, you can customize the avatar's appearance, run custom avatar animations,\rchange the avatar's position within the domain, or manage the avatar's collisions with other objects."}},
{"MyAvatar.resetSensorsAndBody":{"prefix":"MyAvatar.resetSensorsAndBody","body":["MyAvatar.resetSensorsAndBody"]}},
{"MyAvatar.centerBody":{"prefix":"MyAvatar.centerBody","body":["MyAvatar.centerBody"],"description":"Moves and orients the avatar, such that it is directly underneath the HMD, with toes pointed forward."}},
{"MyAvatar.clearIKJointLimitHistory":{"prefix":"MyAvatar.clearIKJointLimitHistory","body":["MyAvatar.clearIKJointLimitHistory"],"description":"The internal inverse-kinematics system maintains a record of which joints are \"locked\". Sometimes it is useful to forget this history, to prevent\rcontorted joints."}},
{"MyAvatar.setOrientationVar":{"prefix":"MyAvatar.setOrientationVar","body":["MyAvatar.setOrientationVar(${1:newOrientationVar: object})"]}},
{"MyAvatar.getOrientationVar":{"prefix":"MyAvatar.getOrientationVar","body":["MyAvatar.getOrientationVar"]}},
{"MyAvatar.getDefaultEyePosition":{"prefix":"MyAvatar.getDefaultEyePosition","body":["MyAvatar.getDefaultEyePosition"],"description":"Get the position in world coordinates of the point directly between your avatar's eyes assuming your avatar was in its\rdefault pose. This is a reference position; it does not change as your avatar's head moves relative to the avatar \rposition."}},
{"MyAvatar.overrideAnimation":{"prefix":"MyAvatar.overrideAnimation","body":["MyAvatar.overrideAnimation(${1:url: string},${2:fps: number},${3:loop: boolean},${4:firstFrame: number},${5:lastFrame: number})"],"description":"The avatar animation system includes a set of default animations along with rules for how those animations are blended\rtogether with procedural data (such as look at vectors, hand sensors etc.). overrideAnimation() is used to completely\roverride all motion from the default animation system (including inverse kinematics for hand and head controllers) and\rplay a set of specified animations. To end these animations and restore the default animations, use \r{@link MyAvatar.restoreAnimation}.<br />\r<p>Note: When using pre-built animation data, it's critical that the joint orientation of the source animation and target \rrig are equivalent, since the animation data applies absolute values onto the joints. If the orientations are different, \rthe avatar will move in unpredictable ways. For more information about avatar joint orientation standards, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>.</p>"}},
{"MyAvatar.restoreAnimation":{"prefix":"MyAvatar.restoreAnimation","body":["MyAvatar.restoreAnimation"],"description":"The avatar animation system includes a set of default animations along with rules for how those animations are blended together with\rprocedural data (such as look at vectors, hand sensors etc.). Playing your own custom animations will override the default animations.\rrestoreAnimation() is used to restore all motion from the default animation system including inverse kinematics for hand and head\rcontrollers. If you aren't currently playing an override animation, this function will have no effect."}},
{"MyAvatar.getAnimationRoles":{"prefix":"MyAvatar.getAnimationRoles","body":["MyAvatar.getAnimationRoles"],"description":"Each avatar has an avatar-animation.json file that defines which animations are used and how they are blended together with procedural data\r(such as look at vectors, hand sensors etc.). Each animation specified in the avatar-animation.json file is known as an animation role.\rAnimation roles map to easily understandable actions that the avatar can perform, such as \"idleStand\", \"idleTalk\", or \"walkFwd.\"\rgetAnimationRoles() is used get the list of animation roles defined in the avatar-animation.json."}},
{"MyAvatar.overrideRoleAnimation":{"prefix":"MyAvatar.overrideRoleAnimation","body":["MyAvatar.overrideRoleAnimation(${1:role: string},${2:url: string},${3:fps: number},${4:loop: boolean},${5:firstFrame: number},${6:lastFrame: number})"],"description":"Each avatar has an avatar-animation.json file that defines a set of animation roles. Animation roles map to easily understandable actions\rthat the avatar can perform, such as \"idleStand\", \"idleTalk\", or \"walkFwd\". To get the full list of roles, use getAnimationRoles().\rFor each role, the avatar-animation.json defines when the animation is used, the animation clip (.FBX) used, and how animations are blended\rtogether with procedural data (such as look at vectors, hand sensors etc.).\roverrideRoleAnimation() is used to change the animation clip (.FBX) associated with a specified animation role. To end \rthe animations and restore the default animations, use {@link MyAvatar.restoreRoleAnimation}.<br />\r<p>Note: Hand roles only affect the hand. Other 'main' roles, like 'idleStand', 'idleTalk', 'takeoffStand' are full body.</p>\r<p>Note: When using pre-built animation data, it's critical that the joint orientation of the source animation and target\rrig are equivalent, since the animation data applies absolute values onto the joints. If the orientations are different,\rthe avatar will move in unpredictable ways. For more information about avatar joint orientation standards, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>."}},
{"MyAvatar.restoreRoleAnimation":{"prefix":"MyAvatar.restoreRoleAnimation","body":["MyAvatar.restoreRoleAnimation(${1:role: string})"],"description":"Each avatar has an avatar-animation.json file that defines a set of animation roles. Animation roles map to easily understandable actions that\rthe avatar can perform, such as \"idleStand\", \"idleTalk\", or \"walkFwd\". To get the full list of roles, use getAnimationRoles(). For each role,\rthe avatar-animation.json defines when the animation is used, the animation clip (.FBX) used, and how animations are blended together with\rprocedural data (such as look at vectors, hand sensors etc.). You can change the animation clip (.FBX) associated with a specified animation\rrole using overrideRoleAnimation().\rrestoreRoleAnimation() is used to restore a specified animation role's default animation clip. If you have not specified an override animation\rfor the specified role, this function will have no effect."}},
{"MyAvatar.removeAnimationStateHandler":{"prefix":"MyAvatar.removeAnimationStateHandler","body":["MyAvatar.removeAnimationStateHandler(${1:handler: number})"]}},
{"MyAvatar.getSnapTurn":{"prefix":"MyAvatar.getSnapTurn","body":["MyAvatar.getSnapTurn"]}},
{"MyAvatar.setSnapTurn":{"prefix":"MyAvatar.setSnapTurn","body":["MyAvatar.setSnapTurn(${1:on: boolean})"]}},
{"MyAvatar.setDominantHand":{"prefix":"MyAvatar.setDominantHand","body":["MyAvatar.setDominantHand(${1:hand: string})"]}},
{"MyAvatar.getDominantHand":{"prefix":"MyAvatar.getDominantHand","body":["MyAvatar.getDominantHand"]}},
{"MyAvatar.setCenterOfGravityModelEnabled":{"prefix":"MyAvatar.setCenterOfGravityModelEnabled","body":["MyAvatar.setCenterOfGravityModelEnabled(${1:enabled: boolean})"]}},
{"MyAvatar.getCenterOfGravityModelEnabled":{"prefix":"MyAvatar.getCenterOfGravityModelEnabled","body":["MyAvatar.getCenterOfGravityModelEnabled"]}},
{"MyAvatar.setHMDLeanRecenterEnabled":{"prefix":"MyAvatar.setHMDLeanRecenterEnabled","body":["MyAvatar.setHMDLeanRecenterEnabled(${1:enabled: boolean})"]}},
{"MyAvatar.getHMDLeanRecenterEnabled":{"prefix":"MyAvatar.getHMDLeanRecenterEnabled","body":["MyAvatar.getHMDLeanRecenterEnabled"]}},
{"MyAvatar.requestEnableHandTouch":{"prefix":"MyAvatar.requestEnableHandTouch","body":["MyAvatar.requestEnableHandTouch"],"description":"Request to enable hand touch effect globally"}},
{"MyAvatar.requestDisableHandTouch":{"prefix":"MyAvatar.requestDisableHandTouch","body":["MyAvatar.requestDisableHandTouch"],"description":"Request to disable hand touch effect globally"}},
{"MyAvatar.disableHandTouchForID":{"prefix":"MyAvatar.disableHandTouchForID","body":["MyAvatar.disableHandTouchForID(${1:entityID: Uuid})"],"description":"Disables hand touch effect on a specific entity"}},
{"MyAvatar.enableHandTouchForID":{"prefix":"MyAvatar.enableHandTouchForID","body":["MyAvatar.enableHandTouchForID(${1:entityID: Uuid})"],"description":"Enables hand touch effect on a specific entity"}},
{"MyAvatar.getRawDriveKey":{"prefix":"MyAvatar.getRawDriveKey","body":["MyAvatar.getRawDriveKey(${1:key: DriveKeys})"]}},
{"MyAvatar.disableDriveKey":{"prefix":"MyAvatar.disableDriveKey","body":["MyAvatar.disableDriveKey(${1:key: DriveKeys})"]}},
{"MyAvatar.enableDriveKey":{"prefix":"MyAvatar.enableDriveKey","body":["MyAvatar.enableDriveKey(${1:key: DriveKeys})"]}},
{"MyAvatar.isDriveKeyDisabled":{"prefix":"MyAvatar.isDriveKeyDisabled","body":["MyAvatar.isDriveKeyDisabled(${1:key: DriveKeys})"]}},
{"MyAvatar.triggerVerticalRecenter":{"prefix":"MyAvatar.triggerVerticalRecenter","body":["MyAvatar.triggerVerticalRecenter"],"description":"Recenter the avatar in the vertical direction, if <code>{@link MyAvatar|MyAvatar.hmdLeanRecenterEnabled}</code> is \r<code>false</code>."}},
{"MyAvatar.triggerRotationRecenter":{"prefix":"MyAvatar.triggerRotationRecenter","body":["MyAvatar.triggerRotationRecenter"],"description":"Recenter the avatar's rotation, if <code>{@link MyAvatar|MyAvatar.hmdLeanRecenterEnabled}</code> is <code>false</code>."}},
{"MyAvatar.isRecenteringHorizontally":{"prefix":"MyAvatar.isRecenteringHorizontally","body":["MyAvatar.isRecenteringHorizontally"],"description":"The isRecenteringHorizontally function returns true if MyAvatar\ris translating the root of the Avatar to keep the center of gravity under the head.\risActive(Horizontal) is returned."}},
{"MyAvatar.getHeadPosition":{"prefix":"MyAvatar.getHeadPosition","body":["MyAvatar.getHeadPosition"],"description":"Get the current position of the avatar's \"Head\" joint."}},
{"MyAvatar.getHeadFinalYaw":{"prefix":"MyAvatar.getHeadFinalYaw","body":["MyAvatar.getHeadFinalYaw"]}},
{"MyAvatar.getHeadFinalRoll":{"prefix":"MyAvatar.getHeadFinalRoll","body":["MyAvatar.getHeadFinalRoll"]}},
{"MyAvatar.getHeadFinalPitch":{"prefix":"MyAvatar.getHeadFinalPitch","body":["MyAvatar.getHeadFinalPitch"]}},
{"MyAvatar.getHeadDeltaPitch":{"prefix":"MyAvatar.getHeadDeltaPitch","body":["MyAvatar.getHeadDeltaPitch"]}},
{"MyAvatar.getEyePosition":{"prefix":"MyAvatar.getEyePosition","body":["MyAvatar.getEyePosition"],"description":"Get the current position of the point directly between the avatar's eyes."}},
{"MyAvatar.getTargetAvatarPosition":{"prefix":"MyAvatar.getTargetAvatarPosition","body":["MyAvatar.getTargetAvatarPosition"]}},
{"MyAvatar.getTargetAvatar":{"prefix":"MyAvatar.getTargetAvatar","body":["MyAvatar.getTargetAvatar"]}},
{"MyAvatar.getLeftHandPosition":{"prefix":"MyAvatar.getLeftHandPosition","body":["MyAvatar.getLeftHandPosition"],"description":"Get the position of the avatar's left hand as positioned by a hand controller (e.g., Oculus Touch or Vive).<br />\r<p>Note: The Leap Motion isn't part of the hand controller input system. (Instead, it manipulates the avatar's joints \rfor hand animation.)</p>"}},
{"MyAvatar.getRightHandPosition":{"prefix":"MyAvatar.getRightHandPosition","body":["MyAvatar.getRightHandPosition"],"description":"Get the position of the avatar's right hand as positioned by a hand controller (e.g., Oculus Touch or Vive).<br />\r<p>Note: The Leap Motion isn't part of the hand controller input system. (Instead, it manipulates the avatar's joints \rfor hand animation.)</p>"}},
{"MyAvatar.getLeftHandTipPosition":{"prefix":"MyAvatar.getLeftHandTipPosition","body":["MyAvatar.getLeftHandTipPosition"]}},
{"MyAvatar.getRightHandTipPosition":{"prefix":"MyAvatar.getRightHandTipPosition","body":["MyAvatar.getRightHandTipPosition"]}},
{"MyAvatar.getLeftHandPose":{"prefix":"MyAvatar.getLeftHandPose","body":["MyAvatar.getLeftHandPose"],"description":"Get the pose (position, rotation, velocity, and angular velocity) of the avatar's left hand as positioned by a \rhand controller (e.g., Oculus Touch or Vive).<br />\r<p>Note: The Leap Motion isn't part of the hand controller input system. (Instead, it manipulates the avatar's joints \rfor hand animation.) If you are using the Leap Motion, the return value's <code>valid</code> property will be \r<code>false</code> and any pose values returned will not be meaningful.</p>"}},
{"MyAvatar.getRightHandPose":{"prefix":"MyAvatar.getRightHandPose","body":["MyAvatar.getRightHandPose"],"description":"Get the pose (position, rotation, velocity, and angular velocity) of the avatar's left hand as positioned by a \rhand controller (e.g., Oculus Touch or Vive).<br />\r<p>Note: The Leap Motion isn't part of the hand controller input system. (Instead, it manipulates the avatar's joints \rfor hand animation.) If you are using the Leap Motion, the return value's <code>valid</code> property will be \r<code>false</code> and any pose values returned will not be meaningful.</p>"}},
{"MyAvatar.getLeftHandTipPose":{"prefix":"MyAvatar.getLeftHandTipPose","body":["MyAvatar.getLeftHandTipPose"]}},
{"MyAvatar.getRightHandTipPose":{"prefix":"MyAvatar.getRightHandTipPose","body":["MyAvatar.getRightHandTipPose"]}},
{"MyAvatar.worldToJointPoint":{"prefix":"MyAvatar.worldToJointPoint","body":["MyAvatar.worldToJointPoint(${1:position: Vec3},${2:jointIndex: number})"]}},
{"MyAvatar.worldToJointDirection":{"prefix":"MyAvatar.worldToJointDirection","body":["MyAvatar.worldToJointDirection(${1:direction: Vec3},${2:jointIndex: number})"]}},
{"MyAvatar.worldToJointRotation":{"prefix":"MyAvatar.worldToJointRotation","body":["MyAvatar.worldToJointRotation(${1:rotation: Quat},${2:jointIndex: number})"]}},
{"MyAvatar.jointToWorldPoint":{"prefix":"MyAvatar.jointToWorldPoint","body":["MyAvatar.jointToWorldPoint(${1:position: vec3},${2:jointIndex: number})"]}},
{"MyAvatar.jointToWorldDirection":{"prefix":"MyAvatar.jointToWorldDirection","body":["MyAvatar.jointToWorldDirection(${1:direction: Vec3},${2:jointIndex: number})"]}},
{"MyAvatar.jointToWorldRotation":{"prefix":"MyAvatar.jointToWorldRotation","body":["MyAvatar.jointToWorldRotation(${1:rotation: Quat},${2:jointIndex: number})"]}},
{"MyAvatar.pinJoint":{"prefix":"MyAvatar.pinJoint","body":["MyAvatar.pinJoint(${1:index: number},${2:position: Vec3},${3:orientation: Quat})"]}},
{"MyAvatar.clearPinOnJoint":{"prefix":"MyAvatar.clearPinOnJoint","body":["MyAvatar.clearPinOnJoint(${1:index: number})"]}},
{"MyAvatar.getIKErrorOnLastSolve":{"prefix":"MyAvatar.getIKErrorOnLastSolve","body":["MyAvatar.getIKErrorOnLastSolve"]}},
{"MyAvatar.useFullAvatarURL":{"prefix":"MyAvatar.useFullAvatarURL","body":["MyAvatar.useFullAvatarURL(${1:fullAvatarURL: string},${2:modelName: string})"]}},
{"MyAvatar.getFullAvatarURLFromPreferences":{"prefix":"MyAvatar.getFullAvatarURLFromPreferences","body":["MyAvatar.getFullAvatarURLFromPreferences"],"description":"Get the complete URL for the current avatar."}},
{"MyAvatar.getFullAvatarModelName":{"prefix":"MyAvatar.getFullAvatarModelName","body":["MyAvatar.getFullAvatarModelName"],"description":"Get the full avatar model name for the current avatar."}},
{"MyAvatar.getAvatarEntitiesVariant()":{"prefix":"MyAvatar.getAvatarEntitiesVariant()","body":["MyAvatar.getAvatarEntitiesVariant()"],"description":"Function returns list of avatar entities"}},
{"MyAvatar.isFlying":{"prefix":"MyAvatar.isFlying","body":["MyAvatar.isFlying"]}},
{"MyAvatar.isInAir":{"prefix":"MyAvatar.isInAir","body":["MyAvatar.isInAir"]}},
{"MyAvatar.setFlyingEnabled":{"prefix":"MyAvatar.setFlyingEnabled","body":["MyAvatar.setFlyingEnabled(${1:enabled: boolean})"]}},
{"MyAvatar.getFlyingEnabled":{"prefix":"MyAvatar.getFlyingEnabled","body":["MyAvatar.getFlyingEnabled"]}},
{"MyAvatar.setFlyingDesktopPref":{"prefix":"MyAvatar.setFlyingDesktopPref","body":["MyAvatar.setFlyingDesktopPref(${1:enabled: boolean})"]}},
{"MyAvatar.getFlyingDesktopPref":{"prefix":"MyAvatar.getFlyingDesktopPref","body":["MyAvatar.getFlyingDesktopPref"]}},
{"MyAvatar.setFlyingDesktopPref":{"prefix":"MyAvatar.setFlyingDesktopPref","body":["MyAvatar.setFlyingDesktopPref(${1:enabled: boolean})"]}},
{"MyAvatar.getFlyingDesktopPref":{"prefix":"MyAvatar.getFlyingDesktopPref","body":["MyAvatar.getFlyingDesktopPref"]}},
{"MyAvatar.getAvatarScale":{"prefix":"MyAvatar.getAvatarScale","body":["MyAvatar.getAvatarScale"]}},
{"MyAvatar.setAvatarScale":{"prefix":"MyAvatar.setAvatarScale","body":["MyAvatar.setAvatarScale(${1:scale: number})"]}},
{"MyAvatar.setCollisionsEnabled":{"prefix":"MyAvatar.setCollisionsEnabled","body":["MyAvatar.setCollisionsEnabled(${1:enabled: boolean})"]}},
{"MyAvatar.getCollisionsEnabled":{"prefix":"MyAvatar.getCollisionsEnabled","body":["MyAvatar.getCollisionsEnabled"]}},
{"MyAvatar.getCollisionCapsule":{"prefix":"MyAvatar.getCollisionCapsule","body":["MyAvatar.getCollisionCapsule"]}},
{"MyAvatar.setCharacterControllerEnabled":{"prefix":"MyAvatar.setCharacterControllerEnabled","body":["MyAvatar.setCharacterControllerEnabled(${1:enabled: boolean})"]}},
{"MyAvatar.getCharacterControllerEnabled":{"prefix":"MyAvatar.getCharacterControllerEnabled","body":["MyAvatar.getCharacterControllerEnabled"]}},
{"MyAvatar.isUp":{"prefix":"MyAvatar.isUp","body":["MyAvatar.isUp(${1:direction: Vec3})"]}},
{"MyAvatar.isDown":{"prefix":"MyAvatar.isDown","body":["MyAvatar.isDown(${1:direction: Vec3})"]}},
{"MyAvatar.increaseSize":{"prefix":"MyAvatar.increaseSize","body":["MyAvatar.increaseSize"],"description":"Increase the avatar's scale by five percent, up to a minimum scale of <code>1000</code>."}},
{"MyAvatar.decreaseSize":{"prefix":"MyAvatar.decreaseSize","body":["MyAvatar.decreaseSize"],"description":"Decrease the avatar's scale by five percent, down to a minimum scale of <code>0.25</code>."}},
{"MyAvatar.resetSize":{"prefix":"MyAvatar.resetSize","body":["MyAvatar.resetSize"],"description":"Reset the avatar's scale back to the default scale of <code>1.0</code>."}},
{"MyAvatar.animGraphLoaded":{"prefix":"MyAvatar.animGraphLoaded","body":["MyAvatar.animGraphLoaded"]}},
{"MyAvatar.setGravity":{"prefix":"MyAvatar.setGravity","body":["MyAvatar.setGravity(${1:gravity: number})"]}},
{"MyAvatar.getGravity":{"prefix":"MyAvatar.getGravity","body":["MyAvatar.getGravity"]}},
{"MyAvatar.goToFeetLocation":{"prefix":"MyAvatar.goToFeetLocation","body":["MyAvatar.goToFeetLocation(${1:position: Vec3},${2:hasOrientation: boolean},${3:orientation: Quat},${4:shouldFaceLocation: boolean})"],"description":"Move the avatar to a new position and/or orientation in the domain, while taking into account Avatar leg-length."}},
{"MyAvatar.goToLocation":{"prefix":"MyAvatar.goToLocation","body":["MyAvatar.goToLocation(${1:position: Vec3},${2:hasOrientation: boolean},${3:orientation: Quat},${4:shouldFaceLocation: boolean},${5:withSafeLanding: boolean})"],"description":"Move the avatar to a new position and/or orientation in the domain."}},
{"MyAvatar.goToLocation":{"prefix":"MyAvatar.goToLocation","body":["MyAvatar.goToLocation(${1:properties: object})"]}},
{"MyAvatar.goToLocationAndEnableCollisions":{"prefix":"MyAvatar.goToLocationAndEnableCollisions","body":["MyAvatar.goToLocationAndEnableCollisions(${1:position: Vec3})"]}},
{"MyAvatar.safeLanding":{"prefix":"MyAvatar.safeLanding","body":["MyAvatar.safeLanding(${1:position: Vec3})"]}},
{"MyAvatar.restrictScaleFromDomainSettings":{"prefix":"MyAvatar.restrictScaleFromDomainSettings","body":["MyAvatar.restrictScaleFromDomainSettings(${1:domainSettingsObject: objecct})"]}},
{"MyAvatar.clearScaleRestriction":{"prefix":"MyAvatar.clearScaleRestriction","body":["MyAvatar.clearScaleRestriction"]}},
{"MyAvatar.addThrust":{"prefix":"MyAvatar.addThrust","body":["MyAvatar.addThrust(${1:thrust: Vec3})"]}},
{"MyAvatar.getThrust":{"prefix":"MyAvatar.getThrust","body":["MyAvatar.getThrust"]}},
{"MyAvatar.setThrust":{"prefix":"MyAvatar.setThrust","body":["MyAvatar.setThrust(${1:thrust: Vec3})"]}},
{"MyAvatar.updateMotionBehaviorFromMenu":{"prefix":"MyAvatar.updateMotionBehaviorFromMenu","body":["MyAvatar.updateMotionBehaviorFromMenu"]}},
{"MyAvatar.setToggleHips":{"prefix":"MyAvatar.setToggleHips","body":["MyAvatar.setToggleHips(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawBaseOfSupport":{"prefix":"MyAvatar.setEnableDebugDrawBaseOfSupport","body":["MyAvatar.setEnableDebugDrawBaseOfSupport(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawDefaultPose":{"prefix":"MyAvatar.setEnableDebugDrawDefaultPose","body":["MyAvatar.setEnableDebugDrawDefaultPose(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawAnimPose":{"prefix":"MyAvatar.setEnableDebugDrawAnimPose","body":["MyAvatar.setEnableDebugDrawAnimPose(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawPosition":{"prefix":"MyAvatar.setEnableDebugDrawPosition","body":["MyAvatar.setEnableDebugDrawPosition(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawHandControllers":{"prefix":"MyAvatar.setEnableDebugDrawHandControllers","body":["MyAvatar.setEnableDebugDrawHandControllers(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawSensorToWorldMatrix":{"prefix":"MyAvatar.setEnableDebugDrawSensorToWorldMatrix","body":["MyAvatar.setEnableDebugDrawSensorToWorldMatrix(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawIKTargets":{"prefix":"MyAvatar.setEnableDebugDrawIKTargets","body":["MyAvatar.setEnableDebugDrawIKTargets(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawIKConstraints":{"prefix":"MyAvatar.setEnableDebugDrawIKConstraints","body":["MyAvatar.setEnableDebugDrawIKConstraints(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawIKChains":{"prefix":"MyAvatar.setEnableDebugDrawIKChains","body":["MyAvatar.setEnableDebugDrawIKChains(${1:enabled: boolean})"]}},
{"MyAvatar.setEnableDebugDrawDetailedCollision":{"prefix":"MyAvatar.setEnableDebugDrawDetailedCollision","body":["MyAvatar.setEnableDebugDrawDetailedCollision(${1:enabled: boolean})"]}},
{"MyAvatar.getEnableMeshVisible":{"prefix":"MyAvatar.getEnableMeshVisible","body":["MyAvatar.getEnableMeshVisible"],"description":"Get whether or not your avatar mesh is visible."}},
{"MyAvatar.setEnableMeshVisible":{"prefix":"MyAvatar.setEnableMeshVisible","body":["MyAvatar.setEnableMeshVisible(${1:visible: boolean})"],"description":"Set whether or not your avatar mesh is visible."}},
{"MyAvatar.setEnableInverseKinematics":{"prefix":"MyAvatar.setEnableInverseKinematics","body":["MyAvatar.setEnableInverseKinematics(${1:enabled: boolean})"]}},
{"MyAvatar.getAnimGraphOverrideUrl":{"prefix":"MyAvatar.getAnimGraphOverrideUrl","body":["MyAvatar.getAnimGraphOverrideUrl"]}},
{"MyAvatar.setAnimGraphOverrideUrl":{"prefix":"MyAvatar.setAnimGraphOverrideUrl","body":["MyAvatar.setAnimGraphOverrideUrl(${1:url: string})"]}},
{"MyAvatar.getAnimGraphUrl":{"prefix":"MyAvatar.getAnimGraphUrl","body":["MyAvatar.getAnimGraphUrl"]}},
{"MyAvatar.setAnimGraphUrl":{"prefix":"MyAvatar.setAnimGraphUrl","body":["MyAvatar.setAnimGraphUrl(${1:url: string})"]}},
{"MyAvatar.getPositionForAudio":{"prefix":"MyAvatar.getPositionForAudio","body":["MyAvatar.getPositionForAudio"]}},
{"MyAvatar.getOrientationForAudio":{"prefix":"MyAvatar.getOrientationForAudio","body":["MyAvatar.getOrientationForAudio"]}},
{"MyAvatar.setModelScale":{"prefix":"MyAvatar.setModelScale","body":["MyAvatar.setModelScale(${1:scale: number})"]}},
{"MyAvatar.audioListenerModeChanged":{"prefix":"MyAvatar.audioListenerModeChanged","body":["MyAvatar.audioListenerModeChanged"]}},
{"MyAvatar.transformChanged":{"prefix":"MyAvatar.transformChanged","body":["MyAvatar.transformChanged"]}},
{"MyAvatar.newCollisionSoundURL":{"prefix":"MyAvatar.newCollisionSoundURL","body":["MyAvatar.newCollisionSoundURL(${1:url: string})"]}},
{"MyAvatar.collisionWithEntity":{"prefix":"MyAvatar.collisionWithEntity","body":["MyAvatar.collisionWithEntity(${1:collision: Collision})"],"description":"Triggered when the avatar collides with an entity."}},
{"MyAvatar.collisionsEnabledChanged":{"prefix":"MyAvatar.collisionsEnabledChanged","body":["MyAvatar.collisionsEnabledChanged(${1:enabled: boolean})"],"description":"Triggered when collisions with avatar enabled or disabled"}},
{"MyAvatar.animGraphUrlChanged":{"prefix":"MyAvatar.animGraphUrlChanged","body":["MyAvatar.animGraphUrlChanged(${1:url: url})"],"description":"Triggered when avatar's animation url changes"}},
{"MyAvatar.energyChanged":{"prefix":"MyAvatar.energyChanged","body":["MyAvatar.energyChanged(${1:energy: number})"]}},
{"MyAvatar.positionGoneTo":{"prefix":"MyAvatar.positionGoneTo","body":["MyAvatar.positionGoneTo"]}},
{"MyAvatar.onLoadComplete":{"prefix":"MyAvatar.onLoadComplete","body":["MyAvatar.onLoadComplete"]}},
{"MyAvatar.wentAway":{"prefix":"MyAvatar.wentAway","body":["MyAvatar.wentAway"]}},
{"MyAvatar.wentActive":{"prefix":"MyAvatar.wentActive","body":["MyAvatar.wentActive"]}},
{"MyAvatar.skeletonChanged":{"prefix":"MyAvatar.skeletonChanged","body":["MyAvatar.skeletonChanged"]}},
{"MyAvatar.dominantHandChanged":{"prefix":"MyAvatar.dominantHandChanged","body":["MyAvatar.dominantHandChanged(${1:hand: string})"]}},
{"MyAvatar.sensorToWorldScaleChanged":{"prefix":"MyAvatar.sensorToWorldScaleChanged","body":["MyAvatar.sensorToWorldScaleChanged(${1:scale: number})"]}},
{"MyAvatar.attachmentsChanged":{"prefix":"MyAvatar.attachmentsChanged","body":["MyAvatar.attachmentsChanged"]}},
{"MyAvatar.scaleChanged":{"prefix":"MyAvatar.scaleChanged","body":["MyAvatar.scaleChanged"]}},
{"MyAvatar.shouldDisableHandTouchChanged":{"prefix":"MyAvatar.shouldDisableHandTouchChanged","body":["MyAvatar.shouldDisableHandTouchChanged(${1:shouldDisable: boolean})"],"description":"Triggered when hand touch is globally enabled or disabled"}},
{"MyAvatar.disableHandTouchForIDChanged":{"prefix":"MyAvatar.disableHandTouchForIDChanged","body":["MyAvatar.disableHandTouchForIDChanged(${1:entityID: Uuid},${2:disable: boolean})"],"description":"Triggered when hand touch is enabled or disabled for an specific entity"}},
{"FaceTracker":{"prefix":"FaceTracker","body":["FaceTracker"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The FaceTracker API helps manage facial tracking hardware."}},
{"FaceTracker.setEnabled":{"prefix":"FaceTracker.setEnabled","body":["FaceTracker.setEnabled(${1:enabled: boolean})"]}},
{"FaceTracker.calibrate":{"prefix":"FaceTracker.calibrate","body":["FaceTracker.calibrate"]}},
{"LaserPointers":{"prefix":"LaserPointers","body":["LaserPointers"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>Synonym for {@link Pointers} as used for laser pointers."}},
{"LaserPointers.createLaserPointer":{"prefix":"LaserPointers.createLaserPointer","body":["LaserPointers.createLaserPointer(${1:properties: Pointers.LaserPointerProperties})"]}},
{"LaserPointers.enableLaserPointer":{"prefix":"LaserPointers.enableLaserPointer","body":["LaserPointers.enableLaserPointer(${1:id: number})"]}},
{"LaserPointers.disableLaserPointer":{"prefix":"LaserPointers.disableLaserPointer","body":["LaserPointers.disableLaserPointer(${1:id: number})"]}},
{"LaserPointers.removeLaserPointer":{"prefix":"LaserPointers.removeLaserPointer","body":["LaserPointers.removeLaserPointer(${1:id: number})"]}},
{"LaserPointers.editRenderState":{"prefix":"LaserPointers.editRenderState","body":["LaserPointers.editRenderState(${1:id: number},${2:renderState: string},${3:properties: Pointers.RayPointerRenderState})"]}},
{"LaserPointers.setRenderState":{"prefix":"LaserPointers.setRenderState","body":["LaserPointers.setRenderState(${1:renderState: string},${2:id: number})"]}},
{"LaserPointers.getPrevRayPickResult":{"prefix":"LaserPointers.getPrevRayPickResult","body":["LaserPointers.getPrevRayPickResult(${1:id: number})"]}},
{"LaserPointers.setPrecisionPicking":{"prefix":"LaserPointers.setPrecisionPicking","body":["LaserPointers.setPrecisionPicking(${1:id: number},${2:precisionPicking: boolean})"]}},
{"LaserPointers.setLaserLength":{"prefix":"LaserPointers.setLaserLength","body":["LaserPointers.setLaserLength(${1:id: number},${2:laserLength: number})"]}},
{"LaserPointers.setIgnoreItems":{"prefix":"LaserPointers.setIgnoreItems","body":["LaserPointers.setIgnoreItems(${1:id: number},${2:ignoreItems: Array.<Uuid>})"]}},
{"LaserPointers.setIncludeItems":{"prefix":"LaserPointers.setIncludeItems","body":["LaserPointers.setIncludeItems(${1:id: number},${2:includeItems: Array.<Uuid>})"]}},
{"LaserPointers.setLockEndUUID":{"prefix":"LaserPointers.setLockEndUUID","body":["LaserPointers.setLockEndUUID(${1:id: number},${2:itemID: Uuid},${3:isOverlay: boolean},${4:offsetMat: Mat4})"]}},
{"LaserPointers.isLeftHand":{"prefix":"LaserPointers.isLeftHand","body":["LaserPointers.isLeftHand(${1:id: number})"]}},
{"LaserPointers.isRightHand":{"prefix":"LaserPointers.isRightHand","body":["LaserPointers.isRightHand(${1:id: number})"]}},
{"LaserPointers.isMouse":{"prefix":"LaserPointers.isMouse","body":["LaserPointers.isMouse(${1:id: number})"]}},
{"Picks.RayPickProperties":{"prefix":"Picks.RayPickProperties","body":["Picks.RayPickProperties"],"description":"A set of properties that can be passed to {@link Picks.createPick} to create a new Ray Pick."}},
{"Picks.StylusPickProperties":{"prefix":"Picks.StylusPickProperties","body":["Picks.StylusPickProperties"],"description":"A set of properties that can be passed to {@link Picks.createPick} to create a new Stylus Pick."}},
{"Picks.ParabolaPickProperties":{"prefix":"Picks.ParabolaPickProperties","body":["Picks.ParabolaPickProperties"],"description":"A set of properties that can be passed to {@link Picks.createPick} to create a new Parabola Pick."}},
{"Shape":{"prefix":"Shape","body":["Shape"],"description":"A Shape defines a physical volume."}},
{"Picks.CollisionPickProperties":{"prefix":"Picks.CollisionPickProperties","body":["Picks.CollisionPickProperties"],"description":"A set of properties that can be passed to {@link Picks.createPick} to create a new Collision Pick."}},
{"Picks":{"prefix":"Picks","body":["Picks"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Picks API lets you create and manage objects for repeatedly calculating intersections in different ways."}},
{"Picks.createPick":{"prefix":"Picks.createPick","body":["Picks.createPick(${1:type: PickType},${2:properties: Picks.RayPickProperties})"],"description":"Adds a new Pick.\rDifferent {@link PickType}s use different properties, and within one PickType, the properties you choose can lead to a wide range of behaviors. For example,\r with PickType.Ray, depending on which optional parameters you pass, you could create a Static Ray Pick, a Mouse Ray Pick, or a Joint Ray Pick."}},
{"Picks.enablePick":{"prefix":"Picks.enablePick","body":["Picks.enablePick(${1:uid: number})"],"description":"Enables a Pick."}},
{"Picks.disablePick":{"prefix":"Picks.disablePick","body":["Picks.disablePick(${1:uid: number})"],"description":"Disables a Pick."}},
{"Picks.removePick":{"prefix":"Picks.removePick","body":["Picks.removePick(${1:uid: number})"],"description":"Removes a Pick."}},
{"RayPickResult":{"prefix":"RayPickResult","body":["RayPickResult"],"description":"An intersection result for a Ray Pick."}},
{"StylusPickResult":{"prefix":"StylusPickResult","body":["StylusPickResult"],"description":"An intersection result for a Stylus Pick."}},
{"ParabolaPickResult":{"prefix":"ParabolaPickResult","body":["ParabolaPickResult"],"description":"An intersection result for a Parabola Pick."}},
{"CollisionPickResult":{"prefix":"CollisionPickResult","body":["CollisionPickResult"],"description":"An intersection result for a Collision Pick."}},
{"IntersectingObject":{"prefix":"IntersectingObject","body":["IntersectingObject"],"description":"Information about the Collision Pick's intersection with an object"}},
{"CollisionContact":{"prefix":"CollisionContact","body":["CollisionContact"],"description":"A pair of points that represents part of an overlap between a Collision Pick and an object in the physics engine. Points which are further apart represent deeper overlap"}},
{"Picks.getPrevPickResult":{"prefix":"Picks.getPrevPickResult","body":["Picks.getPrevPickResult(${1:uid: number})"],"description":"Get the most recent pick result from this Pick. This will be updated as long as the Pick is enabled."}},
{"Picks.setPrecisionPicking":{"prefix":"Picks.setPrecisionPicking","body":["Picks.setPrecisionPicking(${1:uid: number},${2:precisionPicking: boolean})"],"description":"Sets whether or not to use precision picking."}},
{"Picks.setIgnoreItems":{"prefix":"Picks.setIgnoreItems","body":["Picks.setIgnoreItems(${1:uid: number},${2:ignoreItems: Array.<Uuid>})"],"description":"Sets a list of Entity IDs, Overlay IDs, and/or Avatar IDs to ignore during intersection. Not used by Stylus Picks."}},
{"Picks.setIncludeItems":{"prefix":"Picks.setIncludeItems","body":["Picks.setIncludeItems(${1:uid: number},${2:includeItems: Array.<Uuid>})"],"description":"Sets a list of Entity IDs, Overlay IDs, and/or Avatar IDs to include during intersection, instead of intersecting with everything. Stylus\r Picks <b>only</b> intersect with objects in their include list."}},
{"Picks.isLeftHand":{"prefix":"Picks.isLeftHand","body":["Picks.isLeftHand(${1:uid: number})"],"description":"Check if a Pick is associated with the left hand."}},
{"Picks.isRightHand":{"prefix":"Picks.isRightHand","body":["Picks.isRightHand(${1:uid: number})"],"description":"Check if a Pick is associated with the right hand."}},
{"Picks.isMouse":{"prefix":"Picks.isMouse","body":["Picks.isMouse(${1:uid: number})"],"description":"Check if a Pick is associated with the system mouse."}},
{"Picks.PICK_NOTHING":{"prefix":"Picks.PICK_NOTHING","body":["Picks.PICK_NOTHING"]}},
{"Picks.PICK_ENTITIES":{"prefix":"Picks.PICK_ENTITIES","body":["Picks.PICK_ENTITIES"]}},
{"Picks.PICK_OVERLAYS":{"prefix":"Picks.PICK_OVERLAYS","body":["Picks.PICK_OVERLAYS"]}},
{"Picks.PICK_AVATARS":{"prefix":"Picks.PICK_AVATARS","body":["Picks.PICK_AVATARS"]}},
{"Picks.PICK_HUD":{"prefix":"Picks.PICK_HUD","body":["Picks.PICK_HUD"]}},
{"Picks.PICK_COARSE":{"prefix":"Picks.PICK_COARSE","body":["Picks.PICK_COARSE"]}},
{"Picks.PICK_INCLUDE_INVISIBLE":{"prefix":"Picks.PICK_INCLUDE_INVISIBLE","body":["Picks.PICK_INCLUDE_INVISIBLE"]}},
{"Picks.PICK_INCLUDE_NONCOLLIDABLE":{"prefix":"Picks.PICK_INCLUDE_NONCOLLIDABLE","body":["Picks.PICK_INCLUDE_NONCOLLIDABLE"]}},
{"Picks.PICK_ALL_INTERSECTIONS":{"prefix":"Picks.PICK_ALL_INTERSECTIONS","body":["Picks.PICK_ALL_INTERSECTIONS"]}},
{"Picks.INTERSECTED_NONE":{"prefix":"Picks.INTERSECTED_NONE","body":["Picks.INTERSECTED_NONE"]}},
{"Picks.INTERSECTED_ENTITY":{"prefix":"Picks.INTERSECTED_ENTITY","body":["Picks.INTERSECTED_ENTITY"]}},
{"Picks.INTERSECTED_OVERLAY":{"prefix":"Picks.INTERSECTED_OVERLAY","body":["Picks.INTERSECTED_OVERLAY"]}},
{"Picks.INTERSECTED_AVATAR":{"prefix":"Picks.INTERSECTED_AVATAR","body":["Picks.INTERSECTED_AVATAR"]}},
{"Picks.INTERSECTED_HUD":{"prefix":"Picks.INTERSECTED_HUD","body":["Picks.INTERSECTED_HUD"]}},
{"Pointers.StylusPointerProperties":{"prefix":"Pointers.StylusPointerProperties","body":["Pointers.StylusPointerProperties"],"description":"A set of properties that can be passed to {@link Pointers.createPointer} to create a new Pointer. Contains the relevant {@link Picks.PickProperties} to define the underlying Pick."}},
{"Pointers.DefaultRayPointerRenderState":{"prefix":"Pointers.DefaultRayPointerRenderState","body":["Pointers.DefaultRayPointerRenderState"],"description":"A set of properties used to define the visual aspect of a Ray Pointer in the case that the Pointer is not intersecting something. Same as a {@link Pointers.RayPointerRenderState},\rbut with an additional distance field."}},
{"Pointers.RayPointerRenderState":{"prefix":"Pointers.RayPointerRenderState","body":["Pointers.RayPointerRenderState"],"description":"A set of properties which define the visual aspect of a Ray Pointer in the case that the Pointer is intersecting something."}},
{"Pointers.LaserPointerProperties":{"prefix":"Pointers.LaserPointerProperties","body":["Pointers.LaserPointerProperties"],"description":"A set of properties that can be passed to {@link Pointers.createPointer} to create a new Pointer. Contains the relevant {@link Picks.PickProperties} to define the underlying Pick."}},
{"Pointers.ParabolaProperties":{"prefix":"Pointers.ParabolaProperties","body":["Pointers.ParabolaProperties"],"description":"The rendering properties of the parabolic path"}},
{"Pointers.DefaultParabolaPointerRenderState":{"prefix":"Pointers.DefaultParabolaPointerRenderState","body":["Pointers.DefaultParabolaPointerRenderState"],"description":"A set of properties used to define the visual aspect of a Parabola Pointer in the case that the Pointer is not intersecting something. Same as a {@link Pointers.ParabolaPointerRenderState},\rbut with an additional distance field."}},
{"Pointers.ParabolaPointerRenderState":{"prefix":"Pointers.ParabolaPointerRenderState","body":["Pointers.ParabolaPointerRenderState"],"description":"A set of properties used to define the visual aspect of a Parabola Pointer in the case that the Pointer is intersecting something."}},
{"Pointers.ParabolaPointerProperties":{"prefix":"Pointers.ParabolaPointerProperties","body":["Pointers.ParabolaPointerProperties"],"description":"A set of properties that can be passed to {@link Pointers.createPointer} to create a new Pointer. Contains the relevant {@link Picks.PickProperties} to define the underlying Pick."}},
{"Pointers":{"prefix":"Pointers","body":["Pointers"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Pointers API lets you create and manage objects for repeatedly calculating intersections in different ways, as well as the visual representation of those objects.\r Pointers can also be configured to automatically generate {@link PointerEvent}s on {@link Entities} and {@link Overlays}."}},
{"Pointers.Trigger":{"prefix":"Pointers.Trigger","body":["Pointers.Trigger"],"description":"A trigger mechanism for Ray and Parabola Pointers."}},
{"Pointers.createPointer":{"prefix":"Pointers.createPointer","body":["Pointers.createPointer(${1:type: PickType},${2:properties: Pointers.LaserPointerProperties})"],"description":"Adds a new Pointer\rDifferent {@link PickType}s use different properties, and within one PickType, the properties you choose can lead to a wide range of behaviors. For example,\r with PickType.Ray, depending on which optional parameters you pass, you could create a Static Ray Pointer, a Mouse Ray Pointer, or a Joint Ray Pointer."}},
{"Pointers.enablePointer":{"prefix":"Pointers.enablePointer","body":["Pointers.enablePointer(${1:uid: number})"],"description":"Enables a Pointer."}},
{"Pointers.disablePointer":{"prefix":"Pointers.disablePointer","body":["Pointers.disablePointer(${1:uid: number})"],"description":"Disables a Pointer."}},
{"Pointers.removePointer":{"prefix":"Pointers.removePointer","body":["Pointers.removePointer(${1:uid: number})"],"description":"Removes a Pointer."}},
{"Pointers.editRenderState":{"prefix":"Pointers.editRenderState","body":["Pointers.editRenderState(${1:uid: number},${2:renderState: string},${3:properties: Pointers.RayPointerRenderState})"],"description":"Edit some visual aspect of a Pointer. Currently only supported for Ray Pointers."}},
{"Pointers.setRenderState":{"prefix":"Pointers.setRenderState","body":["Pointers.setRenderState(${1:uid: number},${2:renderState: string})"],"description":"Set the render state of a Pointer. For Ray Pointers, this means switching between their {@link Pointers.RayPointerRenderState}s, or \"\" to turn off rendering and hover/trigger events.\r For Stylus Pointers, there are three built-in options: \"events on\" (render and send events, the default), \"events off\" (render but don't send events), and \"disabled\" (don't render, don't send events)."}},
{"Pointers.getPrevPickResult":{"prefix":"Pointers.getPrevPickResult","body":["Pointers.getPrevPickResult(${1:uid: number})"],"description":"Get the most recent pick result from this Pointer. This will be updated as long as the Pointer is enabled, regardless of the render state."}},
{"Pointers.setPrecisionPicking":{"prefix":"Pointers.setPrecisionPicking","body":["Pointers.setPrecisionPicking(${1:uid: number},${2:precisionPicking: boolean})"],"description":"Sets whether or not to use precision picking."}},
{"Pointers.setLength":{"prefix":"Pointers.setLength","body":["Pointers.setLength(${1:uid: number},${2:length: number})"],"description":"Sets the length of this Pointer. No effect on Stylus Pointers."}},
{"Pointers.setIgnoreItems":{"prefix":"Pointers.setIgnoreItems","body":["Pointers.setIgnoreItems(${1:uid: number},${2:ignoreItems: Array.<Uuid>})"],"description":"Sets a list of Entity IDs, Overlay IDs, and/or Avatar IDs to ignore during intersection. Not used by Stylus Pointers."}},
{"Pointers.setIncludeItems":{"prefix":"Pointers.setIncludeItems","body":["Pointers.setIncludeItems(${1:uid: number},${2:includeItems: Array.<Uuid>})"],"description":"Sets a list of Entity IDs, Overlay IDs, and/or Avatar IDs to include during intersection, instead of intersecting with everything. Stylus\r Pointers <b>only</b> intersect with objects in their include list."}},
{"Pointers.setLockEndUUID":{"prefix":"Pointers.setLockEndUUID","body":["Pointers.setLockEndUUID(${1:uid: number},${2:objectID: Uuid},${3:isOverlay: boolean},${4:offsetMat: Mat4})"],"description":"Lock a Pointer onto a specific object (overlay, entity, or avatar). Optionally, provide an offset in object-space, otherwise the Pointer will lock on to the center of the object.\r Not used by Stylus Pointers."}},
{"Pointers.isLeftHand":{"prefix":"Pointers.isLeftHand","body":["Pointers.isLeftHand(${1:uid: number})"],"description":"Check if a Pointer is associated with the left hand."}},
{"Pointers.isRightHand":{"prefix":"Pointers.isRightHand","body":["Pointers.isRightHand(${1:uid: number})"],"description":"Check if a Pointer is associated with the right hand."}},
{"Pointers.isMouse":{"prefix":"Pointers.isMouse","body":["Pointers.isMouse(${1:uid: number})"],"description":"Check if a Pointer is associated with the system mouse."}},
{"Pointers.getPointerProperties":{"prefix":"Pointers.getPointerProperties","body":["Pointers.getPointerProperties(${1:uid: number})"],"description":"Returns information about an existing Pointer"}},
{"RayPick":{"prefix":"RayPick","body":["RayPick"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>Synonym for {@link Picks} as used for ray picks."}},
{"RayPick.createRayPick":{"prefix":"RayPick.createRayPick","body":["RayPick.createRayPick(${1:undefined: Picks.RayPickProperties})"]}},
{"RayPick.enableRayPick":{"prefix":"RayPick.enableRayPick","body":["RayPick.enableRayPick(${1:id: number})"]}},
{"RayPick.disableRayPick":{"prefix":"RayPick.disableRayPick","body":["RayPick.disableRayPick(${1:id: number})"]}},
{"RayPick.removeRayPick":{"prefix":"RayPick.removeRayPick","body":["RayPick.removeRayPick(${1:id: number})"]}},
{"RayPick.getPrevRayPickResult":{"prefix":"RayPick.getPrevRayPickResult","body":["RayPick.getPrevRayPickResult(${1:id: number})"]}},
{"RayPick.setPrecisionPicking":{"prefix":"RayPick.setPrecisionPicking","body":["RayPick.setPrecisionPicking(${1:id: number},${2:precisionPicking: boolean})"]}},
{"RayPick.setIgnoreItems":{"prefix":"RayPick.setIgnoreItems","body":["RayPick.setIgnoreItems(${1:id: number},${2:{Uuid[])})"]}},
{"RayPick.setIncludeItems":{"prefix":"RayPick.setIncludeItems","body":["RayPick.setIncludeItems(${1:id: number},${2:{Uuid[])})"]}},
{"RayPick.isLeftHand":{"prefix":"RayPick.isLeftHand","body":["RayPick.isLeftHand(${1:id: number})"]}},
{"RayPick.isRightHand":{"prefix":"RayPick.isRightHand","body":["RayPick.isRightHand(${1:id: number})"]}},
{"RayPick.isMouse":{"prefix":"RayPick.isMouse","body":["RayPick.isMouse(${1:id: number})"]}},
{"RayPick.PICK_NOTHING":{"prefix":"RayPick.PICK_NOTHING","body":["RayPick.PICK_NOTHING"]}},
{"RayPick.PICK_ENTITIES":{"prefix":"RayPick.PICK_ENTITIES","body":["RayPick.PICK_ENTITIES"]}},
{"RayPick.PICK_OVERLAYS":{"prefix":"RayPick.PICK_OVERLAYS","body":["RayPick.PICK_OVERLAYS"]}},
{"RayPick.PICK_AVATARS":{"prefix":"RayPick.PICK_AVATARS","body":["RayPick.PICK_AVATARS"]}},
{"RayPick.PICK_HUD":{"prefix":"RayPick.PICK_HUD","body":["RayPick.PICK_HUD"]}},
{"RayPick.PICK_COARSE":{"prefix":"RayPick.PICK_COARSE","body":["RayPick.PICK_COARSE"]}},
{"RayPick.PICK_INCLUDE_INVISIBLE":{"prefix":"RayPick.PICK_INCLUDE_INVISIBLE","body":["RayPick.PICK_INCLUDE_INVISIBLE"]}},
{"RayPick.PICK_INCLUDE_NONCOLLIDABLE":{"prefix":"RayPick.PICK_INCLUDE_NONCOLLIDABLE","body":["RayPick.PICK_INCLUDE_NONCOLLIDABLE"]}},
{"RayPick.PICK_ALL_INTERSECTIONS":{"prefix":"RayPick.PICK_ALL_INTERSECTIONS","body":["RayPick.PICK_ALL_INTERSECTIONS"]}},
{"RayPick.INTERSECTED_NONE":{"prefix":"RayPick.INTERSECTED_NONE","body":["RayPick.INTERSECTED_NONE"]}},
{"RayPick.INTERSECTED_ENTITY":{"prefix":"RayPick.INTERSECTED_ENTITY","body":["RayPick.INTERSECTED_ENTITY"]}},
{"RayPick.INTERSECTED_OVERLAY":{"prefix":"RayPick.INTERSECTED_OVERLAY","body":["RayPick.INTERSECTED_OVERLAY"]}},
{"RayPick.INTERSECTED_AVATAR":{"prefix":"RayPick.INTERSECTED_AVATAR","body":["RayPick.INTERSECTED_AVATAR"]}},
{"RayPick.INTERSECTED_HUD":{"prefix":"RayPick.INTERSECTED_HUD","body":["RayPick.INTERSECTED_HUD"]}},
{"AccountServices":{"prefix":"AccountServices","body":["AccountServices"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The AccountServices API contains helper functions related to user connectivity"}},
{"AccountServices.getDownloadInfo":{"prefix":"AccountServices.getDownloadInfo","body":["AccountServices.getDownloadInfo"]}},
{"AccountServices.updateDownloadInfo":{"prefix":"AccountServices.updateDownloadInfo","body":["AccountServices.updateDownloadInfo"]}},
{"AccountServices.isLoggedIn":{"prefix":"AccountServices.isLoggedIn","body":["AccountServices.isLoggedIn"]}},
{"AccountServices.checkAndSignalForAccessToken":{"prefix":"AccountServices.checkAndSignalForAccessToken","body":["AccountServices.checkAndSignalForAccessToken"]}},
{"AccountServices.logOut":{"prefix":"AccountServices.logOut","body":["AccountServices.logOut"]}},
{"AccountServices.connected":{"prefix":"AccountServices.connected","body":["AccountServices.connected"]}},
{"AccountServices.disconnected":{"prefix":"AccountServices.disconnected","body":["AccountServices.disconnected(${1:reason: string})"]}},
{"AccountServices.myUsernameChanged":{"prefix":"AccountServices.myUsernameChanged","body":["AccountServices.myUsernameChanged(${1:username: string})"]}},
{"AccountServices.downloadInfoChanged":{"prefix":"AccountServices.downloadInfoChanged","body":["AccountServices.downloadInfoChanged(${1:info})"]}},
{"AccountServices.findableByChanged":{"prefix":"AccountServices.findableByChanged","body":["AccountServices.findableByChanged(${1:discoverabilityMode: string})"]}},
{"AccountServices.loggedInChanged":{"prefix":"AccountServices.loggedInChanged","body":["AccountServices.loggedInChanged(${1:loggedIn: boolean})"]}},
{"Audio":{"prefix":"Audio","body":["Audio"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>The <code>Audio</code> API provides facilities to interact with audio inputs and outputs and to play sounds."}},
{"Audio.setInputDevice":{"prefix":"Audio.setInputDevice","body":["Audio.setInputDevice(${1:device: object},${2:isHMD: boolean})"]}},
{"Audio.setOutputDevice":{"prefix":"Audio.setOutputDevice","body":["Audio.setOutputDevice(${1:device: object},${2:isHMD: boolean})"]}},
{"Audio.setReverb":{"prefix":"Audio.setReverb","body":["Audio.setReverb(${1:enable: boolean})"],"description":"Enable or disable reverberation. Reverberation is done by the client, on the post-mix audio. The reverberation options \rcome from either the domain's audio zone if used — configured on the server — or as scripted by \r{@link Audio.setReverbOptions|setReverbOptions}."}},
{"Audio.setReverbOptions":{"prefix":"Audio.setReverbOptions","body":["Audio.setReverbOptions(${1:options: AudioEffectOptions})"],"description":"Configure reverberation options. Use {@link Audio.setReverb|setReverb} to enable or disable reverberation."}},
{"Audio.startRecording":{"prefix":"Audio.startRecording","body":["Audio.startRecording(${1:filename: string})"],"description":"Starts making an audio recording of the audio being played in-world (i.e., not local-only audio) to a file in WAV format."}},
{"Audio.stopRecording":{"prefix":"Audio.stopRecording","body":["Audio.stopRecording"],"description":"Finish making an audio recording started with {@link Audio.startRecording|startRecording}."}},
{"Audio.getRecording":{"prefix":"Audio.getRecording","body":["Audio.getRecording"],"description":"Check whether an audio recording is currently being made."}},
{"Audio.nop":{"prefix":"Audio.nop","body":["Audio.nop"]}},
{"Audio.mutedChanged":{"prefix":"Audio.mutedChanged","body":["Audio.mutedChanged(${1:isMuted: boolean})"],"description":"Triggered when the audio input is muted or unmuted."}},
{"Audio.noiseReductionChanged":{"prefix":"Audio.noiseReductionChanged","body":["Audio.noiseReductionChanged(${1:isEnabled: boolean})"],"description":"Triggered when the audio input noise reduction is enabled or disabled."}},
{"Audio.inputVolumeChanged":{"prefix":"Audio.inputVolumeChanged","body":["Audio.inputVolumeChanged(${1:volume: number})"],"description":"Triggered when the input audio volume changes."}},
{"Audio.inputLevelChanged":{"prefix":"Audio.inputLevelChanged","body":["Audio.inputLevelChanged(${1:level: number})"],"description":"Triggered when the input audio level changes."}},
{"Audio.contextChanged":{"prefix":"Audio.contextChanged","body":["Audio.contextChanged(${1:context: string})"],"description":"Triggered when the current context of the audio changes."}},
{"Audio.onContextChanged":{"prefix":"Audio.onContextChanged","body":["Audio.onContextChanged"]}},
{"Clipboard":{"prefix":"Clipboard","body":["Clipboard"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Clipboard API enables you to export and import entities to and from JSON files."}},
{"Clipboard.getContentsDimensions":{"prefix":"Clipboard.getContentsDimensions","body":["Clipboard.getContentsDimensions"],"description":"Compute the extents of the contents held in the clipboard."}},
{"Clipboard.getClipboardContentsLargestDimension":{"prefix":"Clipboard.getClipboardContentsLargestDimension","body":["Clipboard.getClipboardContentsLargestDimension"],"description":"Compute the largest dimension of the extents of the contents held in the clipboard."}},
{"Clipboard.importEntities":{"prefix":"Clipboard.importEntities","body":["Clipboard.importEntities(${1:filename: string})"],"description":"Import entities from a JSON file containing entity data into the clipboard.\rYou can generate a JSON file using {@link Clipboard.exportEntities}."}},
{"Clipboard.exportEntities":{"prefix":"Clipboard.exportEntities","body":["Clipboard.exportEntities(${1:filename: string},${2:entityIDs: Array.<Uuid>})"],"description":"Export the entities specified to a JSON file."}},
{"Clipboard.exportEntities":{"prefix":"Clipboard.exportEntities","body":["Clipboard.exportEntities(${1:filename: string},${2:x: number},${3:y: number},${4:z: number},${5:scale: number})"],"description":"Export the entities with centers within a cube to a JSON file."}},
{"Clipboard.pasteEntities":{"prefix":"Clipboard.pasteEntities","body":["Clipboard.pasteEntities(${1:position: Vec3})"],"description":"Paste the contents of the clipboard into the world."}},
{"Controller":{"prefix":"Controller","body":["Controller"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Controller API provides facilities to interact with computer and controller hardware.\r\r<h5>Functions</h5>\r\r<p>Properties</p>\r<ul>\r <li>{@link Controller.getActions|getActions}</li>\r <li>{@link Controller.getHardware|getHardware}</li>\r <li>{@link Controller.getStandard|getStandard}</li>\r</ul>\r\r<p>Mappings</p>\r<ul>\r <li>{@link Controller.disableMapping|disableMapping}</li>\r <li>{@link Controller.enableMapping|enableMapping}</li>\r <li>{@link Controller.loadMapping|loadMapping}</li>\r <li>{@link Controller.newMapping|newMapping}</li>\r <li>{@link Controller.parseMapping|parseMapping}</li>\r</ul>\r\r<p>Input, Hardware, and Action Reflection</p>\r<ul>\r <li>{@link Controller.findAction|findAction}</li>\r <li>{@link Controller.findDevice|findDevice}</li>\r <li>{@link Controller.getActionNames|getActionNames}</li>\r <li>{@link Controller.getAllActions|getAllActions}</li>\r <li>{@link Controller.getAvailableInputs|getAvailableInputs}</li>\r <li>{@link Controller.getDeviceName|getDeviceName}</li>\r <li>{@link Controller.getDeviceNames|getDeviceNames}</li>\r</ul>\r\r<p>Input, Hardware, and Action Events</p>\r<ul>\r <li>{@link Controller.actionEvent|actionEvent}</li>\r <li>{@link Controller.hardwareChanged|hardwareChanged}</li>\r <li>{@link Controller.inputEvent|inputEvent}</li>\r</ul>\r\r<p>Mouse, Keyboard, and Touch Events</p>\r<ul>\r <li>{@link Controller.keyPressEvent|keyPressEvent}</li>\r <li>{@link Controller.keyReleaseEvent|keyReleaseEvent}</li>\r <li>{@link Controller.mouseDoublePressEvent|mouseDoublePressEvent}</li>\r <li>{@link Controller.mouseMoveEvent|mouseMoveEvent}</li>\r <li>{@link Controller.mousePressEvent|mousePressEvent}</li>\r <li>{@link Controller.mouseReleaseEvent|mouseReleaseEvent}</li>\r <li>{@link Controller.touchBeginEvent|touchBeginEvent}</li>\r <li>{@link Controller.touchEndEvent|touchEndEvent}</li>\r <li>{@link Controller.touchUpdateEvent|touchUpdateEvent}</li>\r <li>{@link Controller.wheelEvent|wheelEvent}</li>\r</ul>\r\r<p>Control Capturing</p>\r<ul>\r <li>{@link Controller.captureMouseEvents|captureMouseEvents}</li>\r <li>{@link Controller.captureTouchEvents|captureTouchEvents}</li>\r <li>{@link Controller.captureWheelEvents|captureWheelEvents}</li>\r <li>{@link Controller.releaseMouseEvents|releaseMouseEvents}</li>\r <li>{@link Controller.releaseTouchEvents|releaseTouchEvents}</li>\r <li>{@link Controller.releaseWheelEvents|releaseWheelEvents}</li>\r</ul>\r\r<p>Action Capturing</p>\r<ul>\r <li>{@link Controller.captureActionEvents|captureActionEvents}</li>\r <li>{@link Controller.captureEntityClickEvents|captureEntityClickEvents}</li>\r <li>{@link Controller.captureJoystick|captureJoystick}</li>\r <li>{@link Controller.captureKeyEvents|captureKeyEvents}</li>\r <li>{@link Controller.releaseActionEvents|releaseActionEvents}</li>\r <li>{@link Controller.releaseEntityClickEvents|releaseEntityClickEvents}</li>\r <li>{@link Controller.releaseJoystick|releaseJoystick}</li>\r <li>{@link Controller.releaseKeyEvents|releaseKeyEvents}</li>\r</ul>\r\r<p>Controller and Action Values</p>\r<ul>\r <li>{@link Controller.getValue|getValue}</li>\r <li>{@link Controller.getAxisValue|getAxisValue}</li>\r <li>{@link Controller.getPoseValue|getgetPoseValue}</li>\r <li>{@link Controller.getActionValue|getActionValue}</li>\r</ul>\r\r<p>Haptics</p>\r<ul>\r <li>{@link Controller.triggerHapticPulse|triggerHapticPulse}</li>\r <li>{@link Controller.triggerHapticPulseOnDevice|triggerHapticPulseOnDevice}</li>\r <li>{@link Controller.triggerShortHapticPulse|triggerShortHapticPulse}</li>\r <li>{@link Controller.triggerShortHapticPulseOnDevice|triggerShortHapticPulseOnDevice}</li>\r</ul>\r\r<p>Display Information</p>\r<ul>\r <li>{@link Controller.getViewportDimensions|getViewportDimensions}</li>\r <li>{@link Controller.getRecommendedHUDRect|getRecommendedHUDRect}</li>\r</ul>\r\r<p>Virtual Game Pad</p>\r<ul>\r <li>{@link Controller.setVPadEnabled|setVPadEnabled}</li>\r <li>{@link Controller.setVPadHidden|setVPadHidden}</li>\r <li>{@link Controller.setVPadExtraBottomMargin|setVPadExtraBottomMargin}</li>\r</ul>\r\r<p>Input Recordings</p>\r<ul>\r <li>{@link Controller.startInputRecording|startInputRecording}</li>\r <li>{@link Controller.stopInputRecording|stopInputRecording}</li>\r <li>{@link Controller.saveInputRecording|saveInputRecording}</li>\r <li>{@link Controller.getInputRecorderSaveDirectory|getInputRecorderSaveDirectory}</li>\r <li>{@link Controller.loadInputRecording|loadInputRecording}</li>\r <li>{@link Controller.startInputPlayback|startInputPlayback}</li>\r <li>{@link Controller.stopInputPlayback|stopInputPlayback}</li>\r</ul>\r\r<h5>Entity Methods:</h5>\r\r<p>The default scripts implement hand controller actions that use {@link Entities.callEntityMethod} to call entity script \rmethods, if present in the entity being interacted with.</p>\r\r<table>\r <thead>\r <tr><th>Method Name</th><th>Description</th><th>Example</th></tr>\r </thead>\r <tbody>\r <tr>\r <td><code>startFarTrigger</code><br /><code>continueFarTrigger</code><br /><code>stopFarTrigger</code></td>\r <td>These methods are called when a user is more than 0.3m away from the entity, the entity is triggerable, and the \r user starts, continues, or stops squeezing the trigger.</td>\r </td>\r <td>A light switch that can be toggled on and off from a distance.</td>\r </tr>\r <tr>\r <td><code>startNearTrigger</code><br /><code>continueNearTrigger</code><br /><code>stopNearTrigger</code></td>\r <td>These methods are called when a user is less than 0.3m away from the entity, the entity is triggerable, and the \r user starts, continues, or stops squeezing the trigger.</td>\r <td>A doorbell that can be rung when a user is near.</td>\r </tr>\r <tr>\r <td><code>startDistanceGrab</code><br /><code>continueDistanceGrab</code><br /></td>\r <td>These methods are called when a user is more than 0.3m away from the entity, the entity is either cloneable, or\r grabbable and not locked, and the user starts or continues to squeeze the trigger.</td>\r <td>A comet that emits icy particle trails when a user is dragging it through the sky.</td>\r </tr>\r <tr>\r <td><code>startNearGrab</code><br /><code>continueNearGrab</code><br /></td>\r <td>These methods are called when a user is less than 0.3m away from the entity, the entity is either cloneable, or \r grabbable and not locked, and the user starts or continues to squeeze the trigger.</td>\r <td>A ball that glows when it's being held close.</td>\r </tr>\r <tr>\r <td><code>releaseGrab</code></td>\r <td>This method is called when a user releases the trigger when having been either distance or near grabbing an \r entity.</td>\r <td>Turn off the ball glow or comet trail with the user finishes grabbing it.</td>\r </tr>\r <tr>\r <td><code>startEquip</code><br /><code>continueEquip</code><br /><code>releaseEquip</code></td>\r <td>These methods are called when a user starts, continues, or stops equipping an entity.</td>\r <td>A glass that stays in the user's hand after the trigger is clicked.</td>\r </tr>\r </tbody>\r</table>\r<p>All the entity methods are called with the following two arguments:</p>\r<ul>\r <li>The entity ID.</li>\r <li>A string, <code>\"hand,userID\"</code> — where \"hand\" is <code>\"left\"</code> or <code>\"right\"</code>, and \"userID\"\r is the user's {@link MyAvatar|MyAvatar.sessionUUID}.</li>\r</ul>"}},
{"Controller.captureKeyEvents":{"prefix":"Controller.captureKeyEvents","body":["Controller.captureKeyEvents(${1:event: KeyEvent})"],"description":"Disable default Interface actions for a particular key event."}},
{"Controller.releaseKeyEvents":{"prefix":"Controller.releaseKeyEvents","body":["Controller.releaseKeyEvents(${1:event: KeyEvent})"],"description":"Re-enable default Interface actions for a particular key event that has been disabled using \r{@link Controller.captureKeyEvents|captureKeyEvents}."}},
{"Controller.captureJoystick":{"prefix":"Controller.captureJoystick","body":["Controller.captureJoystick(${1:joystickID: number})"],"description":"Disable default Interface actions for a joystick."}},
{"Controller.releaseJoystick":{"prefix":"Controller.releaseJoystick","body":["Controller.releaseJoystick(${1:joystickID: number})"],"description":"Re-enable default Interface actions for a joystick that has been disabled using \r{@link Controller.captureJoystick|captureJoystick}."}},
{"Controller.captureEntityClickEvents":{"prefix":"Controller.captureEntityClickEvents","body":["Controller.captureEntityClickEvents"],"description":"Disable {@link Entities.mousePressOnEntity} and {@link Entities.mouseDoublePressOnEntity} events on entities."}},
{"Controller.releaseEntityClickEvents":{"prefix":"Controller.releaseEntityClickEvents","body":["Controller.releaseEntityClickEvents"],"description":"Re-enable {@link Entities.mousePressOnEntity} and {@link Entities.mouseDoublePressOnEntity} events on entities that were \rdisabled using {@link Controller.captureEntityClickEvents|captureEntityClickEvents}."}},
{"Controller.getViewportDimensions":{"prefix":"Controller.getViewportDimensions","body":["Controller.getViewportDimensions"],"description":"Get the dimensions of the Interface window's interior if in desktop mode or the HUD surface if in HMD mode."}},
{"Controller.getRecommendedHUDRect":{"prefix":"Controller.getRecommendedHUDRect","body":["Controller.getRecommendedHUDRect"],"description":"Get the recommended area to position UI on the HUD surface if in HMD mode or Interface's window interior if in desktop \rmode."}},
{"Controller.setVPadEnabled":{"prefix":"Controller.setVPadEnabled","body":["Controller.setVPadEnabled(${1:enable: boolean})"],"description":"Enables or disables the virtual game pad that is displayed on certain devices (e.g., Android)."}},
{"Controller.setVPadHidden":{"prefix":"Controller.setVPadHidden","body":["Controller.setVPadHidden(${1:hidden: boolean})"],"description":"Shows or hides the virtual game pad that is displayed on certain devices (e.g., Android)."}},
{"Controller.setVPadExtraBottomMargin":{"prefix":"Controller.setVPadExtraBottomMargin","body":["Controller.setVPadExtraBottomMargin(${1:margin: number})"],"description":"Sets the amount of extra margin between the virtual game pad that is displayed on certain devices (e.g., Android) and \rthe bottom of the display."}},
{"Controller.keyPressEvent":{"prefix":"Controller.keyPressEvent","body":["Controller.keyPressEvent(${1:event: KeyEvent})"],"description":"Triggered when a keyboard key is pressed."}},
{"Controller.keyReleaseEvent":{"prefix":"Controller.keyReleaseEvent","body":["Controller.keyReleaseEvent(${1:event: KeyEvent})"],"description":"Triggered when a keyboard key is released from being pressed."}},
{"Controller.mouseMoveEvent":{"prefix":"Controller.mouseMoveEvent","body":["Controller.mouseMoveEvent(${1:event: MouseEvent})"],"description":"Triggered when the mouse moves."}},
{"Controller.mousePressEvent":{"prefix":"Controller.mousePressEvent","body":["Controller.mousePressEvent(${1:event: MouseEvent})"],"description":"Triggered when a mouse button is pressed."}},
{"Controller.mouseDoublePressEvent":{"prefix":"Controller.mouseDoublePressEvent","body":["Controller.mouseDoublePressEvent(${1:event: MouseEvent})"],"description":"Triggered when a mouse button is double-pressed."}},
{"Controller.mouseReleaseEvent":{"prefix":"Controller.mouseReleaseEvent","body":["Controller.mouseReleaseEvent(${1:event: MouseEvent})"],"description":"Triggered when a mouse button is released from being pressed."}},
{"Controller.touchBeginEvent":{"prefix":"Controller.touchBeginEvent","body":["Controller.touchBeginEvent(${1:event: TouchEvent})"],"description":"Triggered when a touch event starts in the Interface window on a touch-enabled display or device."}},
{"Controller.touchEndEvent":{"prefix":"Controller.touchEndEvent","body":["Controller.touchEndEvent(${1:event: TouchEvent})"],"description":"Triggered when a touch event ends in the Interface window on a touch-enabled display or device."}},
{"Controller.touchUpdateEvent":{"prefix":"Controller.touchUpdateEvent","body":["Controller.touchUpdateEvent(${1:event: TouchEvent})"],"description":"Triggered when a touch event update occurs in the Interface window on a touch-enabled display or device."}},
{"Controller.wheelEvent":{"prefix":"Controller.wheelEvent","body":["Controller.wheelEvent(${1:event: WheelEvent})"],"description":"Triggered when the mouse wheel is rotated."}},
{"Desktop":{"prefix":"Desktop","body":["Desktop"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"GooglePoly":{"prefix":"GooglePoly","body":["GooglePoly"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The GooglePoly API allows you to interact with Google Poly models direct from inside High Fidelity."}},
{"GooglePoly.setAPIKey":{"prefix":"GooglePoly.setAPIKey","body":["GooglePoly.setAPIKey(${1:key: string})"]}},
{"GooglePoly.getAssetList":{"prefix":"GooglePoly.getAssetList","body":["GooglePoly.getAssetList(${1:keyword: string},${2:category: string},${3:format: string})"]}},
{"GooglePoly.getFBX":{"prefix":"GooglePoly.getFBX","body":["GooglePoly.getFBX(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getOBJ":{"prefix":"GooglePoly.getOBJ","body":["GooglePoly.getOBJ(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getBlocks":{"prefix":"GooglePoly.getBlocks","body":["GooglePoly.getBlocks(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getGLTF":{"prefix":"GooglePoly.getGLTF","body":["GooglePoly.getGLTF(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getGLTF2":{"prefix":"GooglePoly.getGLTF2","body":["GooglePoly.getGLTF2(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getTilt":{"prefix":"GooglePoly.getTilt","body":["GooglePoly.getTilt(${1:keyword: string},${2:category: string})"]}},
{"GooglePoly.getModelInfo":{"prefix":"GooglePoly.getModelInfo","body":["GooglePoly.getModelInfo(${1:input: string})"]}},
{"HMD":{"prefix":"HMD","body":["HMD"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The HMD API provides access to the HMD used in VR display mode."}},
{"HMD.calculateRayUICollisionPoint":{"prefix":"HMD.calculateRayUICollisionPoint","body":["HMD.calculateRayUICollisionPoint(${1:position: Vec3},${2:direction: Vec3})"],"description":"Calculate the intersection of a ray with the HUD overlay."}},
{"HMD.overlayFromWorldPoint":{"prefix":"HMD.overlayFromWorldPoint","body":["HMD.overlayFromWorldPoint(${1:position: Vec3})"],"description":"Get the 2D HUD overlay coordinates of a 3D point on the HUD overlay.\r2D HUD overlay coordinates are pixels with the origin at the top left of the overlay."}},
{"HMD.worldPointFromOverlay":{"prefix":"HMD.worldPointFromOverlay","body":["HMD.worldPointFromOverlay(${1:coordinates: Vec2})"],"description":"Get the 3D world coordinates of a 2D point on the HUD overlay.\r2D HUD overlay coordinates are pixels with the origin at the top left of the overlay."}},
{"HMD.sphericalToOverlay":{"prefix":"HMD.sphericalToOverlay","body":["HMD.sphericalToOverlay(${1:sphericalPos: Vec2})"],"description":"Get the 2D point on the HUD overlay represented by given spherical coordinates. \r2D HUD overlay coordinates are pixels with the origin at the top left of the overlay.\rSpherical coordinates are polar coordinates in radians with <code>{ x: 0, y: 0 }</code> being the center of the HUD \roverlay."}},
{"HMD.overlayToSpherical":{"prefix":"HMD.overlayToSpherical","body":["HMD.overlayToSpherical(${1:overlayPos: Vec2})"],"description":"Get the spherical coordinates of a 2D point on the HUD overlay.\r2D HUD overlay coordinates are pixels with the origin at the top left of the overlay.\rSpherical coordinates are polar coordinates in radians with <code>{ x: 0, y: 0 }</code> being the center of the HUD\roverlay."}},
{"HMD.centerUI":{"prefix":"HMD.centerUI","body":["HMD.centerUI"],"description":"Recenter the HMD HUD to the current HMD position and orientation."}},
{"HMD.preferredAudioInput":{"prefix":"HMD.preferredAudioInput","body":["HMD.preferredAudioInput"],"description":"Get the name of the HMD audio input device."}},
{"HMD.preferredAudioOutput":{"prefix":"HMD.preferredAudioOutput","body":["HMD.preferredAudioOutput"],"description":"Get the name of the HMD audio output device."}},
{"HMD.isHMDAvailable":{"prefix":"HMD.isHMDAvailable","body":["HMD.isHMDAvailable(${1:name: string})"],"description":"Check whether there is an HMD available."}},
{"HMD.isHeadControllerAvailable":{"prefix":"HMD.isHeadControllerAvailable","body":["HMD.isHeadControllerAvailable(${1:name: string})"],"description":"Check whether there is an HMD head controller available."}},
{"HMD.isHandControllerAvailable":{"prefix":"HMD.isHandControllerAvailable","body":["HMD.isHandControllerAvailable(${1:name: string})"],"description":"Check whether there are HMD hand controllers available."}},
{"HMD.isSubdeviceContainingNameAvailable":{"prefix":"HMD.isSubdeviceContainingNameAvailable","body":["HMD.isSubdeviceContainingNameAvailable(${1:name: string})"],"description":"Check whether there are specific HMD controllers available."}},
{"HMD.requestShowHandControllers":{"prefix":"HMD.requestShowHandControllers","body":["HMD.requestShowHandControllers"],"description":"Signal that models of the HMD hand controllers being used should be displayed. The models are displayed at their actual, \rreal-world locations."}},
{"HMD.requestHideHandControllers":{"prefix":"HMD.requestHideHandControllers","body":["HMD.requestHideHandControllers"],"description":"Signal that it is no longer necessary to display models of the HMD hand controllers being used. If no other scripts \rwant the models displayed then they are no longer displayed."}},
{"HMD.shouldShowHandControllers":{"prefix":"HMD.shouldShowHandControllers","body":["HMD.shouldShowHandControllers"],"description":"Check whether any script wants models of the HMD hand controllers displayed. Requests are made and canceled using \r{@link HMD.requestShowHandControllers|requestShowHandControllers} and \r{@link HMD.requestHideHandControllers|requestHideHandControllers}."}},
{"HMD.activateHMDHandMouse":{"prefix":"HMD.activateHMDHandMouse","body":["HMD.activateHMDHandMouse"],"description":"Causes the borders in HUD windows to be enlarged when the laser intersects them in HMD mode. By default, borders are not \renlarged."}},
{"HMD.deactivateHMDHandMouse":{"prefix":"HMD.deactivateHMDHandMouse","body":["HMD.deactivateHMDHandMouse"],"description":"Causes the border in HUD windows to no longer be enlarged when the laser intersects them in HMD mode. By default, \rborders are not enlarged."}},
{"HMD.suppressKeyboard":{"prefix":"HMD.suppressKeyboard","body":["HMD.suppressKeyboard"],"description":"Suppress the activation of the HMD-provided keyboard, if any. Successful calls should be balanced with a call to \r{@link HMD.unspressKeyboard|unspressKeyboard} within a reasonable amount of time."}},
{"HMD.unsuppressKeyboard":{"prefix":"HMD.unsuppressKeyboard","body":["HMD.unsuppressKeyboard"],"description":"Unsuppress the activation of the HMD-provided keyboard, if any."}},
{"HMD.isKeyboardVisible":{"prefix":"HMD.isKeyboardVisible","body":["HMD.isKeyboardVisible"],"description":"Check whether the HMD-provided keyboard, if any, is visible."}},
{"HMD.closeTablet":{"prefix":"HMD.closeTablet","body":["HMD.closeTablet"],"description":"Closes the tablet if it is open."}},
{"HMD.openTablet":{"prefix":"HMD.openTablet","body":["HMD.openTablet(${1:contextualMode: boolean})"],"description":"Opens the tablet if the tablet is used in the current display mode and it isn't already showing, and sets the tablet to \rcontextual mode if requested. In contextual mode, the page displayed on the tablet is wholly controlled by script (i.e., \rthe user cannot navigate to another)."}},
{"HMD.shouldShowHandControllersChanged":{"prefix":"HMD.shouldShowHandControllersChanged","body":["HMD.shouldShowHandControllersChanged"],"description":"Triggered when a request to show or hide models of the HMD hand controllers is made using \r{@link HMD.requestShowHandControllers|requestShowHandControllers} or\r{@link HMD.requestHideHandControllers|requestHideHandControllers}."}},
{"Menu":{"prefix":"Menu","body":["Menu"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Menu API provides access to the menu that is displayed at the top of the window\ron a user's desktop and in the tablet when the \"MENU\" button is pressed.\r\r<p />\r\r<h3>Groupings</h3>\r\rA \"grouping\" provides a way to group a set of menus or menu items together so \rthat they can all be set visible or invisible as a group. \rThere are two available groups: <code>\"Advanced\"</code> and <code>\"Developer\"</code>.\rThese groupings can be toggled in the \"Settings\" menu.\rIf a menu item doesn't belong to a group it is always displayed."}},
{"Menu.addMenu":{"prefix":"Menu.addMenu","body":["Menu.addMenu(${1:menuName: string},${2:grouping: string})"],"description":"Add a new top-level menu."}},
{"Menu.removeMenu":{"prefix":"Menu.removeMenu","body":["Menu.removeMenu(${1:menuName: string})"],"description":"Remove a top-level menu."}},
{"Menu.menuExists":{"prefix":"Menu.menuExists","body":["Menu.menuExists(${1:menuName: string})"],"description":"Check whether a top-level menu exists."}},
{"Menu.addSeparator":{"prefix":"Menu.addSeparator","body":["Menu.addSeparator(${1:menuName: string},${2:separatorName: string})"],"description":"Add a separator with an unclickable label below it. The separator will be placed at the bottom of the menu.\rIf you want to add a separator at a specific point in the menu, use {@link Menu.addMenuItem} with\r{@link Menu.MenuItemProperties} instead."}},
{"Menu.removeSeparator":{"prefix":"Menu.removeSeparator","body":["Menu.removeSeparator(${1:menuName: string},${2:separatorName: string})"],"description":"Remove a separator from a menu."}},
{"Menu.addMenuItem":{"prefix":"Menu.addMenuItem","body":["Menu.addMenuItem(${1:properties: Menu.MenuItemProperties})"],"description":"Add a new menu item to a menu."}},
{"Menu.addMenuItem":{"prefix":"Menu.addMenuItem","body":["Menu.addMenuItem(${1:menuName: string},${2:menuItem: string},${3:shortcutKey: string})"],"description":"Add a new menu item to a menu. The new item is added at the end of the menu."}},
{"Menu.removeMenuItem":{"prefix":"Menu.removeMenuItem","body":["Menu.removeMenuItem(${1:menuName: string},${2:menuItem: string})"],"description":"Remove a menu item from a menu."}},
{"Menu.menuItemExists":{"prefix":"Menu.menuItemExists","body":["Menu.menuItemExists(${1:menuName: string},${2:menuItem: string})"],"description":"Check if a menu item exists."}},
{"Menu.isOptionChecked":{"prefix":"Menu.isOptionChecked","body":["Menu.isOptionChecked(${1:menuOption: string})"],"description":"Check whether a checkable menu item is checked."}},
{"Menu.setIsOptionChecked":{"prefix":"Menu.setIsOptionChecked","body":["Menu.setIsOptionChecked(${1:menuOption: string},${2:isChecked: boolean})"],"description":"Set a checkable menu item as checked or unchecked."}},
{"Menu.triggerOption":{"prefix":"Menu.triggerOption","body":["Menu.triggerOption(${1:menuOption: string})"],"description":"Trigger the menu item as if the user clicked on it."}},
{"Menu.isMenuEnabled":{"prefix":"Menu.isMenuEnabled","body":["Menu.isMenuEnabled(${1:menuName: string})"],"description":"Check whether a menu or menu item is enabled. If disabled, the item is grayed out and unusable.\rMenus are enabled by default."}},
{"Menu.setMenuEnabled":{"prefix":"Menu.setMenuEnabled","body":["Menu.setMenuEnabled(${1:menuName: string},${2:isEnabled: boolean})"],"description":"Set a menu or menu item to be enabled or disabled. If disabled, the item is grayed out and unusable."}},
{"Menu.menuItemEvent":{"prefix":"Menu.menuItemEvent","body":["Menu.menuItemEvent(${1:menuItem: string})"],"description":"Triggered when a menu item is clicked (or triggered by {@link Menu.triggerOption})."}},
{"Selection.ItemType":{"prefix":"Selection.ItemType","body":["Selection.ItemType"],"description":"<table>\r <thead>\r <tr><th>Value</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>\"avatar\"</code></td><td></td></tr>\r <tr><td><code>\"entity\"</code></td><td></td></tr>\r <tr><td><code>\"overlay\"</code></td><td></td></tr>\r </tbody>\r</table>"}},
{"Selection.SelectedItemsList":{"prefix":"Selection.SelectedItemsList","body":["Selection.SelectedItemsList"]}},
{"Selection.HighlightStyle":{"prefix":"Selection.HighlightStyle","body":["Selection.HighlightStyle"]}},
{"Selection":{"prefix":"Selection","body":["Selection"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The <code>Selection</code> API provides a means of grouping together avatars, entities, and overlays in named lists."}},
{"Selection.getListNames":{"prefix":"Selection.getListNames","body":["Selection.getListNames"],"description":"Get the names of all the selection lists."}},
{"Selection.removeListFromMap":{"prefix":"Selection.removeListFromMap","body":["Selection.removeListFromMap(${1:listName: string})"],"description":"Delete a named selection list."}},
{"Selection.addToSelectedItemsList":{"prefix":"Selection.addToSelectedItemsList","body":["Selection.addToSelectedItemsList(${1:listName: string},${2:itemType: Selection.ItemType},${3:id: Uuid})"],"description":"Add an item to a selection list."}},
{"Selection.removeFromSelectedItemsList":{"prefix":"Selection.removeFromSelectedItemsList","body":["Selection.removeFromSelectedItemsList(${1:listName: string},${2:itemType: Selection.ItemType},${3:id: Uuid})"],"description":"Remove an item from a selection list."}},
{"Selection.clearSelectedItemsList":{"prefix":"Selection.clearSelectedItemsList","body":["Selection.clearSelectedItemsList(${1:listName: string})"],"description":"Remove all items from a selection."}},
{"Selection.printList":{"prefix":"Selection.printList","body":["Selection.printList(${1:listName: string})"],"description":"Print out the list of avatars, entities, and overlays in a selection to the <em>debug log</em> (not the script log)."}},
{"Selection.getSelectedItemsList":{"prefix":"Selection.getSelectedItemsList","body":["Selection.getSelectedItemsList(${1:listName: string})"],"description":"Get the list of avatars, entities, and overlays stored in a selection list."}},
{"Selection.getHighlightedListNames":{"prefix":"Selection.getHighlightedListNames","body":["Selection.getHighlightedListNames"],"description":"Get the names of the highlighted selection lists."}},
{"Selection.enableListHighlight":{"prefix":"Selection.enableListHighlight","body":["Selection.enableListHighlight(${1:listName: string},${2:highlightStyle: Selection.HighlightStyle})"],"description":"Enable highlighting for a selection list.\rIf the selection list doesn't exist, it will be created.\rAll objects in the list will be displayed with the highlight effect specified.\rThe function can be called several times with different values in the style to modify it.<br />\rNote: This function implicitly calls {@link Selection.enableListToScene}."}},
{"Selection.disableListHighlight":{"prefix":"Selection.disableListHighlight","body":["Selection.disableListHighlight(${1:listName: string})"],"description":"Disable highlighting for the selection list.\rIf the selection list doesn't exist or wasn't enabled for highlighting then nothing happens and <code>false</code> is\rreturned.<br />\rNote: This function implicitly calls {@link Selection.disableListToScene}."}},
{"Selection.enableListToScene":{"prefix":"Selection.enableListToScene","body":["Selection.enableListToScene(${1:listName: string})"],"description":"Enable scene selection for the selection list.\rIf the Selection doesn't exist, it will be created.\rAll objects in the list will be sent to a scene selection."}},
{"Selection.disableListToScene":{"prefix":"Selection.disableListToScene","body":["Selection.disableListToScene(${1:listName: string})"],"description":"Disable scene selection for the named selection.\rIf the selection list doesn't exist or wasn't enabled on the scene then nothing happens and <code>false</code> is\rreturned."}},
{"Selection.getListHighlightStyle":{"prefix":"Selection.getListHighlightStyle","body":["Selection.getListHighlightStyle(${1:listName: string})"],"description":"Get the highlight style values for the a selection list.\rIf the selection doesn't exist or hasn't been highlight enabled yet, an empty object is returned."}},
{"Selection.selectedItemsListChanged":{"prefix":"Selection.selectedItemsListChanged","body":["Selection.selectedItemsListChanged(${1:listName: string})"],"description":"Triggered when a list's content changes."}},
{"Settings":{"prefix":"Settings","body":["Settings"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Settings API provides a facility to store and retrieve values that persist between Interface runs."}},
{"Settings.getValue":{"prefix":"Settings.getValue","body":["Settings.getValue(${1:key: string},${2:defaultValue: string})"],"description":"Retrieve the value from a named setting."}},
{"Settings.setValue":{"prefix":"Settings.setValue","body":["Settings.setValue(${1:key: string},${2:value: string})"],"description":"Store a value in a named setting. If the setting already exists its value is overwritten, otherwise a new setting is \rcreated. If the value is set to <code>null</code> or <code>undefined</code>, the setting is deleted."}},
{"Test.quit":{"prefix":"Test.quit","body":["Test.quit"],"description":"Exits the application"}},
{"Test.waitForTextureIdle":{"prefix":"Test.waitForTextureIdle","body":["Test.waitForTextureIdle"],"description":"Waits for all texture transfers to be complete"}},
{"Test.waitForDownloadIdle":{"prefix":"Test.waitForDownloadIdle","body":["Test.waitForDownloadIdle"],"description":"Waits for all pending downloads to be complete"}},
{"Test.waitForProcessingIdle":{"prefix":"Test.waitForProcessingIdle","body":["Test.waitForProcessingIdle"],"description":"Waits for all file parsing operations to be complete"}},
{"Test.waitIdle":{"prefix":"Test.waitIdle","body":["Test.waitIdle"],"description":"Waits for all pending downloads, parsing and texture transfers to be complete"}},
{"Test.waitForConnection":{"prefix":"Test.waitForConnection","body":["Test.waitForConnection(${1:maxWaitMs: int})"],"description":"Waits for establishment of connection to server"}},
{"Test.wait":{"prefix":"Test.wait","body":["Test.wait(${1:milliseconds: int})"],"description":"Waits a specific number of milliseconds"}},
{"Test.loadTestScene":{"prefix":"Test.loadTestScene","body":["Test.loadTestScene(${1:sceneFile: string})"],"description":"Waits for all pending downloads, parsing and texture transfers to be complete"}},
{"Test.clear":{"prefix":"Test.clear","body":["Test.clear"],"description":"Clears all caches"}},
{"Test.startTracing":{"prefix":"Test.startTracing","body":["Test.startTracing(${1:logrules: string})"],"description":"Start recording Chrome compatible tracing events\rlogRules can be used to specify a set of logging category rules to limit what gets captured"}},
{"Test.stopTracing":{"prefix":"Test.stopTracing","body":["Test.stopTracing(${1:filename: string})"],"description":"Stop recording Chrome compatible tracing events and serialize recorded events to a file\rUsing a filename with a .gz extension will automatically compress the output file"}},
{"Test.startTraceEvent":{"prefix":"Test.startTraceEvent","body":["Test.startTraceEvent(${1:name: string})"],"description":"Starts a specific trace event"}},
{"Test.endTraceEvent":{"prefix":"Test.endTraceEvent","body":["Test.endTraceEvent(${1:filename: string})"],"description":"Stop a specific name event\rUsing a filename with a .gz extension will automatically compress the output file"}},
{"Test.savePhysicsSimulationStats":{"prefix":"Test.savePhysicsSimulationStats","body":["Test.savePhysicsSimulationStats(${1:filename: string})"],"description":"Write detailed timing stats of next physics stepSimulation() to filename"}},
{"Test.savePhysicsSimulationStats":{"prefix":"Test.savePhysicsSimulationStats","body":["Test.savePhysicsSimulationStats(${1:name: string},${2:function: function})"],"description":"Profiles a specific function"}},
{"Test.clearCaches":{"prefix":"Test.clearCaches","body":["Test.clearCaches"],"description":"Clear all caches (menu command Reload Content)"}},
{"Test.saveObject":{"prefix":"Test.saveObject","body":["Test.saveObject(${1:name: string},${2:filename: string})"],"description":"Save a JSON object to a file in the test results location"}},
{"Test.showMaximized":{"prefix":"Test.showMaximized","body":["Test.showMaximized"],"description":"Maximizes the window"}},
{"Test.setOtherAvatarsReplicaCount":{"prefix":"Test.setOtherAvatarsReplicaCount","body":["Test.setOtherAvatarsReplicaCount(${1:count: number})"],"description":"Values higher than 0 will create replicas of other-avatars when entering a domain for testing purpouses"}},
{"Test.getOtherAvatarsReplicaCount":{"prefix":"Test.getOtherAvatarsReplicaCount","body":["Test.getOtherAvatarsReplicaCount"],"description":"Return the number of replicas that are being created of other-avatars when entering a domain"}},
{"Wallet":{"prefix":"Wallet","body":["Wallet"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"Wallet.refreshWalletStatus":{"prefix":"Wallet.refreshWalletStatus","body":["Wallet.refreshWalletStatus"]}},
{"Wallet.getWalletStatus":{"prefix":"Wallet.getWalletStatus","body":["Wallet.getWalletStatus"]}},
{"Wallet.proveAvatarEntityOwnershipVerification":{"prefix":"Wallet.proveAvatarEntityOwnershipVerification","body":["Wallet.proveAvatarEntityOwnershipVerification(${1:entityID: Uuid})"]}},
{"Wallet.walletStatusChanged":{"prefix":"Wallet.walletStatusChanged","body":["Wallet.walletStatusChanged"]}},
{"Wallet.walletNotSetup":{"prefix":"Wallet.walletNotSetup","body":["Wallet.walletNotSetup"]}},
{"Wallet.ownershipVerificationSuccess":{"prefix":"Wallet.ownershipVerificationSuccess","body":["Wallet.ownershipVerificationSuccess(${1:entityID: Uuid})"]}},
{"Wallet.ownershipVerificationFailed":{"prefix":"Wallet.ownershipVerificationFailed","body":["Wallet.ownershipVerificationFailed(${1:entityID: Uuid})"]}},
{"Window.MessageBoxButton":{"prefix":"Window.MessageBoxButton","body":["Window.MessageBoxButton"],"description":"<p>The buttons that may be included in a message box created by {@link Window.openMessageBox|openMessageBox} are defined by\rnumeric values:\r<table>\r <thead>\r <tr>\r <th>Button</th>\r <th>Value</th>\r <th>Description</th>\r </tr>\r </thead>\r <tbody>\r <tr> <td><strong>NoButton</strong></td> <td><code>0x0</code></td> <td>An invalid button.</td> </tr>\r <tr> <td><strong>Ok</strong></td> <td><code>0x400</code></td> <td>\"OK\"</td> </tr>\r <tr> <td><strong>Save</strong></td> <td><code>0x800</code></td> <td>\"Save\"</td> </tr>\r <tr> <td><strong>SaveAll</strong></td> <td><code>0x1000</code></td> <td>\"Save All\"</td> </tr>\r <tr> <td><strong>Open</strong></td> <td><code>0x2000</code></td> <td>\"Open\"</td> </tr>\r <tr> <td><strong>Yes</strong></td> <td><code>0x4000</code></td> <td>\"Yes\"</td> </tr>\r <tr> <td><strong>YesToAll</strong></td> <td><code>0x8000</code></td> <td>\"Yes to All\"</td> </tr>\r <tr> <td><strong>No</strong></td> <td><code>0x10000</code></td> <td>\"No\"</td> </tr>\r <tr> <td><strong>NoToAll</strong></td> <td><code>0x20000</code></td> <td>\"No to All\"</td> </tr>\r <tr> <td><strong>Abort</strong></td> <td><code>0x40000</code></td> <td>\"Abort\"</td> </tr>\r <tr> <td><strong>Retry</strong></td> <td><code>0x80000</code></td> <td>\"Retry\"</td> </tr>\r <tr> <td><strong>Ignore</strong></td> <td><code>0x100000</code></td> <td>\"Ignore\"</td> </tr>\r <tr> <td><strong>Close</strong></td> <td><code>0x200000</code></td> <td>\"Close\"</td> </tr>\r <tr> <td><strong>Cancel</strong></td> <td><code>0x400000</code></td> <td>\"Cancel\"</td> </tr>\r <tr> <td><strong>Discard</strong></td> <td><code>0x800000</code></td> <td>\"Discard\" or \"Don't Save\"</td> </tr>\r <tr> <td><strong>Help</strong></td> <td><code>0x1000000</code></td> <td>\"Help\"</td> </tr>\r <tr> <td><strong>Apply</strong></td> <td><code>0x2000000</code></td> <td>\"Apply\"</td> </tr>\r <tr> <td><strong>Reset</strong></td> <td><code>0x4000000</code></td> <td>\"Reset\"</td> </tr>\r <tr> <td><strong>RestoreDefaults</strong></td> <td><code>0x8000000</code></td> <td>\"Restore Defaults\"</td> </tr>\r </tbody>\r</table>"}},
{"Window":{"prefix":"Window","body":["Window"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Window API provides various facilities not covered elsewhere: window dimensions, window focus, normal or entity camera\rview, clipboard, announcements, user connections, common dialog boxes, snapshots, file import, domain changes, domain \rphysics."}},
{"Window.hasFocus":{"prefix":"Window.hasFocus","body":["Window.hasFocus"],"description":"Check if the Interface window has focus."}},
{"Window.setFocus":{"prefix":"Window.setFocus","body":["Window.setFocus"],"description":"Make the Interface window have focus. On Windows, if Interface doesn't already have focus, the task bar icon flashes to \rindicate that Interface wants attention but focus isn't taken away from the application that the user is using."}},
{"Window.raise":{"prefix":"Window.raise","body":["Window.raise"],"description":"Raise the Interface window if it is minimized. If raised, the window gains focus."}},
{"Window.alert":{"prefix":"Window.alert","body":["Window.alert(${1:message: string})"],"description":"Display a dialog with the specified message and an \"OK\" button. The dialog is non-modal; the script continues without\rwaiting for a user response."}},
{"Window.confirm":{"prefix":"Window.confirm","body":["Window.confirm(${1:message: string})"],"description":"Prompt the user to confirm something. Displays a modal dialog with a message plus \"Yes\" and \"No\" buttons.\rresponds."}},
{"Window.prompt":{"prefix":"Window.prompt","body":["Window.prompt(${1:message: string},${2:defaultText: string})"],"description":"Prompt the user to enter some text. Displays a modal dialog with a message and a text box, plus \"OK\" and \"Cancel\" \rbuttons."}},
{"Window.promptAsync":{"prefix":"Window.promptAsync","body":["Window.promptAsync(${1:message: string},${2:defaultText: string})"],"description":"Prompt the user to enter some text. Displays a non-modal dialog with a message and a text box, plus \"OK\" and \"Cancel\" \rbuttons. A {@link Window.promptTextChanged|promptTextChanged} signal is emitted when the user OKs the dialog; no signal \ris emitted if the user cancels the dialog."}},
{"Window.browseDir":{"prefix":"Window.browseDir","body":["Window.browseDir(${1:title: string},${2:directory: string})"],"description":"Prompt the user to choose a directory. Displays a modal dialog that navigates the directory tree."}},
{"Window.browseDirAsync":{"prefix":"Window.browseDirAsync","body":["Window.browseDirAsync(${1:title: string},${2:directory: string})"],"description":"Prompt the user to choose a directory. Displays a non-modal dialog that navigates the directory tree. A\r{@link Window.browseDirChanged|browseDirChanged} signal is emitted when a directory is chosen; no signal is emitted if\rthe user cancels the dialog."}},
{"Window.browse":{"prefix":"Window.browse","body":["Window.browse(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to choose a file. Displays a modal dialog that navigates the directory tree."}},
{"Window.browseAsync":{"prefix":"Window.browseAsync","body":["Window.browseAsync(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to choose a file. Displays a non-modal dialog that navigates the directory tree. A\r{@link Window.browseChanged|browseChanged} signal is emitted when a file is chosen; no signal is emitted if the user\rcancels the dialog."}},
{"Window.save":{"prefix":"Window.save","body":["Window.save(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to specify the path and name of a file to save to. Displays a model dialog that navigates the directory\rtree and allows the user to type in a file name."}},
{"Window.saveAsync":{"prefix":"Window.saveAsync","body":["Window.saveAsync(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to specify the path and name of a file to save to. Displays a non-model dialog that navigates the\rdirectory tree and allows the user to type in a file name. A {@link Window.saveFileChanged|saveFileChanged} signal is\remitted when a file is specified; no signal is emitted if the user cancels the dialog."}},
{"Window.browseAssets":{"prefix":"Window.browseAssets","body":["Window.browseAssets(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to choose an Asset Server item. Displays a modal dialog that navigates the tree of assets on the Asset\rServer."}},
{"Window.browseAssetsAsync":{"prefix":"Window.browseAssetsAsync","body":["Window.browseAssetsAsync(${1:title: string},${2:directory: string},${3:nameFilter: string})"],"description":"Prompt the user to choose an Asset Server item. Displays a non-modal dialog that navigates the tree of assets on the \rAsset Server. A {@link Window.assetsDirChanged|assetsDirChanged} signal is emitted when an asset is chosen; no signal is\remitted if the user cancels the dialog."}},
{"Window.showAssetServer":{"prefix":"Window.showAssetServer","body":["Window.showAssetServer(${1:uploadFile: string})"],"description":"Open the Asset Browser dialog. If a file to upload is specified, the user is prompted to enter the folder and name to\rmap the file to on the asset server."}},
{"Window.checkVersion":{"prefix":"Window.checkVersion","body":["Window.checkVersion"],"description":"Get Interface's build number."}},
{"Window.protocolSignature":{"prefix":"Window.protocolSignature","body":["Window.protocolSignature"],"description":"Get the signature for Interface's protocol version."}},
{"Window.copyToClipboard":{"prefix":"Window.copyToClipboard","body":["Window.copyToClipboard(${1:text: string})"],"description":"Copies text to the operating system's clipboard."}},
{"Window.takeSnapshot":{"prefix":"Window.takeSnapshot","body":["Window.takeSnapshot(${1:notify: boolean},${2:includeAnimated: boolean},${3:aspectRatio: number},${4:filename: string})"],"description":"Takes a snapshot of the current Interface view from the primary camera. When a still image only is captured, \r{@link Window.stillSnapshotTaken|stillSnapshotTaken} is emitted; when a still image plus moving images are captured, \r{@link Window.processingGifStarted|processingGifStarted} and {@link Window.processingGifCompleted|processingGifCompleted}\rare emitted. The path to store the snapshots and the length of the animated GIF to capture are specified in Settings >\rGeneral > Snapshots.\r\rIf user has supplied a specific filename for the snapshot:\r If the user's requested filename has a suffix that's contained within SUPPORTED_IMAGE_FORMATS,\r DON'T append \".jpg\" to the filename. QT will save the image in the format associated with the\r filename's suffix.\r If you want lossless Snapshots, supply a `.png` filename. Otherwise, use `.jpeg` or `.jpg`.\r Otherwise, \".jpg\" is appended to the user's requested filename so that the image is saved in JPG format.\rIf the user hasn't supplied a specific filename for the snapshot:\r Save the snapshot in JPG format according to FILENAME_PATH_FORMAT"}},
{"Window.takeSecondaryCameraSnapshot":{"prefix":"Window.takeSecondaryCameraSnapshot","body":["Window.takeSecondaryCameraSnapshot(${1:notify: boolean},${2:filename: string})"],"description":"Takes a still snapshot of the current view from the secondary camera that can be set up through the {@link Render} API."}},
{"Window.takeSecondaryCamera360Snapshot":{"prefix":"Window.takeSecondaryCamera360Snapshot","body":["Window.takeSecondaryCamera360Snapshot(${1:cameraPosition: Vec3},${2:cubemapOutputFormat: boolean},${3:notify: boolean},${4:filename: string})"],"description":"Takes a 360° snapshot at a given position for the secondary camera. The secondary camera does not need to have been \r set up."}},
{"Window.makeConnection":{"prefix":"Window.makeConnection","body":["Window.makeConnection(${1:success: boolean},${2:description: string})"],"description":"Emit a {@link Window.connectionAdded|connectionAdded} or a {@link Window.connectionError|connectionError} signal that\rindicates whether or not a user connection was successfully made using the Web API."}},
{"Window.displayAnnouncement":{"prefix":"Window.displayAnnouncement","body":["Window.displayAnnouncement(${1:message: string})"],"description":"Display a notification message. Notifications are displayed in panels by the default script, nofications.js. An\r{@link Window.announcement|announcement} signal is emitted when this function is called."}},
{"Window.shareSnapshot":{"prefix":"Window.shareSnapshot","body":["Window.shareSnapshot(${1:path: string},${2:href: string})"],"description":"Prepare a snapshot ready for sharing. A {@link Window.snapshotShared|snapshotShared} signal is emitted when the snapshot\rhas been prepared."}},
{"Window.isPhysicsEnabled":{"prefix":"Window.isPhysicsEnabled","body":["Window.isPhysicsEnabled"],"description":"Check to see if physics is active for you in the domain you're visiting - there is a delay between your arrival at a\rdomain and physics becoming active for you in that domain."}},
{"Window.setDisplayTexture":{"prefix":"Window.setDisplayTexture","body":["Window.setDisplayTexture(${1:texture: Window.DisplayTexture})"],"description":"Set what to show on the PC display: normal view or entity camera view. The entity camera is configured using\r{@link Camera.setCameraEntity} and {@link Camera|Camera.mode}."}},
{"Window.DisplayTexture":{"prefix":"Window.DisplayTexture","body":["Window.DisplayTexture"],"description":"<p>The views that may be displayed on the PC display.</p>\r<table>\r <thead>\r <tr>\r <th>Value</th>\r <th>View Displayed</th>\r </tr>\r </thead>\r <tbody>\r <tr>\r <td><code>\"\"</code></td>\r <td>Normal view.</td>\r </tr>\r <tr>\r <td><code>\"resource://spectatorCameraFrame\"</code></td>\r <td>Entity camera view.</td>\r </tr>\r </tbody>\r</table>"}},
{"Window.isPointOnDesktopWindow":{"prefix":"Window.isPointOnDesktopWindow","body":["Window.isPointOnDesktopWindow(${1:point: Vec2})"],"description":"Check if a 2D point is within the desktop window if in desktop mode, or the drawable area of the HUD overlay if in HMD\rmode."}},
{"Window.getDeviceSize":{"prefix":"Window.getDeviceSize","body":["Window.getDeviceSize"],"description":"Get the size of the drawable area of the Interface window if in desktop mode or the HMD rendering surface if in HMD mode."}},
{"Window.getLastDomainConnectionError":{"prefix":"Window.getLastDomainConnectionError","body":["Window.getLastDomainConnectionError"],"description":"Gets the last domain connection error when a connection is refused."}},
{"Window.openMessageBox":{"prefix":"Window.openMessageBox","body":["Window.openMessageBox(${1:title: string},${2:text: string},${3:buttons: Window.MessageBoxButton},${4:defaultButton: Window.MessageBoxButton})"],"description":"Open a non-modal message box that can have a variety of button combinations. See also, \r{@link Window.updateMessageBox|updateMessageBox} and {@link Window.closeMessageBox|closeMessageBox}."}},
{"Window.openUrl":{"prefix":"Window.openUrl","body":["Window.openUrl(${1:url: string})"],"description":"Open a URL in the Interface window or other application, depending on the URL's scheme. If the URL starts with \r<code>hifi://</code> then that URL is navigated to in Interface, otherwise the URL is opened in the application the OS \rassociates with the URL's scheme (e.g., a Web browser for <code>http://</code>)."}},
{"Window.openAndroidActivity":{"prefix":"Window.openAndroidActivity","body":["Window.openAndroidActivity(${1:activityName: string},${2:backToScene: boolean})"],"description":"Open an Android activity and optionally return back to the scene when the activity is completed. <em>Android only.</em>"}},
{"Window.updateMessageBox":{"prefix":"Window.updateMessageBox","body":["Window.updateMessageBox(${1:id: number},${2:title: string},${3:text: string},${4:buttons: Window.MessageBoxButton},${5:defaultButton: Window.MessageBoxButton})"],"description":"Update the content of a message box that was opened with {@link Window.openMessageBox|openMessageBox}."}},
{"Window.closeMessageBox":{"prefix":"Window.closeMessageBox","body":["Window.closeMessageBox(${1:id: number})"],"description":"Close a message box that was opened with {@link Window.openMessageBox|openMessageBox}."}},
{"Window.domainChanged":{"prefix":"Window.domainChanged","body":["Window.domainChanged(${1:domainURL: string})"],"description":"Triggered when you change the domain you're visiting. <strong>Warning:</strong> Is not emitted if you go to a domain \rthat isn't running."}},
{"Window.svoImportRequested":{"prefix":"Window.svoImportRequested","body":["Window.svoImportRequested(${1:url: string})"],"description":"Triggered when you try to navigate to a *.json, *.svo, or *.svo.json URL in a Web browser within Interface."}},
{"Window.domainConnectionRefused":{"prefix":"Window.domainConnectionRefused","body":["Window.domainConnectionRefused(${1:reasonMessage: string},${2:reasonCode: Window.ConnectionRefusedReason},${3:extraInfo: string})"],"description":"Triggered when you try to visit a domain but are refused connection."}},
{"Window.redirectErrorStateChanged":{"prefix":"Window.redirectErrorStateChanged","body":["Window.redirectErrorStateChanged(${1:isInErrorState: boolean})"],"description":"Triggered when you try to visit a domain but are redirected into the error state."}},
{"Window.stillSnapshotTaken":{"prefix":"Window.stillSnapshotTaken","body":["Window.stillSnapshotTaken(${1:pathStillSnapshot: string},${2:notify: boolean})"],"description":"Triggered when a still snapshot has been taken by calling {@link Window.takeSnapshot|takeSnapshot} with \r <code>includeAnimated = false</code> or {@link Window.takeSecondaryCameraSnapshot|takeSecondaryCameraSnapshot}."}},
{"Window.snapshot360Taken":{"prefix":"Window.snapshot360Taken","body":["Window.snapshot360Taken(${1:pathStillSnapshot: string},${2:notify: boolean})"],"description":"Triggered when a still 360° snapshot has been taken by calling \r {@link Window.takeSecondaryCamera360Snapshot|takeSecondaryCamera360Snapshot}."}},
{"Window.snapshotShared":{"prefix":"Window.snapshotShared","body":["Window.snapshotShared(${1:isError: boolean},${2:reply: string})"],"description":"Triggered when a snapshot submitted via {@link Window.shareSnapshot|shareSnapshot} is ready for sharing. The snapshot\rmay then be shared via the {@link Account.metaverseServerURL} Web API."}},
{"Window.processingGifStarted":{"prefix":"Window.processingGifStarted","body":["Window.processingGifStarted(${1:pathStillSnapshot: string})"],"description":"Triggered when the snapshot images have been captured by {@link Window.takeSnapshot|takeSnapshot} and the GIF is\r starting to be processed."}},
{"Window.processingGifCompleted":{"prefix":"Window.processingGifCompleted","body":["Window.processingGifCompleted(${1:pathAnimatedSnapshot: string})"],"description":"Triggered when a GIF has been prepared of the snapshot images captured by {@link Window.takeSnapshot|takeSnapshot}."}},
{"Window.connectionAdded":{"prefix":"Window.connectionAdded","body":["Window.connectionAdded(${1:message: string})"],"description":"Triggered when you've successfully made a user connection."}},
{"Window.connectionError":{"prefix":"Window.connectionError","body":["Window.connectionError(${1:message: string})"],"description":"Triggered when you failed to make a user connection."}},
{"Window.announcement":{"prefix":"Window.announcement","body":["Window.announcement(${1:message: string})"],"description":"Triggered when a message is announced by {@link Window.displayAnnouncement|displayAnnouncement}."}},
{"Window.messageBoxClosed":{"prefix":"Window.messageBoxClosed","body":["Window.messageBoxClosed(${1:id: number},${2:button: number})"],"description":"Triggered when the user closes a message box that was opened with {@link Window.openMessageBox|openMessageBox}."}},
{"Window.browseDirChanged":{"prefix":"Window.browseDirChanged","body":["Window.browseDirChanged(${1:directory: string})"],"description":"Triggered when the user chooses a directory in a {@link Window.browseDirAsync|browseDirAsync} dialog."}},
{"Window.assetsDirChanged":{"prefix":"Window.assetsDirChanged","body":["Window.assetsDirChanged(${1:asset: string})"],"description":"Triggered when the user chooses an asset in a {@link Window.browseAssetsAsync|browseAssetsAsync} dialog."}},
{"Window.saveFileChanged":{"prefix":"Window.saveFileChanged","body":["Window.saveFileChanged(${1:filename: string})"],"description":"Triggered when the user specifies a file in a {@link Window.saveAsync|saveAsync} dialog."}},
{"Window.browseChanged":{"prefix":"Window.browseChanged","body":["Window.browseChanged(${1:filename: string})"],"description":"Triggered when the user chooses a file in a {@link Window.browseAsync|browseAsync} dialog."}},
{"Window.promptTextChanged":{"prefix":"Window.promptTextChanged","body":["Window.promptTextChanged(${1:text: string})"],"description":"Triggered when the user OKs a {@link Window.promptAsync|promptAsync} dialog."}},
{"Window.geometryChanged":{"prefix":"Window.geometryChanged","body":["Window.geometryChanged(${1:geometry: Rect})"],"description":"Triggered when the position or size of the Interface window changes."}},
{"AvatarInputs":{"prefix":"AvatarInputs","body":["AvatarInputs"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>API to help manage your Avatar's input"}},
{"AvatarInputs.loudnessToAudioLevel":{"prefix":"AvatarInputs.loudnessToAudioLevel","body":["AvatarInputs.loudnessToAudioLevel(${1:loudness: number})"]}},
{"AvatarInputs.setShowAudioTools":{"prefix":"AvatarInputs.setShowAudioTools","body":["AvatarInputs.setShowAudioTools(${1:showAudioTools: boolean})"]}},
{"AvatarInputs.cameraEnabledChanged":{"prefix":"AvatarInputs.cameraEnabledChanged","body":["AvatarInputs.cameraEnabledChanged"]}},
{"AvatarInputs.cameraMutedChanged":{"prefix":"AvatarInputs.cameraMutedChanged","body":["AvatarInputs.cameraMutedChanged"]}},
{"AvatarInputs.isHMDChanged":{"prefix":"AvatarInputs.isHMDChanged","body":["AvatarInputs.isHMDChanged"]}},
{"AvatarInputs.showAudioToolsChanged":{"prefix":"AvatarInputs.showAudioToolsChanged","body":["AvatarInputs.showAudioToolsChanged(${1:show: boolean})"]}},
{"AvatarInputs.resetSensors":{"prefix":"AvatarInputs.resetSensors","body":["AvatarInputs.resetSensors"]}},
{"AvatarInputs.toggleCameraMute":{"prefix":"AvatarInputs.toggleCameraMute","body":["AvatarInputs.toggleCameraMute"]}},
{"Snapshot":{"prefix":"Snapshot","body":["Snapshot"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"Snapshot.snapshotLocationSet":{"prefix":"Snapshot.snapshotLocationSet","body":["Snapshot.snapshotLocationSet(${1:location: string})"]}},
{"Snapshot.getSnapshotsLocation":{"prefix":"Snapshot.getSnapshotsLocation","body":["Snapshot.getSnapshotsLocation"]}},
{"Snapshot.setSnapshotsLocation":{"prefix":"Snapshot.setSnapshotsLocation","body":["Snapshot.setSnapshotsLocation(${1:location: String})"]}},
{"Stats":{"prefix":"Stats","body":["Stats"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>"}},
{"Stats.longsubmitsChanged":{"prefix":"Stats.longsubmitsChanged","body":["Stats.longsubmitsChanged"],"description":"Triggered when the value of the <code>longsubmits</code> property changes."}},
{"Stats.longrendersChanged":{"prefix":"Stats.longrendersChanged","body":["Stats.longrendersChanged"],"description":"Triggered when the value of the <code>longrenders</code> property changes."}},
{"Stats.longframesChanged":{"prefix":"Stats.longframesChanged","body":["Stats.longframesChanged"],"description":"Triggered when the value of the <code>longframes</code> property changes."}},
{"Stats.appdroppedChanged":{"prefix":"Stats.appdroppedChanged","body":["Stats.appdroppedChanged"],"description":"Triggered when the value of the <code>appdropped</code> property changes."}},
{"Stats.expandedChanged":{"prefix":"Stats.expandedChanged","body":["Stats.expandedChanged"],"description":"Triggered when the value of the <code>expanded</code> property changes."}},
{"Stats.timingExpandedChanged":{"prefix":"Stats.timingExpandedChanged","body":["Stats.timingExpandedChanged"],"description":"Triggered when the value of the <code>timingExpanded</code> property changes."}},
{"Stats.serverCountChanged":{"prefix":"Stats.serverCountChanged","body":["Stats.serverCountChanged"],"description":"Triggered when the value of the <code>serverCount</code> property changes."}},
{"Stats.renderrateChanged":{"prefix":"Stats.renderrateChanged","body":["Stats.renderrateChanged"],"description":"Triggered when the value of the <code>renderrate</code> property changes."}},
{"Stats.presentrateChanged":{"prefix":"Stats.presentrateChanged","body":["Stats.presentrateChanged"],"description":"Triggered when the value of the <code>presentrate</code> property changes."}},
{"Stats.presentnewrateChanged":{"prefix":"Stats.presentnewrateChanged","body":["Stats.presentnewrateChanged"],"description":"Triggered when the value of the <code>presentnewrate</code> property changes."}},
{"Stats.presentdroprateChanged":{"prefix":"Stats.presentdroprateChanged","body":["Stats.presentdroprateChanged"],"description":"Triggered when the value of the <code>presentdroprate</code> property changes."}},
{"Stats.stutterrateChanged":{"prefix":"Stats.stutterrateChanged","body":["Stats.stutterrateChanged"],"description":"Triggered when the value of the <code>stutterrate</code> property changes."}},
{"Stats.gameLoopRateChanged":{"prefix":"Stats.gameLoopRateChanged","body":["Stats.gameLoopRateChanged"],"description":"Triggered when the value of the <code>gameLoopRate</code> property changes."}},
{"Stats.numPhysicsBodiesChanged":{"prefix":"Stats.numPhysicsBodiesChanged","body":["Stats.numPhysicsBodiesChanged"],"description":"Trigered when"}},
{"Stats.avatarCountChanged":{"prefix":"Stats.avatarCountChanged","body":["Stats.avatarCountChanged"],"description":"Triggered when the value of the <code>avatarCount</code> property changes."}},
{"Stats.updatedAvatarCountChanged":{"prefix":"Stats.updatedAvatarCountChanged","body":["Stats.updatedAvatarCountChanged"],"description":"Triggered when the value of the <code>updatedAvatarCount</code> property changes."}},
{"Stats.notUpdatedAvatarCountChanged":{"prefix":"Stats.notUpdatedAvatarCountChanged","body":["Stats.notUpdatedAvatarCountChanged"],"description":"Triggered when the value of the <code>notUpdatedAvatarCount</code> property changes."}},
{"Stats.packetInCountChanged":{"prefix":"Stats.packetInCountChanged","body":["Stats.packetInCountChanged"],"description":"Triggered when the value of the <code>packetInCount</code> property changes."}},
{"Stats.packetOutCountChanged":{"prefix":"Stats.packetOutCountChanged","body":["Stats.packetOutCountChanged"],"description":"Triggered when the value of the <code>packetOutCount</code> property changes."}},
{"Stats.mbpsInChanged":{"prefix":"Stats.mbpsInChanged","body":["Stats.mbpsInChanged"],"description":"Triggered when the value of the <code>mbpsIn</code> property changes."}},
{"Stats.mbpsOutChanged":{"prefix":"Stats.mbpsOutChanged","body":["Stats.mbpsOutChanged"],"description":"Triggered when the value of the <code>mbpsOut</code> property changes."}},
{"Stats.assetMbpsInChanged":{"prefix":"Stats.assetMbpsInChanged","body":["Stats.assetMbpsInChanged"],"description":"Triggered when the value of the <code>assetMbpsIn</code> property changes."}},
{"Stats.assetMbpsOutChanged":{"prefix":"Stats.assetMbpsOutChanged","body":["Stats.assetMbpsOutChanged"],"description":"Triggered when the value of the <code>assetMbpsOut</code> property changes."}},
{"Stats.audioPingChanged":{"prefix":"Stats.audioPingChanged","body":["Stats.audioPingChanged"],"description":"Triggered when the value of the <code>audioPing</code> property changes."}},
{"Stats.avatarPingChanged":{"prefix":"Stats.avatarPingChanged","body":["Stats.avatarPingChanged"],"description":"Triggered when the value of the <code>avatarPing</code> property changes."}},
{"Stats.entitiesPingChanged":{"prefix":"Stats.entitiesPingChanged","body":["Stats.entitiesPingChanged"],"description":"Triggered when the value of the <code>entitiesPing</code> property changes."}},
{"Stats.assetPingChanged":{"prefix":"Stats.assetPingChanged","body":["Stats.assetPingChanged"],"description":"Triggered when the value of the <code>assetPing</code> property changes."}},
{"Stats.messagePingChanged":{"prefix":"Stats.messagePingChanged","body":["Stats.messagePingChanged"],"description":"Triggered when the value of the <code>messagePing</code> property changes."}},
{"Stats.positionChanged":{"prefix":"Stats.positionChanged","body":["Stats.positionChanged"],"description":"Triggered when the value of the <code>position</code> property changes."}},
{"Stats.speedChanged":{"prefix":"Stats.speedChanged","body":["Stats.speedChanged"],"description":"Triggered when the value of the <code>speed</code> property changes."}},
{"Stats.yawChanged":{"prefix":"Stats.yawChanged","body":["Stats.yawChanged"],"description":"Triggered when the value of the <code>yaw</code> property changes."}},
{"Stats.avatarMixerInKbpsChanged":{"prefix":"Stats.avatarMixerInKbpsChanged","body":["Stats.avatarMixerInKbpsChanged"],"description":"Triggered when the value of the <code>avatarMixerInKbps</code> property changes."}},
{"Stats.avatarMixerInPpsChanged":{"prefix":"Stats.avatarMixerInPpsChanged","body":["Stats.avatarMixerInPpsChanged"],"description":"Triggered when the value of the <code>avatarMixerInPps</code> property changes."}},
{"Stats.avatarMixerOutKbpsChanged":{"prefix":"Stats.avatarMixerOutKbpsChanged","body":["Stats.avatarMixerOutKbpsChanged"],"description":"Triggered when the value of the <code>avatarMixerOutKbps</code> property changes."}},
{"Stats.avatarMixerOutPpsChanged":{"prefix":"Stats.avatarMixerOutPpsChanged","body":["Stats.avatarMixerOutPpsChanged"],"description":"Triggered when the value of the <code>avatarMixerOutPps</code> property changes."}},
{"Stats.myAvatarSendRateChanged":{"prefix":"Stats.myAvatarSendRateChanged","body":["Stats.myAvatarSendRateChanged"],"description":"Triggered when the value of the <code>myAvatarSendRate</code> property changes."}},
{"Stats.audioMixerInKbpsChanged":{"prefix":"Stats.audioMixerInKbpsChanged","body":["Stats.audioMixerInKbpsChanged"],"description":"Triggered when the value of the <code>audioMixerInKbps</code> property changes."}},
{"Stats.audioMixerInPpsChanged":{"prefix":"Stats.audioMixerInPpsChanged","body":["Stats.audioMixerInPpsChanged"],"description":"Triggered when the value of the <code>audioMixerInPps</code> property changes."}},
{"Stats.audioMixerOutKbpsChanged":{"prefix":"Stats.audioMixerOutKbpsChanged","body":["Stats.audioMixerOutKbpsChanged"],"description":"Triggered when the value of the <code>audioMixerOutKbps</code> property changes."}},
{"Stats.audioMixerOutPpsChanged":{"prefix":"Stats.audioMixerOutPpsChanged","body":["Stats.audioMixerOutPpsChanged"],"description":"Triggered when the value of the <code>audioMixerOutPps</code> property changes."}},
{"Stats.audioMixerKbpsChanged":{"prefix":"Stats.audioMixerKbpsChanged","body":["Stats.audioMixerKbpsChanged"],"description":"Triggered when the value of the <code>audioMixerKbps</code> property changes."}},
{"Stats.audioMixerPpsChanged":{"prefix":"Stats.audioMixerPpsChanged","body":["Stats.audioMixerPpsChanged"],"description":"Triggered when the value of the <code>audioMixerPps</code> property changes."}},
{"Stats.audioOutboundPPSChanged":{"prefix":"Stats.audioOutboundPPSChanged","body":["Stats.audioOutboundPPSChanged"],"description":"Triggered when the value of the <code>audioOutboundPPS</code> property changes."}},
{"Stats.audioSilentOutboundPPSChanged":{"prefix":"Stats.audioSilentOutboundPPSChanged","body":["Stats.audioSilentOutboundPPSChanged"],"description":"Triggered when the value of the <code>audioSilentOutboundPPS</code> property changes."}},
{"Stats.audioAudioInboundPPSChanged":{"prefix":"Stats.audioAudioInboundPPSChanged","body":["Stats.audioAudioInboundPPSChanged"],"description":"Triggered when the value of the <code>audioAudioInboundPPS</code> property changes."}},
{"Stats.audioSilentInboundPPSChanged":{"prefix":"Stats.audioSilentInboundPPSChanged","body":["Stats.audioSilentInboundPPSChanged"],"description":"Triggered when the value of the <code>audioSilentInboundPPS</code> property changes."}},
{"Stats.audioPacketLossChanged":{"prefix":"Stats.audioPacketLossChanged","body":["Stats.audioPacketLossChanged"],"description":"Triggered when the value of the <code>audioPacketLoss</code> property changes."}},
{"Stats.audioCodecChanged":{"prefix":"Stats.audioCodecChanged","body":["Stats.audioCodecChanged"],"description":"Triggered when the value of the <code>audioCodec</code> property changes."}},
{"Stats.audioNoiseGateChanged":{"prefix":"Stats.audioNoiseGateChanged","body":["Stats.audioNoiseGateChanged"],"description":"Triggered when the value of the <code>audioNoiseGate</code> property changes."}},
{"Stats.entityPacketsInKbpsChanged":{"prefix":"Stats.entityPacketsInKbpsChanged","body":["Stats.entityPacketsInKbpsChanged"],"description":"Triggered when the value of the <code>entityPacketsInKbps</code> property changes."}},
{"Stats.downloadsChanged":{"prefix":"Stats.downloadsChanged","body":["Stats.downloadsChanged"],"description":"Triggered when the value of the <code>downloads</code> property changes."}},
{"Stats.downloadLimitChanged":{"prefix":"Stats.downloadLimitChanged","body":["Stats.downloadLimitChanged"],"description":"Triggered when the value of the <code>downloadLimit</code> property changes."}},
{"Stats.downloadsPendingChanged":{"prefix":"Stats.downloadsPendingChanged","body":["Stats.downloadsPendingChanged"],"description":"Triggered when the value of the <code>downloadsPending</code> property changes."}},
{"Stats.downloadUrlsChanged":{"prefix":"Stats.downloadUrlsChanged","body":["Stats.downloadUrlsChanged"],"description":"Triggered when the value of the <code>downloadUrls</code> property changes."}},
{"Stats.processingChanged":{"prefix":"Stats.processingChanged","body":["Stats.processingChanged"],"description":"Triggered when the value of the <code>processing</code> property changes."}},
{"Stats.processingPendingChanged":{"prefix":"Stats.processingPendingChanged","body":["Stats.processingPendingChanged"],"description":"Triggered when the value of the <code>processingPending</code> property changes."}},
{"Stats.trianglesChanged":{"prefix":"Stats.trianglesChanged","body":["Stats.trianglesChanged"],"description":"Triggered when the value of the <code>triangles</code> property changes."}},
{"Stats.drawcallsChanged":{"prefix":"Stats.drawcallsChanged","body":["Stats.drawcallsChanged"],"description":"Triggered when the value of the <code>drawcalls</code> property changes.\rThis"}},
{"Stats.materialSwitchesChanged":{"prefix":"Stats.materialSwitchesChanged","body":["Stats.materialSwitchesChanged"],"description":"Triggered when the value of the <code>materialSwitches</code> property changes."}},
{"Stats.itemConsideredChanged":{"prefix":"Stats.itemConsideredChanged","body":["Stats.itemConsideredChanged"],"description":"Triggered when the value of the <code>itemConsidered</code> property changes."}},
{"Stats.itemOutOfViewChanged":{"prefix":"Stats.itemOutOfViewChanged","body":["Stats.itemOutOfViewChanged"],"description":"Triggered when the value of the <code>itemOutOfView</code> property changes."}},
{"Stats.itemTooSmallChanged":{"prefix":"Stats.itemTooSmallChanged","body":["Stats.itemTooSmallChanged"],"description":"Triggered when the value of the <code>itemTooSmall</code> property changes."}},
{"Stats.itemRenderedChanged":{"prefix":"Stats.itemRenderedChanged","body":["Stats.itemRenderedChanged"],"description":"Triggered when the value of the <code>itemRendered</code> property changes."}},
{"Stats.shadowConsideredChanged":{"prefix":"Stats.shadowConsideredChanged","body":["Stats.shadowConsideredChanged"],"description":"Triggered when the value of the <code>shadowConsidered</code> property changes."}},
{"Stats.shadowOutOfViewChanged":{"prefix":"Stats.shadowOutOfViewChanged","body":["Stats.shadowOutOfViewChanged"],"description":"Triggered when the value of the <code>shadowOutOfView</code> property changes."}},
{"Stats.shadowTooSmallChanged":{"prefix":"Stats.shadowTooSmallChanged","body":["Stats.shadowTooSmallChanged"],"description":"Triggered when the value of the <code>shadowTooSmall</code> property changes."}},
{"Stats.shadowRenderedChanged":{"prefix":"Stats.shadowRenderedChanged","body":["Stats.shadowRenderedChanged"],"description":"Triggered when the value of the <code>shadowRendered</code> property changes."}},
{"Stats.sendingModeChanged":{"prefix":"Stats.sendingModeChanged","body":["Stats.sendingModeChanged"],"description":"Triggered when the value of the <code>sendingMode</code> property changes."}},
{"Stats.packetStatsChanged":{"prefix":"Stats.packetStatsChanged","body":["Stats.packetStatsChanged"],"description":"Triggered when the value of the <code>packetStats</code> property changes."}},
{"Stats.lodStatusChanged":{"prefix":"Stats.lodStatusChanged","body":["Stats.lodStatusChanged"],"description":"Triggered when the value of the <code>lodStatus</code> property changes."}},
{"Stats.serverElementsChanged":{"prefix":"Stats.serverElementsChanged","body":["Stats.serverElementsChanged"],"description":"Triggered when the value of the <code>serverElements</code> property changes."}},
{"Stats.serverInternalChanged":{"prefix":"Stats.serverInternalChanged","body":["Stats.serverInternalChanged"],"description":"Triggered when the value of the <code>serverInternal</code> property changes."}},
{"Stats.serverLeavesChanged":{"prefix":"Stats.serverLeavesChanged","body":["Stats.serverLeavesChanged"],"description":"Triggered when the value of the <code>serverLeaves</code> property changes."}},
{"Stats.localElementsChanged":{"prefix":"Stats.localElementsChanged","body":["Stats.localElementsChanged"],"description":"Triggered when the value of the <code>localElements</code> property changes."}},
{"Stats.localInternalChanged":{"prefix":"Stats.localInternalChanged","body":["Stats.localInternalChanged"],"description":"Triggered when the value of the <code>localInternal</code> property changes."}},
{"Stats.localLeavesChanged":{"prefix":"Stats.localLeavesChanged","body":["Stats.localLeavesChanged"],"description":"Triggered when the value of the <code>localLeaves</code> property changes."}},
{"Stats.timingStatsChanged":{"prefix":"Stats.timingStatsChanged","body":["Stats.timingStatsChanged"],"description":"Triggered when the value of the <code>timingStats</code> property changes."}},
{"Stats.gameUpdateStatsChanged":{"prefix":"Stats.gameUpdateStatsChanged","body":["Stats.gameUpdateStatsChanged"],"description":"Triggered when the value of the <code>gameUpdateStats</code> property changes."}},
{"Stats.glContextSwapchainMemoryChanged":{"prefix":"Stats.glContextSwapchainMemoryChanged","body":["Stats.glContextSwapchainMemoryChanged"],"description":"Triggered when the value of the <code>glContextSwapchainMemory</code> property changes."}},
{"Stats.qmlTextureMemoryChanged":{"prefix":"Stats.qmlTextureMemoryChanged","body":["Stats.qmlTextureMemoryChanged"],"description":"Triggered when the value of the <code>qmlTextureMemory</code> property changes."}},
{"Stats.texturePendingTransfersChanged":{"prefix":"Stats.texturePendingTransfersChanged","body":["Stats.texturePendingTransfersChanged"],"description":"Triggered when the value of the <code>texturePendingTransfers</code> property changes."}},
{"Stats.gpuBuffersChanged":{"prefix":"Stats.gpuBuffersChanged","body":["Stats.gpuBuffersChanged"],"description":"Triggered when the value of the <code>gpuBuffers</code> property changes."}},
{"Stats.gpuBufferMemoryChanged":{"prefix":"Stats.gpuBufferMemoryChanged","body":["Stats.gpuBufferMemoryChanged"],"description":"Triggered when the value of the <code>gpuBufferMemory</code> property changes."}},
{"Stats.gpuTexturesChanged":{"prefix":"Stats.gpuTexturesChanged","body":["Stats.gpuTexturesChanged"],"description":"Triggered when the value of the <code>gpuTextures</code> property changes."}},
{"Stats.gpuTextureMemoryChanged":{"prefix":"Stats.gpuTextureMemoryChanged","body":["Stats.gpuTextureMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureMemory</code> property changes."}},
{"Stats.gpuTextureResidentMemoryChanged":{"prefix":"Stats.gpuTextureResidentMemoryChanged","body":["Stats.gpuTextureResidentMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureResidentMemory</code> property changes."}},
{"Stats.gpuTextureFramebufferMemoryChanged":{"prefix":"Stats.gpuTextureFramebufferMemoryChanged","body":["Stats.gpuTextureFramebufferMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureFramebufferMemory</code> property changes."}},
{"Stats.gpuTextureResourceMemoryChanged":{"prefix":"Stats.gpuTextureResourceMemoryChanged","body":["Stats.gpuTextureResourceMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureResourceMemory</code> property changes."}},
{"Stats.gpuTextureResourceIdealMemoryChanged":{"prefix":"Stats.gpuTextureResourceIdealMemoryChanged","body":["Stats.gpuTextureResourceIdealMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureResourceIdealMemory</code> property changes."}},
{"Stats.gpuTextureResourcePopulatedMemoryChanged":{"prefix":"Stats.gpuTextureResourcePopulatedMemoryChanged","body":["Stats.gpuTextureResourcePopulatedMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureResourcePopulatedMemory</code> property changes."}},
{"Stats.gpuTextureExternalMemoryChanged":{"prefix":"Stats.gpuTextureExternalMemoryChanged","body":["Stats.gpuTextureExternalMemoryChanged"],"description":"Triggered when the value of the <code>gpuTextureExternalMemory</code> property changes."}},
{"Stats.gpuTextureMemoryPressureStateChanged":{"prefix":"Stats.gpuTextureMemoryPressureStateChanged","body":["Stats.gpuTextureMemoryPressureStateChanged"],"description":"Triggered when the value of the <code>gpuTextureMemoryPressureState</code> property changes."}},
{"Stats.gpuFreeMemoryChanged":{"prefix":"Stats.gpuFreeMemoryChanged","body":["Stats.gpuFreeMemoryChanged"],"description":"Triggered when the value of the <code>gpuFreeMemory</code> property changes."}},
{"Stats.gpuFrameTimeChanged":{"prefix":"Stats.gpuFrameTimeChanged","body":["Stats.gpuFrameTimeChanged"],"description":"Triggered when the value of the <code>gpuFrameTime</code> property changes."}},
{"Stats.gpuFrameTimeChanged":{"prefix":"Stats.gpuFrameTimeChanged","body":["Stats.gpuFrameTimeChanged"],"description":"Triggered when the value of the <code>gpuFrameTime</code> property changes."}},
{"Stats.gpuFrameTimeChanged":{"prefix":"Stats.gpuFrameTimeChanged","body":["Stats.gpuFrameTimeChanged"],"description":"Triggered when the value of the <code>gpuFrameTime</code> property changes."}},
{"Stats.batchFrameTimeChanged":{"prefix":"Stats.batchFrameTimeChanged","body":["Stats.batchFrameTimeChanged"],"description":"Triggered when the value of the <code>batchFrameTime</code> property changes."}},
{"Stats.engineFrameTimeChanged":{"prefix":"Stats.engineFrameTimeChanged","body":["Stats.engineFrameTimeChanged"],"description":"Triggered when the value of the <code>engineFrameTime</code> property changes."}},
{"Stats.avatarSimulationTimeChanged":{"prefix":"Stats.avatarSimulationTimeChanged","body":["Stats.avatarSimulationTimeChanged"],"description":"Triggered when the value of the <code>avatarSimulationTime</code> property changes."}},
{"Stats.rectifiedTextureCountChanged":{"prefix":"Stats.rectifiedTextureCountChanged","body":["Stats.rectifiedTextureCountChanged"],"description":"Triggered when the value of the <code>rectifiedTextureCount</code> property changes."}},
{"Stats.decimatedTextureCountChanged":{"prefix":"Stats.decimatedTextureCountChanged","body":["Stats.decimatedTextureCountChanged"],"description":"Triggered when the value of the <code>decimatedTextureCount</code> property changes."}},
{"Stats.parentChanged":{"prefix":"Stats.parentChanged","body":["Stats.parentChanged(${1:parent: object})"],"description":"Triggered when the parent item changes."}},
{"Stats.xChanged":{"prefix":"Stats.xChanged","body":["Stats.xChanged"],"description":"Triggered when the value of the <code>x</code> property changes."}},
{"Stats.yChanged":{"prefix":"Stats.yChanged","body":["Stats.yChanged"],"description":"Triggered when the value of the <code>y</code> property changes."}},
{"Stats.zChanged":{"prefix":"Stats.zChanged","body":["Stats.zChanged"],"description":"Triggered when the value of the <code>z</code> property changes."}},
{"Stats.widthChanged":{"prefix":"Stats.widthChanged","body":["Stats.widthChanged"],"description":"Triggered when the value of the <code>width</code> property changes."}},
{"Stats.heightChanged":{"prefix":"Stats.heightChanged","body":["Stats.heightChanged"],"description":"Triggered when the value of the <code>height</code> property changes."}},
{"Stats.opacityChanged":{"prefix":"Stats.opacityChanged","body":["Stats.opacityChanged"],"description":"Triggered when the value of the <code>opacity</code> property changes."}},
{"Stats.enabledChanged":{"prefix":"Stats.enabledChanged","body":["Stats.enabledChanged"],"description":"Triggered when the value of the <code>enabled</code> property changes."}},
{"Stats.visibleChanged":{"prefix":"Stats.visibleChanged","body":["Stats.visibleChanged"],"description":"Triggered when the value of the <code>visibleChanged</code> property changes."}},
{"Stats.visibleChildrenChanged":{"prefix":"Stats.visibleChildrenChanged","body":["Stats.visibleChildrenChanged"],"description":"Triggered when the list of visible children changes."}},
{"Stats.stateChanged":{"prefix":"Stats.stateChanged","body":["Stats.stateChanged"],"description":"Triggered when the value of the <code>state</code> property changes."}},
{"Stats.childrenRectChanged":{"prefix":"Stats.childrenRectChanged","body":["Stats.childrenRectChanged(${1:childrenRect: Rect})"],"description":"Triggered when the position and size of the rectangle containing the children changes."}},
{"Stats.baselineOffsetChanged":{"prefix":"Stats.baselineOffsetChanged","body":["Stats.baselineOffsetChanged(${1:baselineOffset: number})"],"description":"Triggered when the value of the <code>baselineOffset</code> property changes."}},
{"Stats.clipChanged":{"prefix":"Stats.clipChanged","body":["Stats.clipChanged(${1:clip: boolean})"],"description":"Triggered when the value of the <code>clip</code> property changes."}},
{"Stats.focusChanged":{"prefix":"Stats.focusChanged","body":["Stats.focusChanged(${1:focus: boolean})"],"description":"Triggered when the value of the <code>focus</code> property changes."}},
{"Stats.activeFocusChanged":{"prefix":"Stats.activeFocusChanged","body":["Stats.activeFocusChanged(${1:activeFocus: boolean})"],"description":"Triggered when the value of the <code>activeFocus</code> property changes."}},
{"Stats.activeFocusOnTabChanged":{"prefix":"Stats.activeFocusOnTabChanged","body":["Stats.activeFocusOnTabChanged(${1:activeFocusOnTab: boolean})"],"description":"Triggered when the value of the <code>activeFocusOnTab</code> property changes."}},
{"Stats.rotationChanged":{"prefix":"Stats.rotationChanged","body":["Stats.rotationChanged"],"description":"Triggered when the value of the <code>rotation</code> property changes."}},
{"Stats.scaleChanged":{"prefix":"Stats.scaleChanged","body":["Stats.scaleChanged"],"description":"Triggered when the value of the <code>scaleChanged</code> property changes."}},
{"Stats.transformOriginChanged":{"prefix":"Stats.transformOriginChanged","body":["Stats.transformOriginChanged(${1:transformOrigin: number})"],"description":"Triggered when the value of the <code>transformOrigin</code> property changes."}},
{"Stats.smoothChanged":{"prefix":"Stats.smoothChanged","body":["Stats.smoothChanged(${1:smooth: boolean})"],"description":"Triggered when the value of the <code>smooth</code> property changes."}},
{"Stats.antialiasingChanged":{"prefix":"Stats.antialiasingChanged","body":["Stats.antialiasingChanged(${1:antialiasing: boolean})"],"description":"Triggered when the value of the <code>antialiasing</code> property changes."}},
{"Stats.implicitWidthChanged":{"prefix":"Stats.implicitWidthChanged","body":["Stats.implicitWidthChanged"],"description":"Triggered when the value of the <code>implicitWidth</code> property changes."}},
{"Stats.implicitHeightChanged":{"prefix":"Stats.implicitHeightChanged","body":["Stats.implicitHeightChanged"],"description":"Triggered when the value of the <code>implicitHeight</code> property changes."}},
{"Stats.windowChanged":{"prefix":"Stats.windowChanged","body":["Stats.windowChanged(${1:window: object})"]}},
{"Stats.grabToImage":{"prefix":"Stats.grabToImage","body":["Stats.grabToImage(${1:callback: object},${2:targetSize: Size})"]}},
{"Stats.contains":{"prefix":"Stats.contains","body":["Stats.contains(${1:point: Vec2})"]}},
{"Stats.mapFromItem":{"prefix":"Stats.mapFromItem","body":["Stats.mapFromItem(${1:item: object})"]}},
{"Stats.mapToItem":{"prefix":"Stats.mapToItem","body":["Stats.mapToItem(${1:item: object})"]}},
{"Stats.mapFromGlobal":{"prefix":"Stats.mapFromGlobal","body":["Stats.mapFromGlobal(${1:global: object})"]}},
{"Stats.mapToGlobal":{"prefix":"Stats.mapToGlobal","body":["Stats.mapToGlobal(${1:global: object})"]}},
{"Stats.forceActiveFocus":{"prefix":"Stats.forceActiveFocus","body":["Stats.forceActiveFocus(${1:reason: number})"]}},
{"Stats.nextItemInFocusChain":{"prefix":"Stats.nextItemInFocusChain","body":["Stats.nextItemInFocusChain(${1:forward: boolean})"]}},
{"Stats.childAt":{"prefix":"Stats.childAt","body":["Stats.childAt(${1:x: number},${2:y: number})"]}},
{"Stats.update":{"prefix":"Stats.update","body":["Stats.update"]}},
{"Stats.stylusPicksCountChanged":{"prefix":"Stats.stylusPicksCountChanged","body":["Stats.stylusPicksCountChanged"],"description":"Triggered when the value of the <code>stylusPicksCount</code> property changes."}},
{"Stats.rayPicksCountChanged":{"prefix":"Stats.rayPicksCountChanged","body":["Stats.rayPicksCountChanged"],"description":"Triggered when the value of the <code>rayPicksCount</code> property changes."}},
{"Stats.parabolaPicksCountChanged":{"prefix":"Stats.parabolaPicksCountChanged","body":["Stats.parabolaPicksCountChanged"],"description":"Triggered when the value of the <code>parabolaPicksCount</code> property changes."}},
{"Stats.collisionPicksCountChanged":{"prefix":"Stats.collisionPicksCountChanged","body":["Stats.collisionPicksCountChanged"],"description":"Triggered when the value of the <code>collisionPicksCount</code> property changes."}},
{"Stats.stylusPicksUpdatedChanged":{"prefix":"Stats.stylusPicksUpdatedChanged","body":["Stats.stylusPicksUpdatedChanged"],"description":"Triggered when the value of the <code>stylusPicksUpdated</code> property changes."}},
{"Stats.rayPicksUpdatedChanged":{"prefix":"Stats.rayPicksUpdatedChanged","body":["Stats.rayPicksUpdatedChanged"],"description":"Triggered when the value of the <code>rayPicksUpdated</code> property changes."}},
{"Stats.parabolaPicksUpdatedChanged":{"prefix":"Stats.parabolaPicksUpdatedChanged","body":["Stats.parabolaPicksUpdatedChanged"],"description":"Triggered when the value of the <code>parabolaPicksUpdated</code> property changes."}},
{"Stats.collisionPicksUpdatedChanged":{"prefix":"Stats.collisionPicksUpdatedChanged","body":["Stats.collisionPicksUpdatedChanged"],"description":"Triggered when the value of the <code>collisionPicksUpdated</code> property changes."}},
{"Overlays.Circle3DProperties":{"prefix":"Overlays.Circle3DProperties","body":["Overlays.Circle3DProperties"],"description":"These are the properties of a <code>circle3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.CubeProperties":{"prefix":"Overlays.CubeProperties","body":["Overlays.CubeProperties"],"description":"These are the properties of a <code>cube</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.GridProperties":{"prefix":"Overlays.GridProperties","body":["Overlays.GridProperties"],"description":"These are the properties of a <code>grid</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.Image3DProperties":{"prefix":"Overlays.Image3DProperties","body":["Overlays.Image3DProperties"],"description":"These are the properties of an <code>image3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.ImageProperties":{"prefix":"Overlays.ImageProperties","body":["Overlays.ImageProperties"],"description":"These are the properties of an <code>image</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.Line3DProperties":{"prefix":"Overlays.Line3DProperties","body":["Overlays.Line3DProperties"],"description":"These are the properties of a <code>line3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.ModelProperties":{"prefix":"Overlays.ModelProperties","body":["Overlays.ModelProperties"],"description":"These are the properties of a <code>model</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.OverlayType":{"prefix":"Overlays.OverlayType","body":["Overlays.OverlayType"],"description":"<p>An overlay may be one of the following types:</p>\r<table>\r <thead>\r <tr><th>Value</th><th>2D/3D</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>circle3d</code></td><td>3D</td><td>A circle.</td></tr>\r <tr><td><code>cube</code></td><td>3D</td><td>A cube. Can also use a <code>shape</code> overlay to create a \r cube.</td></tr>\r <tr><td><code>grid</code></td><td>3D</td><td>A grid of lines in a plane.</td></tr>\r <tr><td><code>image</code></td><td>2D</td><td>An image. Synonym: <code>billboard</code>.</td></tr>\r <tr><td><code>image3d</code></td><td>3D</td><td>An image.</td></tr>\r <tr><td><code>line3d</code></td><td>3D</td><td>A line.</td></tr>\r <tr><td><code>model</code></td><td>3D</td><td>A model.</td></tr>\r <tr><td><code>rectangle</code></td><td>2D</td><td>A rectangle.</td></tr>\r <tr><td><code>rectangle3d</code></td><td>3D</td><td>A rectangle.</td></tr>\r <tr><td><code>shape</code></td><td>3D</td><td>A geometric shape, such as a cube, sphere, or cylinder.</td></tr>\r <tr><td><code>sphere</code></td><td>3D</td><td>A sphere. Can also use a <code>shape</code> overlay to create a \r sphere.</td></tr>\r <tr><td><code>text</code></td><td>2D</td><td>Text.</td></tr>\r <tr><td><code>text3d</code></td><td>3D</td><td>Text.</td></tr>\r <tr><td><code>web3d</code></td><td>3D</td><td>Web content.</td></tr>\r </tbody>\r</table>\r<p>2D overlays are rendered on the display surface in desktop mode and on the HUD surface in HMD mode. 3D overlays are\rrendered at a position and orientation in-world.<p>\r<p>Each overlay type has different {@link Overlays.OverlayProperties|OverlayProperties}.</p>"}},
{"Overlays.OverlayProperties":{"prefix":"Overlays.OverlayProperties","body":["Overlays.OverlayProperties"],"description":"<p>Different overlay types have different properties:</p>\r<table>\r <thead>\r <tr><th>{@link Overlays.OverlayType|OverlayType}</th><th>Overlay Properties</th></tr>\r </thead>\r <tbody>\r <tr><td><code>circle3d</code></td><td>{@link Overlays.Circle3DProperties|Circle3DProperties}</td></tr>\r <tr><td><code>cube</code></td><td>{@link Overlays.CubeProperties|CubeProperties}</td></tr>\r <tr><td><code>grid</code></td><td>{@link Overlays.GridProperties|GridProperties}</td></tr>\r <tr><td><code>image</code></td><td>{@link Overlays.ImageProperties|ImageProperties}</td></tr>\r <tr><td><code>image3d</code></td><td>{@link Overlays.Image3DProperties|Image3DProperties}</td></tr>\r <tr><td><code>line3d</code></td><td>{@link Overlays.Line3DProperties|Line3DProperties}</td></tr>\r <tr><td><code>model</code></td><td>{@link Overlays.ModelProperties|ModelProperties}</td></tr>\r <tr><td><code>rectangle</code></td><td>{@link Overlays.RectangleProperties|RectangleProperties}</td></tr>\r <tr><td><code>rectangle3d</code></td><td>{@link Overlays.Rectangle3DProperties|Rectangle3DProperties}</td></tr>\r <tr><td><code>shape</code></td><td>{@link Overlays.ShapeProperties|ShapeProperties}</td></tr>\r <tr><td><code>sphere</code></td><td>{@link Overlays.SphereProperties|SphereProperties}</td></tr>\r <tr><td><code>text</code></td><td>{@link Overlays.TextProperties|TextProperties}</td></tr>\r <tr><td><code>text3d</code></td><td>{@link Overlays.Text3DProperties|Text3DProperties}</td></tr>\r <tr><td><code>web3d</code></td><td>{@link Overlays.Web3DProperties|Web3DProperties}</td></tr>\r </tbody>\r</table>"}},
{"Overlays.RayToOverlayIntersectionResult":{"prefix":"Overlays.RayToOverlayIntersectionResult","body":["Overlays.RayToOverlayIntersectionResult"],"description":"The result of a {@link PickRay} search using {@link Overlays.findRayIntersection|findRayIntersection} or \r{@link Overlays.findRayIntersectionVector|findRayIntersectionVector}."}},
{"Overlays":{"prefix":"Overlays","body":["Overlays"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>The Overlays API provides facilities to create and interact with overlays. Overlays are 2D and 3D objects visible only to\ryourself and that aren't persisted to the domain. They are used for UI."}},
{"Overlays.addOverlay":{"prefix":"Overlays.addOverlay","body":["Overlays.addOverlay(${1:type: Overlays.OverlayType},${2:properties: Overlays.OverlayProperties})"],"description":"Add an overlay to the scene."}},
{"Overlays.cloneOverlay":{"prefix":"Overlays.cloneOverlay","body":["Overlays.cloneOverlay(${1:overlayID: Uuid})"],"description":"Create a clone of an existing overlay."}},
{"Overlays.editOverlay":{"prefix":"Overlays.editOverlay","body":["Overlays.editOverlay(${1:overlayID: Uuid},${2:properties: Overlays.OverlayProperties})"],"description":"Edit an overlay's properties."}},
{"Overlays.editOverlays":{"prefix":"Overlays.editOverlays","body":["Overlays.editOverlays(${1:propertiesById: object.<Uuid, Overlays.OverlayProperties>})"],"description":"Edit multiple overlays' properties."}},
{"Overlays.deleteOverlay":{"prefix":"Overlays.deleteOverlay","body":["Overlays.deleteOverlay(${1:overlayID: Uuid})"],"description":"Delete an overlay."}},
{"Overlays.getOverlayType":{"prefix":"Overlays.getOverlayType","body":["Overlays.getOverlayType(${1:overlayID: Uuid})"],"description":"Get the type of an overlay."}},
{"Overlays.getOverlayObject":{"prefix":"Overlays.getOverlayObject","body":["Overlays.getOverlayObject(${1:overlayID: Uuid})"],"description":"Get the overlay script object. In particular, this is useful for accessing the event bridge for a <code>web3d</code> \roverlay."}},
{"Overlays.getOverlayAtPoint":{"prefix":"Overlays.getOverlayAtPoint","body":["Overlays.getOverlayAtPoint(${1:point: Vec2})"],"description":"Get the ID of the 2D overlay at a particular point on the screen or HUD."}},
{"Overlays.getProperty":{"prefix":"Overlays.getProperty","body":["Overlays.getProperty(${1:overlayID: Uuid},${2:property: string})"],"description":"Get the value of a 3D overlay's property."}},
{"Overlays.getProperties":{"prefix":"Overlays.getProperties","body":["Overlays.getProperties(${1:overlayID: Uuid},${2:properties: Array.<string>})"],"description":"Get the values of an overlay's properties."}},
{"Overlays.getOverlaysProperties":{"prefix":"Overlays.getOverlaysProperties","body":["Overlays.getOverlaysProperties(${1:propertiesById: object.<Uuid, Array.<string>>})"],"description":"Get the values of multiple overlays' properties."}},
{"Overlays.findRayIntersection":{"prefix":"Overlays.findRayIntersection","body":["Overlays.findRayIntersection(${1:pickRay: PickRay},${2:precisionPicking: boolean},${3:overlayIDsToInclude: Array.<Uuid>},${4:overlayIDsToExclude: Array.<Uuid>},${5:visibleOnly: boolean},${6:collidableOnly: boolean})"],"description":"Find the closest 3D overlay intersected by a {@link PickRay}."}},
{"Overlays.findOverlays":{"prefix":"Overlays.findOverlays","body":["Overlays.findOverlays(${1:center: Vec3},${2:radius: number})"],"description":"Return a list of 3D overlays with bounding boxes that touch a search sphere."}},
{"Overlays.isLoaded":{"prefix":"Overlays.isLoaded","body":["Overlays.isLoaded(${1:overlayID: Uuid})"],"description":"Check whether an overlay's assets have been loaded. For example, for an <code>image</code> overlay the result indicates\rwhether its image has been loaded."}},
{"Overlays.textSize":{"prefix":"Overlays.textSize","body":["Overlays.textSize(${1:overlayID: Uuid},${2:text: string})"],"description":"Calculates the size of the given text in the specified overlay if it is a text overlay."}},
{"Overlays.width":{"prefix":"Overlays.width","body":["Overlays.width"],"description":"Get the width of the window or HUD."}},
{"Overlays.height":{"prefix":"Overlays.height","body":["Overlays.height"],"description":"Get the height of the window or HUD."}},
{"Overlays.isAddedOverlay":{"prefix":"Overlays.isAddedOverlay","body":["Overlays.isAddedOverlay(${1:overlayID: Uuid})"],"description":"Check if there is an overlay of a given ID."}},
{"Overlays.sendMousePressOnOverlay":{"prefix":"Overlays.sendMousePressOnOverlay","body":["Overlays.sendMousePressOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Generate a mouse press event on an overlay."}},
{"Overlays.sendMouseReleaseOnOverlay":{"prefix":"Overlays.sendMouseReleaseOnOverlay","body":["Overlays.sendMouseReleaseOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Generate a mouse release event on an overlay."}},
{"Overlays.sendMouseMoveOnOverlay":{"prefix":"Overlays.sendMouseMoveOnOverlay","body":["Overlays.sendMouseMoveOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Generate a mouse move event on an overlay."}},
{"Overlays.sendHoverEnterOverlay":{"prefix":"Overlays.sendHoverEnterOverlay","body":["Overlays.sendHoverEnterOverlay(${1:id: Uuid},${2:event: PointerEvent})"],"description":"Generate a hover enter event on an overlay."}},
{"Overlays.sendHoverOverOverlay":{"prefix":"Overlays.sendHoverOverOverlay","body":["Overlays.sendHoverOverOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Generate a hover over event on an overlay."}},
{"Overlays.sendHoverLeaveOverlay":{"prefix":"Overlays.sendHoverLeaveOverlay","body":["Overlays.sendHoverLeaveOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Generate a hover leave event on an overlay."}},
{"Overlays.getKeyboardFocusOverlay":{"prefix":"Overlays.getKeyboardFocusOverlay","body":["Overlays.getKeyboardFocusOverlay"],"description":"Get the ID of the Web3D overlay that has keyboard focus."}},
{"Overlays.setKeyboardFocusOverlay":{"prefix":"Overlays.setKeyboardFocusOverlay","body":["Overlays.setKeyboardFocusOverlay(${1:overlayID: Uuid})"],"description":"Set the Web3D overlay that has keyboard focus."}},
{"Overlays.overlayDeleted":{"prefix":"Overlays.overlayDeleted","body":["Overlays.overlayDeleted(${1:overlayID: Uuid})"],"description":"Triggered when an overlay is deleted."}},
{"Overlays.mousePressOnOverlay":{"prefix":"Overlays.mousePressOnOverlay","body":["Overlays.mousePressOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse press event occurs on an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendMousePressOnOverlay|sendMousePressOnOverlay} for a 2D overlay)."}},
{"Overlays.mouseDoublePressOnOverlay":{"prefix":"Overlays.mouseDoublePressOnOverlay","body":["Overlays.mouseDoublePressOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse double press event occurs on an overlay. Only occurs for 3D overlays."}},
{"Overlays.mouseReleaseOnOverlay":{"prefix":"Overlays.mouseReleaseOnOverlay","body":["Overlays.mouseReleaseOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse release event occurs on an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendMouseReleaseOnOverlay|sendMouseReleaseOnOverlay} for a 2D overlay)."}},
{"Overlays.mouseMoveOnOverlay":{"prefix":"Overlays.mouseMoveOnOverlay","body":["Overlays.mouseMoveOnOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse move event occurs on an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendMouseMoveOnOverlay|sendMouseMoveOnOverlay} for a 2D overlay)."}},
{"Overlays.mousePressOffOverlay":{"prefix":"Overlays.mousePressOffOverlay","body":["Overlays.mousePressOffOverlay"],"description":"Triggered when a mouse press event occurs on something other than a 3D overlay."}},
{"Overlays.mouseDoublePressOffOverlay":{"prefix":"Overlays.mouseDoublePressOffOverlay","body":["Overlays.mouseDoublePressOffOverlay"],"description":"Triggered when a mouse double press event occurs on something other than a 3D overlay."}},
{"Overlays.hoverEnterOverlay":{"prefix":"Overlays.hoverEnterOverlay","body":["Overlays.hoverEnterOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse cursor starts hovering over an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendHoverEnterOverlay|sendHoverEnterOverlay} for a 2D overlay)."}},
{"Overlays.hoverOverOverlay":{"prefix":"Overlays.hoverOverOverlay","body":["Overlays.hoverOverOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse cursor continues hovering over an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendHoverOverOverlay|sendHoverOverOverlay} for a 2D overlay)."}},
{"Overlays.hoverLeaveOverlay":{"prefix":"Overlays.hoverLeaveOverlay","body":["Overlays.hoverLeaveOverlay(${1:overlayID: Uuid},${2:event: PointerEvent})"],"description":"Triggered when a mouse cursor finishes hovering over an overlay. Only occurs for 3D overlays (unless you use \r {@link Overlays.sendHoverLeaveOverlay|sendHoverLeaveOverlay} for a 2D overlay)."}},
{"Overlays.Rectangle3DProperties":{"prefix":"Overlays.Rectangle3DProperties","body":["Overlays.Rectangle3DProperties"],"description":"These are the properties of a <code>rectangle3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.RectangleProperties":{"prefix":"Overlays.RectangleProperties","body":["Overlays.RectangleProperties"],"description":"These are the properties of a <code>rectangle</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.Shape":{"prefix":"Overlays.Shape","body":["Overlays.Shape"],"description":"<p>A <code>shape</code> {@link Overlays.OverlayType|OverlayType} may display as one of the following geometrical shapes:</p>\r<table>\r <thead>\r <tr><th>Value</th><th>Dimensions</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>\"Circle\"</code></td><td>2D</td><td>A circle oriented in 3D.</td></td></tr>\r <tr><td><code>\"Cone\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Cube\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Cylinder\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Dodecahedron\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Hexagon\"</code></td><td>3D</td><td>A hexagonal prism.</td></tr>\r <tr><td><code>\"Icosahedron\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Line\"</code></td><td>1D</td><td>A line oriented in 3D.</td></tr>\r <tr><td><code>\"Octagon\"</code></td><td>3D</td><td>An octagonal prism.</td></tr>\r <tr><td><code>\"Octahedron\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Quad\"</code></td><td>2D</td><td>A square oriented in 3D.</tr>\r <tr><td><code>\"Sphere\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Tetrahedron\"</code></td><td>3D</td><td></td></tr>\r <tr><td><code>\"Torus\"</code></td><td>3D</td><td><em>Not implemented.</em></td></tr>\r <tr><td><code>\"Triangle\"</code></td><td>3D</td><td>A triangular prism.</td></tr>\r </tbody>\r</table>"}},
{"Overlays.ShapeProperties":{"prefix":"Overlays.ShapeProperties","body":["Overlays.ShapeProperties"],"description":"These are the properties of a <code>shape</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.SphereProperties":{"prefix":"Overlays.SphereProperties","body":["Overlays.SphereProperties"],"description":"These are the properties of a <code>sphere</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.Text3DProperties":{"prefix":"Overlays.Text3DProperties","body":["Overlays.Text3DProperties"],"description":"These are the properties of a <code>text3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.TextProperties":{"prefix":"Overlays.TextProperties","body":["Overlays.TextProperties"],"description":"These are the properties of a <code>text</code> {@link Overlays.OverlayType|OverlayType}."}},
{"Overlays.Web3DProperties":{"prefix":"Overlays.Web3DProperties","body":["Overlays.Web3DProperties"],"description":"These are the properties of a <code>web3d</code> {@link Overlays.OverlayType|OverlayType}."}},
{"AnimationObject":{"prefix":"AnimationObject","body":["AnimationObject"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>"}},
{"AnimationObject.getJointNames":{"prefix":"AnimationObject.getJointNames","body":["AnimationObject.getJointNames"]}},
{"AnimationObject.getFrames":{"prefix":"AnimationObject.getFrames","body":["AnimationObject.getFrames"]}},
{"AnimationCache":{"prefix":"AnimationCache","body":["AnimationCache"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>API to manage animation cache resources."}},
{"AnimationCache.getAnimation":{"prefix":"AnimationCache.getAnimation","body":["AnimationCache.getAnimation(${1:url: string})"],"description":"Returns animation resource for particular animation."}},
{"AudioStats.AudioStreamStats":{"prefix":"AudioStats.AudioStreamStats","body":["AudioStats.AudioStreamStats"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"AudioStats.AudioStreamStats.lossRateChanged":{"prefix":"AudioStats.AudioStreamStats.lossRateChanged","body":["AudioStats.AudioStreamStats.lossRateChanged(${1:lossRate: number})"]}},
{"AudioStats.AudioStreamStats.lossCountChanged":{"prefix":"AudioStats.AudioStreamStats.lossCountChanged","body":["AudioStats.AudioStreamStats.lossCountChanged(${1:lossCount: number})"]}},
{"AudioStats.AudioStreamStats.lossRateWindowChanged":{"prefix":"AudioStats.AudioStreamStats.lossRateWindowChanged","body":["AudioStats.AudioStreamStats.lossRateWindowChanged(${1:lossRateWindow: number})"]}},
{"AudioStats.AudioStreamStats.lossCountWindowChanged":{"prefix":"AudioStats.AudioStreamStats.lossCountWindowChanged","body":["AudioStats.AudioStreamStats.lossCountWindowChanged(${1:lossCountWindow: number})"]}},
{"AudioStats.AudioStreamStats.framesDesiredChanged":{"prefix":"AudioStats.AudioStreamStats.framesDesiredChanged","body":["AudioStats.AudioStreamStats.framesDesiredChanged(${1:framesDesired: number})"]}},
{"AudioStats.AudioStreamStats.framesAvailableChanged":{"prefix":"AudioStats.AudioStreamStats.framesAvailableChanged","body":["AudioStats.AudioStreamStats.framesAvailableChanged(${1:framesAvailable: number})"]}},
{"AudioStats.AudioStreamStats.framesAvailableAvgChanged":{"prefix":"AudioStats.AudioStreamStats.framesAvailableAvgChanged","body":["AudioStats.AudioStreamStats.framesAvailableAvgChanged(${1:framesAvailableAvg: number})"]}},
{"AudioStats.AudioStreamStats.unplayedMsMaxChanged":{"prefix":"AudioStats.AudioStreamStats.unplayedMsMaxChanged","body":["AudioStats.AudioStreamStats.unplayedMsMaxChanged(${1:unplayedMsMax: number})"]}},
{"AudioStats.AudioStreamStats.starveCountChanged":{"prefix":"AudioStats.AudioStreamStats.starveCountChanged","body":["AudioStats.AudioStreamStats.starveCountChanged(${1:starveCount: number})"]}},
{"AudioStats.AudioStreamStats.lastStarveDurationCountChanged":{"prefix":"AudioStats.AudioStreamStats.lastStarveDurationCountChanged","body":["AudioStats.AudioStreamStats.lastStarveDurationCountChanged(${1:lastStarveDurationCount: number})"]}},
{"AudioStats.AudioStreamStats.dropCountChanged":{"prefix":"AudioStats.AudioStreamStats.dropCountChanged","body":["AudioStats.AudioStreamStats.dropCountChanged(${1:dropCount: number})"]}},
{"AudioStats.AudioStreamStats.overflowCountChanged":{"prefix":"AudioStats.AudioStreamStats.overflowCountChanged","body":["AudioStats.AudioStreamStats.overflowCountChanged(${1:overflowCount: number})"]}},
{"AudioStats.AudioStreamStats.timegapMsMaxChanged":{"prefix":"AudioStats.AudioStreamStats.timegapMsMaxChanged","body":["AudioStats.AudioStreamStats.timegapMsMaxChanged(${1:timegapMsMax: number})"]}},
{"AudioStats.AudioStreamStats.timegapMsAvgChanged":{"prefix":"AudioStats.AudioStreamStats.timegapMsAvgChanged","body":["AudioStats.AudioStreamStats.timegapMsAvgChanged(${1:timegapMsAvg: number})"]}},
{"AudioStats.AudioStreamStats.timegapMsMaxWindowChanged":{"prefix":"AudioStats.AudioStreamStats.timegapMsMaxWindowChanged","body":["AudioStats.AudioStreamStats.timegapMsMaxWindowChanged(${1:timegapMsMaxWindow: number})"]}},
{"AudioStats.AudioStreamStats.timegapMsAvgWindowChanged":{"prefix":"AudioStats.AudioStreamStats.timegapMsAvgWindowChanged","body":["AudioStats.AudioStreamStats.timegapMsAvgWindowChanged(${1:timegapMsAvgWindow: number})"]}},
{"AudioStats":{"prefix":"AudioStats","body":["AudioStats"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>Audio stats from the client."}},
{"AudioStats.pingMsChanged":{"prefix":"AudioStats.pingMsChanged","body":["AudioStats.pingMsChanged(${1:pingMs: number})"]}},
{"AudioStats.inputReadMsMaxChanged":{"prefix":"AudioStats.inputReadMsMaxChanged","body":["AudioStats.inputReadMsMaxChanged(${1:inputReadMsMax: number})"]}},
{"AudioStats.inputUnplayedMsMaxChanged":{"prefix":"AudioStats.inputUnplayedMsMaxChanged","body":["AudioStats.inputUnplayedMsMaxChanged(${1:inputUnplayedMsMax: number})"]}},
{"AudioStats.outputUnplayedMsMaxChanged":{"prefix":"AudioStats.outputUnplayedMsMaxChanged","body":["AudioStats.outputUnplayedMsMaxChanged(${1:outputUnplayedMsMax: number})"]}},
{"AudioStats.sentTimegapMsMaxChanged":{"prefix":"AudioStats.sentTimegapMsMaxChanged","body":["AudioStats.sentTimegapMsMaxChanged(${1:sentTimegapMsMax: number})"]}},
{"AudioStats.sentTimegapMsAvgChanged":{"prefix":"AudioStats.sentTimegapMsAvgChanged","body":["AudioStats.sentTimegapMsAvgChanged(${1:sentTimegapMsAvg: number})"]}},
{"AudioStats.sentTimegapMsMaxWindowChanged":{"prefix":"AudioStats.sentTimegapMsMaxWindowChanged","body":["AudioStats.sentTimegapMsMaxWindowChanged(${1:sentTimegapMsMaxWindow: number})"]}},
{"AudioStats.sentTimegapMsAvgWindowChanged":{"prefix":"AudioStats.sentTimegapMsAvgWindowChanged","body":["AudioStats.sentTimegapMsAvgWindowChanged(${1:sentTimegapMsAvgWindow: number})"]}},
{"AudioStats.mixerStreamChanged":{"prefix":"AudioStats.mixerStreamChanged","body":["AudioStats.mixerStreamChanged"]}},
{"AudioStats.clientStreamChanged":{"prefix":"AudioStats.clientStreamChanged","body":["AudioStats.clientStreamChanged"]}},
{"AudioStats.injectorStreamsChanged":{"prefix":"AudioStats.injectorStreamsChanged","body":["AudioStats.injectorStreamsChanged"]}},
{"AudioEffectOptions.ReverbOptions":{"prefix":"AudioEffectOptions.ReverbOptions","body":["AudioEffectOptions.ReverbOptions"],"description":"Reverberation options that can be used to initialize an {@link AudioEffectOptions} object when created."}},
{"AudioEffectOptions":{"prefix":"AudioEffectOptions","body":["AudioEffectOptions(${1:reverbOptions: AudioEffectOptions.ReverbOptions})"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>Audio effect options used by the {@link Audio} API.\r\r<p>Create using <code>new AudioEffectOptions(reverbOptions)</code>.</p>"}},
{"AudioInjector.AudioInjectorOptions":{"prefix":"AudioInjector.AudioInjectorOptions","body":["AudioInjector.AudioInjectorOptions"],"description":"Configures how an audio injector plays its audio."}},
{"SoundObject":{"prefix":"SoundObject","body":["SoundObject"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>An audio resource, created by {@link SoundCache.getSound}, to be played back using {@link Audio.playSound}.\r<p>Supported formats:</p>\r<ul>\r <li>WAV: 16-bit uncompressed WAV at any sample rate, with 1 (mono), 2(stereo), or 4 (ambisonic) channels.</li>\r <li>MP3: Mono or stereo, at any sample rate.</li>\r <li>RAW: 48khz 16-bit mono or stereo. Filename must include <code>\".stereo\"</code> to be interpreted as stereo.</li>\r</ul>"}},
{"SoundObject.ready":{"prefix":"SoundObject.ready","body":["SoundObject.ready"],"description":"Triggered when the sound has been downloaded and is ready to be played."}},
{"SoundCache":{"prefix":"SoundCache","body":["SoundCache"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td><td>Server Entity Scripts</td><td>Assignment Client Scripts</td></tr></table><br>API to manage sound cache resources."}},
{"SoundCache.getSound":{"prefix":"SoundCache.getSound","body":["SoundCache.getSound(${1:url: string})"],"description":"Loads the content of an audio file into a {@link SoundObject}, ready for playback by {@link Audio.playSound}."}},
{"AttachmentData":{"prefix":"AttachmentData","body":["AttachmentData"]}},
{"MyAvatar.getDomainMinScale":{"prefix":"MyAvatar.getDomainMinScale","body":["MyAvatar.getDomainMinScale"],"description":"Returns the minimum scale allowed for this avatar in the current domain.\rThis value can change as the user changes avatars or when changing domains."}},
{"MyAvatar.getDomainMaxScale":{"prefix":"MyAvatar.getDomainMaxScale","body":["MyAvatar.getDomainMaxScale"],"description":"Returns the maximum scale allowed for this avatar in the current domain.\rThis value can change as the user changes avatars or when changing domains."}},
{"MyAvatar.getEyeHeight":{"prefix":"MyAvatar.getEyeHeight","body":["MyAvatar.getEyeHeight"],"description":"Provides read only access to the current eye height of the avatar.\rThis height is only an estimate and might be incorrect for avatars that are missing standard joints."}},
{"MyAvatar.getHeight":{"prefix":"MyAvatar.getHeight","body":["MyAvatar.getHeight"],"description":"Provides read only access to the current height of the avatar.\rThis height is only an estimate and might be incorrect for avatars that are missing standard joints."}},
{"MyAvatar.setHandState":{"prefix":"MyAvatar.setHandState","body":["MyAvatar.setHandState(${1:state: string})"]}},
{"MyAvatar.getHandState":{"prefix":"MyAvatar.getHandState","body":["MyAvatar.getHandState"]}},
{"MyAvatar.setRawJointData":{"prefix":"MyAvatar.setRawJointData","body":["MyAvatar.setRawJointData(${1:data: Array.<JointData>})"]}},
{"MyAvatar.setJointData":{"prefix":"MyAvatar.setJointData","body":["MyAvatar.setJointData(${1:index: number},${2:rotation: Quat},${3:translation: Vec3})"],"description":"Set a specific joint's rotation and position relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.setJointRotation":{"prefix":"MyAvatar.setJointRotation","body":["MyAvatar.setJointRotation(${1:index: number},${2:rotation: Quat})"],"description":"Set a specific joint's rotation relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.setJointTranslation":{"prefix":"MyAvatar.setJointTranslation","body":["MyAvatar.setJointTranslation(${1:index: number},${2:translation: Vec3})"],"description":"Set a specific joint's translation relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.clearJointData":{"prefix":"MyAvatar.clearJointData","body":["MyAvatar.clearJointData(${1:index: number})"],"description":"Clear joint translations and rotations set by script for a specific joint. This restores all motion from the default \ranimation system including inverse kinematics for that joint.\r<p>Note: This is slightly faster than the function variation that specifies the joint name.</p>"}},
{"MyAvatar.isJointDataValid":{"prefix":"MyAvatar.isJointDataValid","body":["MyAvatar.isJointDataValid(${1:index: number})"]}},
{"MyAvatar.getJointRotation":{"prefix":"MyAvatar.getJointRotation","body":["MyAvatar.getJointRotation(${1:index: number})"],"description":"Get the rotation of a joint relative to its parent. For information on the joint hierarchy used, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>."}},
{"MyAvatar.getJointTranslation":{"prefix":"MyAvatar.getJointTranslation","body":["MyAvatar.getJointTranslation(${1:index: number})"],"description":"Get the translation of a joint relative to its parent. For information on the joint hierarchy used, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>."}},
{"MyAvatar.setJointData":{"prefix":"MyAvatar.setJointData","body":["MyAvatar.setJointData(${1:name: string},${2:rotation: Quat},${3:translation: Vec3})"],"description":"Set a specific joint's rotation and position relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.setJointRotation":{"prefix":"MyAvatar.setJointRotation","body":["MyAvatar.setJointRotation(${1:name: string},${2:rotation: Quat})"],"description":"Set a specific joint's rotation relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.setJointTranslation":{"prefix":"MyAvatar.setJointTranslation","body":["MyAvatar.setJointTranslation(${1:name: string},${2:translation: Vec3})"],"description":"Set a specific joint's translation relative to its parent.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse \rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints, \rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate \rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set \rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.clearJointData":{"prefix":"MyAvatar.clearJointData","body":["MyAvatar.clearJointData(${1:name: string})"],"description":"Clear joint translations and rotations set by script for a specific joint. This restores all motion from the default \ranimation system including inverse kinematics for that joint.\r<p>Note: This is slightly slower than the function variation that specifies the joint index.</p>"}},
{"MyAvatar.isJointDataValid":{"prefix":"MyAvatar.isJointDataValid","body":["MyAvatar.isJointDataValid(${1:name: string})"]}},
{"MyAvatar.getJointRotation":{"prefix":"MyAvatar.getJointRotation","body":["MyAvatar.getJointRotation(${1:name: string})"],"description":"Get the rotation of a joint relative to its parent. For information on the joint hierarchy used, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>."}},
{"MyAvatar.getJointTranslation":{"prefix":"MyAvatar.getJointTranslation","body":["MyAvatar.getJointTranslation(${1:name: number})"],"description":"Get the translation of a joint relative to its parent. For information on the joint hierarchy used, see \r<a href=\"https://docs.highfidelity.com/create-and-explore/avatars/avatar-standards\">Avatar Standards</a>."}},
{"MyAvatar.getJointRotations":{"prefix":"MyAvatar.getJointRotations","body":["MyAvatar.getJointRotations"],"description":"Get the rotations of all joints in the current avatar. Each joint's rotation is relative to its parent joint."}},
{"MyAvatar.getJointTranslations":{"prefix":"MyAvatar.getJointTranslations","body":["MyAvatar.getJointTranslations"]}},
{"MyAvatar.setJointRotations":{"prefix":"MyAvatar.setJointRotations","body":["MyAvatar.setJointRotations(${1:jointRotations: Array.<Quat>})"],"description":"Set the rotations of all joints in the current avatar. Each joint's rotation is relative to its parent joint.\r<p>Setting joint data completely overrides/replaces all motion from the default animation system including inverse\rkinematics, but just for the specified joint. So for example, if you were to procedurally manipulate the finger joints,\rthe avatar's hand and head would still do inverse kinematics properly. However, as soon as you start to manipulate\rjoints in the inverse kinematics chain, the inverse kinematics might not function as you expect. For example, if you set\rthe rotation of the elbow, the hand inverse kinematics position won't end up in the right place.</p>"}},
{"MyAvatar.setJointTranslations":{"prefix":"MyAvatar.setJointTranslations","body":["MyAvatar.setJointTranslations(${1:translations: Array.<Vec3>})"]}},
{"MyAvatar.clearJointsData":{"prefix":"MyAvatar.clearJointsData","body":["MyAvatar.clearJointsData"],"description":"Clear all joint translations and rotations that have been set by script. This restores all motion from the default \ranimation system including inverse kinematics for all joints."}},
{"MyAvatar.getJointIndex":{"prefix":"MyAvatar.getJointIndex","body":["MyAvatar.getJointIndex(${1:name: string})"],"description":"Get the joint index for a named joint. The joint index value is the position of the joint in the array returned by \r{@link MyAvatar.getJointNames} or {@link Avatar.getJointNames}."}},
{"MyAvatar.getJointNames":{"prefix":"MyAvatar.getJointNames","body":["MyAvatar.getJointNames"],"description":"Get the names of all the joints in the current avatar."}},
{"MyAvatar.setBlendshape":{"prefix":"MyAvatar.setBlendshape","body":["MyAvatar.setBlendshape(${1:name: string},${2:value: number})"]}},
{"MyAvatar.getAttachmentsVariant":{"prefix":"MyAvatar.getAttachmentsVariant","body":["MyAvatar.getAttachmentsVariant"]}},
{"MyAvatar.setAttachmentsVariant":{"prefix":"MyAvatar.setAttachmentsVariant","body":["MyAvatar.setAttachmentsVariant(${1:variant: object})"]}},
{"MyAvatar.updateAvatarEntity":{"prefix":"MyAvatar.updateAvatarEntity","body":["MyAvatar.updateAvatarEntity(${1:entityID: Uuid},${2:entityData: string})"]}},
{"MyAvatar.clearAvatarEntity":{"prefix":"MyAvatar.clearAvatarEntity","body":["MyAvatar.clearAvatarEntity(${1:entityID: Uuid})"]}},
{"MyAvatar.setForceFaceTrackerConnected":{"prefix":"MyAvatar.setForceFaceTrackerConnected","body":["MyAvatar.setForceFaceTrackerConnected(${1:connected: boolean})"]}},
{"MyAvatar.getAttachmentData":{"prefix":"MyAvatar.getAttachmentData","body":["MyAvatar.getAttachmentData"],"description":"Get information about all models currently attached to your avatar."}},
{"MyAvatar.setAttachmentData":{"prefix":"MyAvatar.setAttachmentData","body":["MyAvatar.setAttachmentData(${1:attachmentData: Array.<AttachmentData>})"],"description":"Set all models currently attached to your avatar. For example, if you retrieve attachment data using \r{@link MyAvatar.getAttachmentData} or {@link Avatar.getAttachmentData}, make changes to it, and then want to update your avatar's attachments per the \rchanged data. You can also remove all attachments by using setting <code>attachmentData</code> to <code>null</code>."}},
{"MyAvatar.attach":{"prefix":"MyAvatar.attach","body":["MyAvatar.attach(${1:modelURL: string},${2:jointName: string},${3:translation: Vec3},${4:rotation: Quat},${5:scale: number},${6:isSoft: boolean},${7:allowDuplicates: boolean},${8:useSaved: boolean})"],"description":"Attach a model to your avatar. For example, you can give your avatar a hat to wear, a guitar to hold, or a surfboard to \rstand on.\r<p>Note: Attached models are models only; they are not entities and can not be manipulated using the {@link Entities} API. \rNor can you use this function to attach an entity (such as a sphere or a box) to your avatar.</p>"}},
{"MyAvatar.detachOne":{"prefix":"MyAvatar.detachOne","body":["MyAvatar.detachOne(${1:modelURL: string},${2:jointName: string})"],"description":"Detach the most recently attached instance of a particular model from either a specific joint or any joint."}},
{"MyAvatar.detachAll":{"prefix":"MyAvatar.detachAll","body":["MyAvatar.detachAll(${1:modelURL: string},${2:jointName: string})"],"description":"Detach all instances of a particular model from either a specific joint or all joints."}},
{"MyAvatar.getAvatarEntityData":{"prefix":"MyAvatar.getAvatarEntityData","body":["MyAvatar.getAvatarEntityData"]}},
{"MyAvatar.setAvatarEntityData":{"prefix":"MyAvatar.setAvatarEntityData","body":["MyAvatar.setAvatarEntityData(${1:avatarEntityData: object})"]}},
{"MyAvatar.getSensorToWorldMatrix":{"prefix":"MyAvatar.getSensorToWorldMatrix","body":["MyAvatar.getSensorToWorldMatrix"]}},
{"MyAvatar.getSensorToWorldScale":{"prefix":"MyAvatar.getSensorToWorldScale","body":["MyAvatar.getSensorToWorldScale"]}},
{"MyAvatar.getControllerLeftHandMatrix":{"prefix":"MyAvatar.getControllerLeftHandMatrix","body":["MyAvatar.getControllerLeftHandMatrix"]}},
{"MyAvatar.getControllerRightHandMatrix":{"prefix":"MyAvatar.getControllerRightHandMatrix","body":["MyAvatar.getControllerRightHandMatrix"]}},
{"MyAvatar.getDataRate":{"prefix":"MyAvatar.getDataRate","body":["MyAvatar.getDataRate(${1:rateName: string})"]}},
{"MyAvatar.getUpdateRate":{"prefix":"MyAvatar.getUpdateRate","body":["MyAvatar.getUpdateRate(${1:rateName: string})"]}},
{"MyAvatar.displayNameChanged":{"prefix":"MyAvatar.displayNameChanged","body":["MyAvatar.displayNameChanged"]}},
{"MyAvatar.sessionDisplayNameChanged":{"prefix":"MyAvatar.sessionDisplayNameChanged","body":["MyAvatar.sessionDisplayNameChanged"]}},
{"MyAvatar.skeletonModelURLChanged":{"prefix":"MyAvatar.skeletonModelURLChanged","body":["MyAvatar.skeletonModelURLChanged"]}},
{"MyAvatar.lookAtSnappingChanged":{"prefix":"MyAvatar.lookAtSnappingChanged","body":["MyAvatar.lookAtSnappingChanged(${1:enabled: boolean})"]}},
{"MyAvatar.sessionUUIDChanged":{"prefix":"MyAvatar.sessionUUIDChanged","body":["MyAvatar.sessionUUIDChanged"]}},
{"MyAvatar.sendAvatarDataPacket":{"prefix":"MyAvatar.sendAvatarDataPacket","body":["MyAvatar.sendAvatarDataPacket(${1:sendAll: boolean})"]}},
{"MyAvatar.sendIdentityPacket":{"prefix":"MyAvatar.sendIdentityPacket","body":["MyAvatar.sendIdentityPacket"]}},
{"MyAvatar.setJointMappingsFromNetworkReply":{"prefix":"MyAvatar.setJointMappingsFromNetworkReply","body":["MyAvatar.setJointMappingsFromNetworkReply"]}},
{"MyAvatar.setSessionUUID":{"prefix":"MyAvatar.setSessionUUID","body":["MyAvatar.setSessionUUID(${1:sessionUUID: Uuid})"]}},
{"MyAvatar.getAbsoluteJointRotationInObjectFrame":{"prefix":"MyAvatar.getAbsoluteJointRotationInObjectFrame","body":["MyAvatar.getAbsoluteJointRotationInObjectFrame(${1:index: number})"]}},
{"MyAvatar.getAbsoluteJointTranslationInObjectFrame":{"prefix":"MyAvatar.getAbsoluteJointTranslationInObjectFrame","body":["MyAvatar.getAbsoluteJointTranslationInObjectFrame(${1:index: number})"]}},
{"MyAvatar.setAbsoluteJointRotationInObjectFrame":{"prefix":"MyAvatar.setAbsoluteJointRotationInObjectFrame","body":["MyAvatar.setAbsoluteJointRotationInObjectFrame(${1:index: number},${2:rotation: Quat})"]}},
{"MyAvatar.setAbsoluteJointTranslationInObjectFrame":{"prefix":"MyAvatar.setAbsoluteJointTranslationInObjectFrame","body":["MyAvatar.setAbsoluteJointTranslationInObjectFrame(${1:index: number},${2:translation: Vec3})"]}},
{"MyAvatar.getTargetScale":{"prefix":"MyAvatar.getTargetScale","body":["MyAvatar.getTargetScale"]}},
{"MyAvatar.resetLastSent":{"prefix":"MyAvatar.resetLastSent","body":["MyAvatar.resetLastSent"]}},
{"AvatarList":{"prefix":"AvatarList","body":["AvatarList"],"description":"<table><tr><th>Available in:</th><td>Assignment Client Scripts</td></tr></table><br><strong>Note:</strong> An <code>AvatarList</code> API is also provided for Interface and client entity scripts: it is a \rsynonym for the {@link AvatarManager} API."}},
{"AvatarList.getAvatarIdentifiers":{"prefix":"AvatarList.getAvatarIdentifiers","body":["AvatarList.getAvatarIdentifiers"]}},
{"AvatarList.getAvatarsInRange":{"prefix":"AvatarList.getAvatarsInRange","body":["AvatarList.getAvatarsInRange(${1:position: Vec3},${2:range: number})"]}},
{"AvatarList.getAvatar":{"prefix":"AvatarList.getAvatar","body":["AvatarList.getAvatar(${1:avatarID: Uuid})"]}},
{"AvatarList.avatarAddedEvent":{"prefix":"AvatarList.avatarAddedEvent","body":["AvatarList.avatarAddedEvent(${1:sessionUUID: Uuid})"]}},
{"AvatarList.avatarRemovedEvent":{"prefix":"AvatarList.avatarRemovedEvent","body":["AvatarList.avatarRemovedEvent(${1:sessionUUID: Uuid})"]}},
{"AvatarList.avatarSessionChangedEvent":{"prefix":"AvatarList.avatarSessionChangedEvent","body":["AvatarList.avatarSessionChangedEvent(${1:sessionUUID: Uuid},${2:oldSessionUUID: Uuid})"]}},
{"AvatarList.isAvatarInRange":{"prefix":"AvatarList.isAvatarInRange","body":["AvatarList.isAvatarInRange(${1:position: string},${2:range: string})"]}},
{"AvatarList.sessionUUIDChanged":{"prefix":"AvatarList.sessionUUIDChanged","body":["AvatarList.sessionUUIDChanged(${1:sessionUUID: Uuid},${2:oldSessionUUID: Uuid})"]}},
{"AvatarList.processAvatarDataPacket":{"prefix":"AvatarList.processAvatarDataPacket","body":["AvatarList.processAvatarDataPacket(${1:message},${2:sendingNode})"]}},
{"AvatarList.processAvatarIdentityPacket":{"prefix":"AvatarList.processAvatarIdentityPacket","body":["AvatarList.processAvatarIdentityPacket(${1:message},${2:sendingNode})"]}},
{"AvatarList.processKillAvatar":{"prefix":"AvatarList.processKillAvatar","body":["AvatarList.processKillAvatar(${1:message},${2:sendingNode})"]}},
{"MyAvatar.getDefaultJointRotation":{"prefix":"MyAvatar.getDefaultJointRotation","body":["MyAvatar.getDefaultJointRotation(${1:index: number})"]}},
{"MyAvatar.getDefaultJointTranslation":{"prefix":"MyAvatar.getDefaultJointTranslation","body":["MyAvatar.getDefaultJointTranslation(${1:index: number})"]}},
{"MyAvatar.getAbsoluteDefaultJointRotationInObjectFrame":{"prefix":"MyAvatar.getAbsoluteDefaultJointRotationInObjectFrame","body":["MyAvatar.getAbsoluteDefaultJointRotationInObjectFrame(${1:index: number})"],"description":"Provides read only access to the default joint rotations in avatar coordinates.\rThe default pose of the avatar is defined by the position and orientation of all bones\rin the avatar's model file. Typically this is a T-pose."}},
{"MyAvatar.getAbsoluteDefaultJointTranslationInObjectFrame":{"prefix":"MyAvatar.getAbsoluteDefaultJointTranslationInObjectFrame","body":["MyAvatar.getAbsoluteDefaultJointTranslationInObjectFrame(${1:index: number})"],"description":"Provides read only access to the default joint translations in avatar coordinates.\rThe default pose of the avatar is defined by the position and orientation of all bones\rin the avatar's model file. Typically this is a T-pose."}},
{"MyAvatar.setSkeletonOffset":{"prefix":"MyAvatar.setSkeletonOffset","body":["MyAvatar.setSkeletonOffset(${1:offset: Vec3})"],"description":"Set the offset applied to the current avatar. The offset adjusts the position that the avatar is rendered. For example, \rwith an offset of <code>{ x: 0, y: 0.1, z: 0 }</code>, your avatar will appear to be raised off the ground slightly."}},
{"MyAvatar.getSkeletonOffset":{"prefix":"MyAvatar.getSkeletonOffset","body":["MyAvatar.getSkeletonOffset"],"description":"Get the offset applied to the current avatar. The offset adjusts the position that the avatar is rendered. For example, \rwith an offset of <code>{ x: 0, y: 0.1, z: 0 }</code>, your avatar will appear to be raised off the ground slightly."}},
{"MyAvatar.getJointPosition":{"prefix":"MyAvatar.getJointPosition","body":["MyAvatar.getJointPosition(${1:index: number})"],"description":"Get the position of a joint in the current avatar."}},
{"MyAvatar.getJointPosition":{"prefix":"MyAvatar.getJointPosition","body":["MyAvatar.getJointPosition(${1:name: string})"],"description":"Get the position of a joint in the current avatar."}},
{"MyAvatar.getNeckPosition":{"prefix":"MyAvatar.getNeckPosition","body":["MyAvatar.getNeckPosition"],"description":"Get the position of the current avatar's neck in world coordinates."}},
{"MyAvatar.getAcceleration":{"prefix":"MyAvatar.getAcceleration","body":["MyAvatar.getAcceleration"]}},
{"MyAvatar.getWorldFeetPosition":{"prefix":"MyAvatar.getWorldFeetPosition","body":["MyAvatar.getWorldFeetPosition"],"description":"Get the position of the current avatar's feet (or rather, bottom of its collision capsule) in world coordinates."}},
{"MyAvatar.getParentID":{"prefix":"MyAvatar.getParentID","body":["MyAvatar.getParentID"]}},
{"MyAvatar.setParentID":{"prefix":"MyAvatar.setParentID","body":["MyAvatar.setParentID(${1:parentID: Uuid})"]}},
{"MyAvatar.getParentJointIndex":{"prefix":"MyAvatar.getParentJointIndex","body":["MyAvatar.getParentJointIndex"]}},
{"MyAvatar.setParentJointIndex":{"prefix":"MyAvatar.setParentJointIndex","body":["MyAvatar.setParentJointIndex(${1:parentJointIndex: number})"]}},
{"MyAvatar.getSkeleton":{"prefix":"MyAvatar.getSkeleton","body":["MyAvatar.getSkeleton"],"description":"Returns an array of joints, where each joint is an object containing name, index, and parentIndex fields."}},
{"MyAvatar.SkeletonJoint":{"prefix":"MyAvatar.SkeletonJoint","body":["MyAvatar.SkeletonJoint"],"description":"Information about a single joint in an Avatar's skeleton hierarchy."}},
{"MyAvatar.getSimulationRate":{"prefix":"MyAvatar.getSimulationRate","body":["MyAvatar.getSimulationRate(${1:rateName: string})"]}},
{"MyAvatar.getLeftPalmPosition":{"prefix":"MyAvatar.getLeftPalmPosition","body":["MyAvatar.getLeftPalmPosition"],"description":"Get the position of the left palm in world coordinates."}},
{"MyAvatar.getLeftPalmRotation":{"prefix":"MyAvatar.getLeftPalmRotation","body":["MyAvatar.getLeftPalmRotation"],"description":"Get the rotation of the left palm in world coordinates."}},
{"MyAvatar.getRightPalmPosition":{"prefix":"MyAvatar.getRightPalmPosition","body":["MyAvatar.getRightPalmPosition"],"description":"Get the position of the right palm in world coordinates."}},
{"MyAvatar.getRightPalmRotation":{"prefix":"MyAvatar.getRightPalmRotation","body":["MyAvatar.getRightPalmRotation"],"description":"Get the rotation of the right palm in world coordinates."}},
{"MyAvatar.rigReady":{"prefix":"MyAvatar.rigReady","body":["MyAvatar.rigReady"]}},
{"MyAvatar.rigReset":{"prefix":"MyAvatar.rigReset","body":["MyAvatar.rigReset"]}},
{"Controller.Actions":{"prefix":"Controller.Actions","body":["Controller.Actions"],"description":"<p>The <code>Controller.Actions</code> object has properties representing predefined actions on the user's avatar and \rInterface. The property values are integer IDs, uniquely identifying each action. <em>Read-only.</em> These can be used \ras end points in the routes of a {@link MappingObject}. The data routed to each action is either a number or a \r{@link Pose}.</p>\r\r<table>\r <thead>\r <tr><th>Property</th><th>Type</th><th>Data</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td colSpan=4><strong>Avatar Movement</strong></td>\r <tr><td><code>TranslateX</code></td><td>number</td><td>number</td><td>Move the user's avatar in the direction of its \r x-axis, if the camera isn't in independent or mirror modes.</td></tr>\r <tr><td><code>TranslateY</code></td><td>number</td><td>number</td><td>Move the user's avatar in the direction of its \r y-axis, if the camera isn't in independent or mirror modes.</td></tr>\r <tr><td><code>TranslateZ</code></td><td>number</td><td>number</td><td>Move the user's avatar in the direction of its \r z-axis, if the camera isn't in independent or mirror modes.</td></tr>\r <tr><td><code>Pitch</code></td><td>number</td><td>number</td><td>Rotate the user's avatar head and attached camera \r about its negative x-axis (i.e., positive values pitch down), if the camera isn't in HMD, independent, or mirror \r modes.</td></tr>\r <tr><td><code>Yaw</code></td><td>number</td><td>number</td><td>Rotate the user's avatar about its y-axis, if the \r camera isn't in independent or mirror modes.</td></tr>\r <tr><td><code>Roll</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r <tr><td><code>StepTranslateX</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r <tr><td><code>StepTranslateY</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r <tr><td><code>StepTranslateZ</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r <tr><td><code>StepPitch</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r <tr><td><code>StepYaw</code></td><td>number</td><td>number</td><td>Rotate the user's avatar about its y-axis in a \r step increment, if the camera isn't in independent or mirror modes.</td></tr>\r <tr><td><code>StepRoll</code></td><td>number</td><td>number</td><td>No action.</td></tr>\r\r <tr><td colSpan=4><strong>Avatar Skeleton</strong></td>\r <tr><td><code>Hips</code></td><td>number</td><td>{@link Pose}</td><td>Set the hips pose of the user's avatar.\r </td></tr>\r <tr><td><code>Spine2</code></td><td>number</td><td>{@link Pose}</td><td>Set the spine2 pose of the user's avatar.\r </td></tr>\r <tr><td><code>Head</code></td><td>number</td><td>{@link Pose}</td><td>Set the head pose of the user's avatar.\r </td></tr>\r <tr><td><code>LeftArm</code></td><td>number</td><td>{@link Pose}</td><td>Set the left arm pose of the user's avatar.\r </td></tr>\r <tr><td><code>RightArm</code></td><td>number</td><td>{@link Pose}</td><td>Set the right arm pose of the user's \r avatar.</td></tr>\r <tr><td><code>LeftHand</code></td><td>number</td><td>{@link Pose}</td><td>Set the left hand pose of the user's\r avatar.</td></tr>\r <tr><td><code>LeftHandThumb1</code></td><td>number</td><td>{@link Pose}</td><td>Set the left thumb 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandThumb2</code></td><td>number</td><td>{@link Pose}</td><td>Set the left thumb 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandThumb3</code></td><td>number</td><td>{@link Pose}</td><td>Set the left thumb 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandThumb4</code></td><td>number</td><td>{@link Pose}</td><td>Set the left thumb 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandIndex1</code></td><td>number</td><td>{@link Pose}</td><td>Set the left index 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandIndex2</code></td><td>number</td><td>{@link Pose}</td><td>Set the left index 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandIndex3</code></td><td>number</td><td>{@link Pose}</td><td>Set the left index 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandIndex4</code></td><td>number</td><td>{@link Pose}</td><td>Set the left index 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandMiddle1</code></td><td>number</td><td>{@link Pose}</td><td>Set the left middle 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandMiddle2</code></td><td>number</td><td>{@link Pose}</td><td>Set the left middle 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandMiddle3</code></td><td>number</td><td>{@link Pose}</td><td>Set the left middle 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandMiddle4</code></td><td>number</td><td>{@link Pose}</td><td>Set the left middle 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandRing1</code></td><td>number</td><td>{@link Pose}</td><td>Set the left ring 1 finger joint pose \r of the user's avatar.</td></tr>\r <tr><td><code>LeftHandRing2</code></td><td>number</td><td>{@link Pose}</td><td>Set the left ring 2 finger joint pose \r of the user's avatar.</td></tr>\r <tr><td><code>LeftHandRing3</code></td><td>number</td><td>{@link Pose}</td><td>Set the left ring 3 finger joint pose \r of the user's avatar.</td></tr>\r <tr><td><code>LeftHandRing4</code></td><td>number</td><td>{@link Pose}</td><td>Set the left ring 4 finger joint pose \r of the user's avatar.</td></tr>\r <tr><td><code>LeftHandPinky1</code></td><td>number</td><td>{@link Pose}</td><td>Set the left pinky 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandPinky2</code></td><td>number</td><td>{@link Pose}</td><td>Set the left pinky 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandPinky3</code></td><td>number</td><td>{@link Pose}</td><td>Set the left pinky 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftHandPinky4</code></td><td>number</td><td>{@link Pose}</td><td>Set the left pinky 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHand</code></td><td>number</td><td>{@link Pose}</td><td>Set the right hand of the user's avatar.\r </td></tr>\r <tr><td><code>RightHandThumb1</code></td><td>number</td><td>{@link Pose}</td><td>Set the right thumb 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandThumb2</code></td><td>number</td><td>{@link Pose}</td><td>Set the right thumb 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandThumb3</code></td><td>number</td><td>{@link Pose}</td><td>Set the right thumb 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandThumb4</code></td><td>number</td><td>{@link Pose}</td><td>Set the right thumb 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandIndex1</code></td><td>number</td><td>{@link Pose}</td><td>Set the right index 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandIndex2</code></td><td>number</td><td>{@link Pose}</td><td>Set the right index 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandIndex3</code></td><td>number</td><td>{@link Pose}</td><td>Set the right index 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandIndex4</code></td><td>number</td><td>{@link Pose}</td><td>Set the right index 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandMiddle1</code></td><td>number</td><td>{@link Pose}</td><td>Set the right middle 1 finger \r joint pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandMiddle2</code></td><td>number</td><td>{@link Pose}</td><td>Set the right middle 2 finger \r joint pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandMiddle3</code></td><td>number</td><td>{@link Pose}</td><td>Set the right middle 3 finger \r joint pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandMiddle4</code></td><td>number</td><td>{@link Pose}</td><td>Set the right middle 4 finger \r joint pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandRing1</code></td><td>number</td><td>{@link Pose}</td><td>Set the right ring 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandRing2</code></td><td>number</td><td>{@link Pose}</td><td>Set the right ring 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandRing3</code></td><td>number</td><td>{@link Pose}</td><td>Set the right ring 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandRing4</code></td><td>number</td><td>{@link Pose}</td><td>Set the right ring 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandPinky1</code></td><td>number</td><td>{@link Pose}</td><td>Set the right pinky 1 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandPinky2</code></td><td>number</td><td>{@link Pose}</td><td>Set the right pinky 2 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandPinky3</code></td><td>number</td><td>{@link Pose}</td><td>Set the right pinky 3 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>RightHandPinky4</code></td><td>number</td><td>{@link Pose}</td><td>Set the right pinky 4 finger joint \r pose of the user's avatar.</td></tr>\r <tr><td><code>LeftFoot</code></td><td>number</td><td>{@link Pose}</td><td>Set the left foot pose of the user's\r avatar.</td></tr>\r <tr><td><code>RightFoot</code></td><td>number</td><td>{@link Pose}</td><td>Set the right foot pose of the user's\r avatar.</td></tr>\r\r <tr><td colSpan=4><strong><strong>Application</strong></td>\r <tr><td><code>BoomIn</code></td><td>number</td><td>number</td><td>Zoom camera in from third person toward first \r person view.</td></tr>\r <tr><td><code>BoomOut</code></td><td>number</td><td>number</td><td>Zoom camera out from first person to third \r person view.</td></tr>\r <tr><td><code>CycleCamera</code></td><td>number</td><td>number</td><td>Cycle the camera view from first person, to \r third person, to full screen mirror, then back to first person and repeat.</td></tr>\r <tr><td><code>ContextMenu</code></td><td>number</td><td>number</td><td>Show / hide the tablet.</td></tr>\r <tr><td><code>ToggleMute</code></td><td>number</td><td>number</td><td>Toggle the microphone mute.</td></tr>\r <tr><td><code>ToggleOverlay</code></td><td>number</td><td>number</td><td>Toggle the display of overlays.</td></tr>\r <tr><td><code>Sprint</code></td><td>number</td><td>number</td><td>Set avatar sprint mode.</td></tr>\r <tr><td><code>ReticleClick</code></td><td>number</td><td>number</td><td>Set mouse-pressed.</td></tr>\r <tr><td><code>ReticleX</code></td><td>number</td><td>number</td><td>Move the cursor left/right in the x direction.\r </td></tr>\r <tr><td><code>ReticleY</code></td><td>number</td><td>number</td><td>move the cursor up/down in the y direction.\r </td></tr>\r <tr><td><code>ReticleLeft</code></td><td>number</td><td>number</td><td>Move the cursor left.</td></tr>\r <tr><td><code>ReticleRight</code></td><td>number</td><td>number</td><td>Move the cursor right.</td></tr>\r <tr><td><code>ReticleUp</code></td><td>number</td><td>number</td><td>Move the cursor up.</td></tr>\r <tr><td><code>ReticleDown</code></td><td>number</td><td>number</td><td>Move the cursor down.</td></tr>\r <tr><td><code>UiNavLateral</code></td><td>number</td><td>number</td><td>Generate a keyboard left or right arrow key \r event.</td></tr>\r <tr><td><code>UiNavVertical</code></td><td>number</td><td>number</td><td>Generate a keyboard up or down arrow key \r event.</td></tr>\r <tr><td><code>UiNavGroup</code></td><td>number</td><td>number</td><td>Generate a keyboard tab or back-tab key event.\r </td></tr>\r <tr><td><code>UiNavSelect</code></td><td>number</td><td>number</td><td>Generate a keyboard Enter key event.\r </td></tr>\r <tr><td><code>UiNavBack</code></td><td>number</td><td>number</td><td>Generate a keyboard Esc key event.</td></tr>\r <tr><td><code>LeftHandClick</code></td><td>number</td><td>number</td><td><strong>Deprecated: </strong> No action.\r </td></tr>\r <tr><td><code>RightHandClick</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> No action.\r </td></tr>\r <tr><td><code>Shift</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> No action.</td></tr>\r <tr><td><code>PrimaryAction</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> No action.\r </td></tr>\r <tr><td><code>SecondaryAction</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> No action.\r </td></tr>\r\r <tr><td colSpan=4><strong>Aliases</strong></td>\r <tr><td><code>Backward</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateZ</code> in the \r positive direction.</td></tr>\r <tr><td><code>Forward</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateZ</code> in the negative \r direction.</td></tr>\r <tr><td><code>StrafeRight</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateX</code> in the\r positive direction.</td></tr>\r <tr><td><code>StrafeLeft</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateX</code> in the\r negative direction.</td></tr>\r <tr><td><code>Up</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateY</code> in the positive\r direction.</td></tr>\r <tr><td><code>Down</code></td><td>number</td><td>number</td><td>Alias for <code>TranslateY</code> in the negative \r direction.</td></tr>\r <tr><td><code>PitchDown</code></td><td>number</td><td>number</td><td>Alias for <code>Pitch</code> in the positive \r direction.</td></tr>\r <tr><td><code>PitchUp</code></td><td>number</td><td>number</td><td>Alias for <code>Pitch</code> in the negative\r direction.</td></tr>\r <tr><td><code>YawLeft</code></td><td>number</td><td>number</td><td>Alias for <code>Yaw</code> in the positive\r direction.</td></tr>\r <tr><td><code>YawRight</code></td><td>number</td><td>number</td><td>Alias for <code>Yaw</code> in the negative \r direction.</td></tr>\r\r <tr><td colSpan=4><strong>Deprecated Aliases</strong></td>\r <tr><td><code>LEFT_HAND</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated:</strong> Use \r <code>LeftHand</code> instead.</td></tr>\r <tr><td><code>RIGHT_HAND</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated:</strong> Use \r <code>RightHand</code> instead.</td></tr>\r <tr><td><code>BOOM_IN</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>BoomIn</code> instead.</td></tr>\r <tr><td><code>BOOM_OUT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>BoomOut</code> instead.</td></tr>\r <tr><td><code>CONTEXT_MENU</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>ContextMenu</code> instead.</td></tr>\r <tr><td><code>TOGGLE_MUTE</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>ToggleMute</code> instead.</td></tr>\r <tr><td><code>SPRINT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Sprint</code> instead.</td></tr>\r <tr><td><code>LONGITUDINAL_BACKWARD</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Backward</code> instead.</td></tr>\r <tr><td><code>LONGITUDINAL_FORWARD</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Forward</code> instead.</td></tr>\r <tr><td><code>LATERAL_LEFT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>StrafeLeft</code> instead.</td></tr>\r <tr><td><code>LATERAL_RIGHT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>StrafeRight</code> instead.</td></tr>\r <tr><td><code>VERTICAL_UP</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Up</code> instead.</td></tr>\r <tr><td><code>VERTICAL_DOWN</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Down</code> instead.</td></tr>\r <tr><td><code>PITCH_DOWN</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>PitchDown</code> instead.</td></tr>\r <tr><td><code>PITCH_UP</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>PitchUp</code> instead.</td></tr>\r <tr><td><code>YAW_LEFT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>YawLeft</code> instead.</td></tr>\r <tr><td><code>YAW_RIGHT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>YawRight</code> instead.</td></tr>\r <tr><td><code>LEFT_HAND_CLICK</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>LeftHandClick</code> instead.</td></tr>\r <tr><td><code>RIGHT_HAND_CLICK</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>RightHandClick</code> instead.</td></tr>\r <tr><td><code>SHIFT</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>Shift</code> instead.</td></tr>\r <tr><td><code>ACTION1</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>PrimaryAction</code> instead.</td></tr>\r <tr><td><code>ACTION2</code></td><td>number</td><td>number</td><td><strong>Deprecated:</strong> Use \r <code>SecondaryAction</code> instead.</td></tr>\r\r <tr><td colSpan=4><strong>Deprecated Trackers</strong></td>\r <tr><td><code>TrackedObject00</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject01</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject02</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject03</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject04</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject05</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject06</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject07</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject08</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject09</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject10</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject11</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject12</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject13</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject14</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r <tr><td><code>TrackedObject15</code></td><td>number</td><td>{@link Pose}</td><td><strong>Deprecated: </strong> No\r action.</td></tr>\r </tbody>\r</table>"}},
{"Controller.Hand":{"prefix":"Controller.Hand","body":["Controller.Hand"],"description":"<p>Some controller actions may be associated with one or both hands:</p>\r<table>\r <thead>\r <tr><th>Value</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>0</code></td><td>Left hand.</td></tr>\r <tr><td><code>1</code></td><td>Right hand.</td></tr>\r <tr><td><code>2</code></td><td>Both hands.</td></tr>\r </tbody>\r</table>"}},
{"Controller.Hardware":{"prefix":"Controller.Hardware","body":["Controller.Hardware"],"description":"<p>The <code>Controller.Hardware</code> object has properties representing standard and hardware-specific controller and \rcomputer outputs, plus predefined actions on Interface and the user's avatar. <em>Read-only.</em> The outputs can be mapped \rto actions or functions in a {@link RouteObject} mapping. Additionally, hardware-specific controller outputs can be mapped \rto standard controller outputs. \r\r<p>Controllers typically implement a subset of the {@link Controller.Standard} controls, plus they may implement some extras. \rSome common controllers are included in the table. You can see the outputs provided by these and others by \rviewing their {@link Controller.MappingJSON|MappingJSON} files at \r<a href=\"https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers\">\rhttps://github.com/highfidelity/hifi/tree/master/interface/resources/controllers</a>.</p>\r\r<table>\r <thead>\r <tr><th>Property</th><th>Type</th><th>Description</th></tr>\r </thead>\r <tbody>\r <tr><td><code>Controller.Hardware.Actions</code></td><td>object</td><td>Synonym for {@link Controller.Actions}.</td></tr>\r <tr><td><code>Controller.Hardware.Application</code></td><td>object</td><td>Interface state outputs. See \r {@link Controller.Hardware-Application}.</td></tr>\r <tr><td><code>Controller.Hardware.Keyboard</code></td><td>object</td><td>Keyboard, mouse, and touch pad outputs. See\r {@link Controller.Hardware-Keyboard}.</td></tr>\r <tr><td><code>Controller.Hardware.OculusTouch</code></td><td>object</td><td>Oculus Rift HMD outputs. See\r {@link Controller.Hardware-OculusTouch}.</td></tr>\r <tr><td><code>Controller.Hardware.Vive</code></td><td>object</td><td>Vive HMD outputs. See\r {@link Controller.Hardware-Vive}.</td></tr>\r </tbody>\r</table>"}},
{"Pose":{"prefix":"Pose","body":["Pose"],"description":"The pose of a joint or other item relative to the world or a parent."}},
{"Controller.getAllActions":{"prefix":"Controller.getAllActions","body":["Controller.getAllActions"],"description":"Get a list of all available actions."}},
{"Controller.getAvailableInputs":{"prefix":"Controller.getAvailableInputs","body":["Controller.getAvailableInputs(${1:deviceID: number})"],"description":"Get a list of all available inputs for a hardware device."}},
{"Controller.getDeviceName":{"prefix":"Controller.getDeviceName","body":["Controller.getDeviceName(${1:deviceID: number})"],"description":"Find the name of a particular controller from its device ID."}},
{"Controller.getActionValue":{"prefix":"Controller.getActionValue","body":["Controller.getActionValue(${1:actionID: number})"],"description":"Get the current value of an action."}},
{"Controller.findDevice":{"prefix":"Controller.findDevice","body":["Controller.findDevice(${1:deviceName: string})"],"description":"Find the ID of a specific controller from its device name."}},
{"Controller.getDeviceNames":{"prefix":"Controller.getDeviceNames","body":["Controller.getDeviceNames"],"description":"Get the names of all currently available controller devices plus \"Actions\", \"Application\", and \"Standard\"."}},
{"Controller.findAction":{"prefix":"Controller.findAction","body":["Controller.findAction(${1:actionName: string})"],"description":"Find the ID of an action from its name."}},
{"Controller.getActionNames":{"prefix":"Controller.getActionNames","body":["Controller.getActionNames"],"description":"Get the names of all actions available as properties of {@link Controller.Actions}."}},
{"Controller.getValue":{"prefix":"Controller.getValue","body":["Controller.getValue(${1:source: number})"],"description":"Get the value of a controller button or axis output. Note: Also gets the value of a controller axis output."}},
{"Controller.getAxisValue":{"prefix":"Controller.getAxisValue","body":["Controller.getAxisValue(${1:source: number})"],"description":"Get the value of a controller axis output. Note: Also gets the value of a controller button output."}},
{"Controller.getPoseValue":{"prefix":"Controller.getPoseValue","body":["Controller.getPoseValue(${1:source: number})"],"description":"Get the value of a controller pose output."}},
{"Controller.triggerHapticPulse":{"prefix":"Controller.triggerHapticPulse","body":["Controller.triggerHapticPulse(${1:strength: number},${2:duration: number},${3:hand: Controller.Hand})"],"description":"Triggers a haptic pulse on connected and enabled devices that have the capability."}},
{"Controller.triggerShortHapticPulse":{"prefix":"Controller.triggerShortHapticPulse","body":["Controller.triggerShortHapticPulse(${1:strength: number},${2:hand: Controller.Hand})"],"description":"Triggers a 250ms haptic pulse on connected and enabled devices that have the capability."}},
{"Controller.triggerHapticPulseOnDevice":{"prefix":"Controller.triggerHapticPulseOnDevice","body":["Controller.triggerHapticPulseOnDevice(${1:deviceID: number},${2:strength: number},${3:duration: number},${4:hand: Controller.Hand})"],"description":"Triggers a haptic pulse on a particular device if connected and enabled and it has the capability."}},
{"Controller.triggerShortHapticPulseOnDevice":{"prefix":"Controller.triggerShortHapticPulseOnDevice","body":["Controller.triggerShortHapticPulseOnDevice(${1:deviceID: number},${2:strength: number},${3:hand: Controller.Hand})"],"description":"Triggers a 250ms haptic pulse on a particular device if connected and enabled and it has the capability."}},
{"Controller.newMapping":{"prefix":"Controller.newMapping","body":["Controller.newMapping(${1:mappingName: string})"],"description":"Create a new controller mapping. Routes can then be added to the mapping using {@link MappingObject} methods and \rrouted to <code>Standard</code> controls, <code>Actions</code>, or script functions using {@link RouteObject} \rmethods. The mapping can then be enabled using {@link Controller.enableMapping|enableMapping} for it to take effect."}},
{"Controller.enableMapping":{"prefix":"Controller.enableMapping","body":["Controller.enableMapping(${1:mappingName: string},${2:enable: boolean})"],"description":"Enable or disable a controller mapping. When enabled, the routes in the mapping have effect."}},
{"Controller.disableMapping":{"prefix":"Controller.disableMapping","body":["Controller.disableMapping(${1:mappingName: string})"],"description":"Disable a controller mapping. When disabled, the routes in the mapping have no effect."}},
{"Controller.parseMapping":{"prefix":"Controller.parseMapping","body":["Controller.parseMapping(${1:jsonString: string})"],"description":"Create a new controller mapping from a {@link Controller.MappingJSON|MappingJSON} string. Use \r{@link Controller.enableMapping|enableMapping} to enable the mapping for it to take effect."}},
{"Controller.loadMapping":{"prefix":"Controller.loadMapping","body":["Controller.loadMapping(${1:jsonURL: string})"],"description":"Create a new controller mapping from a {@link Controller.MappingJSON|MappingJSON} JSON file at a URL. Use \r{@link Controller.enableMapping|enableMapping} to enable the mapping for it to take effect."}},
{"Controller.getHardware":{"prefix":"Controller.getHardware","body":["Controller.getHardware"],"description":"Get the {@link Controller.Hardware} property tree. Calling this function is the same as using the {@link Controller} \rproperty, <code>Controller.Hardware</code>."}},
{"Controller.getActions":{"prefix":"Controller.getActions","body":["Controller.getActions"],"description":"Get the {@link Controller.Actions} property tree. Calling this function is the same as using the {@link Controller} \rproperty, <code>Controller.Actions</code>."}},
{"Controller.getStandard":{"prefix":"Controller.getStandard","body":["Controller.getStandard"],"description":"Get the {@link Controller.Standard} property tree. Calling this function is the same as using the {@link Controller} \rproperty, <code>Controller.Standard</code>."}},
{"Controller.startInputRecording":{"prefix":"Controller.startInputRecording","body":["Controller.startInputRecording"],"description":"Start making a recording of currently active controllers."}},
{"Controller.stopInputRecording":{"prefix":"Controller.stopInputRecording","body":["Controller.stopInputRecording"],"description":"Stop making a recording started by {@link Controller.startInputRecording|startInputRecording}."}},
{"Controller.startInputPlayback":{"prefix":"Controller.startInputPlayback","body":["Controller.startInputPlayback"],"description":"Play back the current recording from the beginning. The current recording may have been recorded by \r{@link Controller.startInputRecording|startInputRecording} and \r{@link Controller.stopInputRecording|stopInputRecording}, or loaded by \r{@link Controller.loadInputRecording|loadInputRecording}. Playback repeats in a loop until \r{@link Controller.stopInputPlayback|stopInputPlayback} is called."}},
{"Controller.stopInputPlayback":{"prefix":"Controller.stopInputPlayback","body":["Controller.stopInputPlayback"],"description":"Stop play back of a recording started by {@link Controller.startInputPlayback|startInputPlayback}."}},
{"Controller.saveInputRecording":{"prefix":"Controller.saveInputRecording","body":["Controller.saveInputRecording"],"description":"Save the current recording to a file. The current recording may have been recorded by\r{@link Controller.startInputRecording|startInputRecording} and\r{@link Controller.stopInputRecording|stopInputRecording}, or loaded by\r{@link Controller.loadInputRecording|loadInputRecording}. It is saved in the directory returned by \r{@link Controller.getInputRecorderSaveDirectory|getInputRecorderSaveDirectory}."}},
{"Controller.loadInputRecording":{"prefix":"Controller.loadInputRecording","body":["Controller.loadInputRecording(${1:file: string})"],"description":"Load an input recording, ready for play back."}},
{"Controller.getInputRecorderSaveDirectory":{"prefix":"Controller.getInputRecorderSaveDirectory","body":["Controller.getInputRecorderSaveDirectory"],"description":"Get the directory in which input recordings are saved."}},
{"Controller.getRunningInputDevices":{"prefix":"Controller.getRunningInputDevices","body":["Controller.getRunningInputDevices"],"description":"Get all the active and enabled (running) input devices"}},
{"Controller.captureMouseEvents":{"prefix":"Controller.captureMouseEvents","body":["Controller.captureMouseEvents"],"description":"Disable processing of mouse \"move\", \"press\", \"double-press\", and \"release\" events into \r{@link Controller.Hardware|Controller.Hardware.Keyboard} outputs."}},
{"Controller.releaseMouseEvents":{"prefix":"Controller.releaseMouseEvents","body":["Controller.releaseMouseEvents"],"description":"Enable processing of mouse \"move\", \"press\", \"double-press\", and \"release\" events into \r{@link Controller.Hardware-Keyboard|Controller.Hardware.Keyboard} outputs that were disabled using \r{@link Controller.captureMouseEvents|captureMouseEvents}."}},
{"Controller.captureTouchEvents":{"prefix":"Controller.captureTouchEvents","body":["Controller.captureTouchEvents"],"description":"Disable processing of touch \"begin\", \"update\", and \"end\" events into \r{@link Controller.Hardware|Controller.Hardware.Keyboard}, \r{@link Controller.Hardware|Controller.Hardware.Touchscreen}, and \r{@link Controller.Hardware|Controller.Hardware.TouchscreenVirtualPad} outputs."}},
{"Controller.releaseTouchEvents":{"prefix":"Controller.releaseTouchEvents","body":["Controller.releaseTouchEvents"],"description":"Enable processing of touch \"begin\", \"update\", and \"end\" events into \r{@link Controller.Hardware|Controller.Hardware.Keyboard}, \r{@link Controller.Hardware|Controller.Hardware.Touchscreen}, and \r{@link Controller.Hardware|Controller.Hardware.TouchscreenVirtualPad} outputs that were disabled using \r{@link Controller.captureTouchEvents|captureTouchEvents}."}},
{"Controller.captureWheelEvents":{"prefix":"Controller.captureWheelEvents","body":["Controller.captureWheelEvents"],"description":"Disable processing of mouse wheel rotation events into {@link Controller.Hardware|Controller.Hardware.Keyboard} \routputs."}},
{"Controller.releaseWheelEvents":{"prefix":"Controller.releaseWheelEvents","body":["Controller.releaseWheelEvents"],"description":"Enable processing of mouse wheel rotation events into {@link Controller.Hardware|Controller.Hardware.Keyboard} \routputs that wer disabled using {@link Controller.captureWheelEvents|captureWheelEvents}."}},
{"Controller.captureActionEvents":{"prefix":"Controller.captureActionEvents","body":["Controller.captureActionEvents"],"description":"Disable translating and rotating the user's avatar in response to keyboard and controller controls."}},
{"Controller.releaseActionEvents":{"prefix":"Controller.releaseActionEvents","body":["Controller.releaseActionEvents"],"description":"Enable translating and rotating the user's avatar in response to keyboard and controller controls that were disabled \rusing {@link Controller.captureActionEvents|captureActionEvents}."}},
{"Controller.actionEvent":{"prefix":"Controller.actionEvent","body":["Controller.actionEvent(${1:actionID: number},${2:value: number})"],"description":"Triggered when an action occurs."}},
{"Controller.inputEvent":{"prefix":"Controller.inputEvent","body":["Controller.inputEvent(${1:action: number},${2:value: number})"],"description":"Triggered when there is a new controller input event."}},
{"Controller.hardwareChanged":{"prefix":"Controller.hardwareChanged","body":["Controller.hardwareChanged"],"description":"Triggered when a device is registered or unregistered by a plugin. Not all plugins generate \r<code>hardwareChanged</code> events: for example connecting or disconnecting a mouse will not generate an event but \rconnecting or disconnecting an Xbox controller will."}},
{"Controller.deviceRunningChanged":{"prefix":"Controller.deviceRunningChanged","body":["Controller.deviceRunningChanged(${1:deviceName: string},${2:isEnabled: boolean})"],"description":"Triggered when a device is enabled/disabled\rEnabling/Disabling Leapmotion on settings/controls will trigger this signal."}},
{"Controller.Standard":{"prefix":"Controller.Standard","body":["Controller.Standard"],"description":"<p>The <code>Controller.Standard</code> object has properties representing standard controller outputs. Those for physical \rcontrollers are based on the XBox controller, with aliases for PlayStation. The property values are integer IDs, uniquely \ridentifying each output. <em>Read-only.</em> These can be mapped to actions or functions in a {@link RouteObject} \rmapping.</p>\r\r<p>The data value provided by each control is either a number or a {@link Pose}. Numbers are typically normalized to\r<code>0.0</code> or <code>1.0</code> for button states, the range <code>0.0 – 1.0</code> for unidirectional scales,\rand the range <code>-1.0 – 1.0</code> for bidirectional scales.</p>\r\r<p>Each hardware device has a mapping from its outputs to <code>Controller.Standard</code> items, specified in a JSON file.\rFor example, <a href=\"https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/leapmotion.json\">\rleapmotion.json</a> and\r<a href=\"https://github.com/highfidelity/hifi/blob/master/interface/resources/controllers/vive.json\">vive.json</a>.</p>\r\r<table>\r <thead>\r <tr><th>Property</th><th>Type</th><th>Data</th><th>Description</th></tr>\r </thead>\r <tbody>\r\r <tr><td colspan=\"4\"><strong>Buttons</strong></td></tr>\r <tr><td><code>A</code></td><td>number</td><td>number</td><td>\"A\" button pressed.</td></tr>\r <tr><td><code>B</code></td><td>number</td><td>number</td><td>\"B\" button pressed.</td></tr>\r <tr><td><code>X</code></td><td>number</td><td>number</td><td>\"X\" button pressed.</td></tr>\r <tr><td><code>Y</code></td><td>number</td><td>number</td><td>\"Y\" button pressed.</td></tr>\r <tr><td><code>DL</code></td><td>number</td><td>number</td><td>D-pad left pressed.</td></tr>\r <tr><td><code>DR</code></td><td>number</td><td>number</td><td>D-pad right pressed.</td></tr>\r <tr><td><code>DU</code></td><td>number</td><td>number</td><td>D-pad up pressed.</td></tr>\r <tr><td><code>DD</code></td><td>number</td><td>number</td><td>D-pad down pressed.</td></tr>\r <tr><td><code>Start</code></td><td>number</td><td>number</td><td>\"Start\" center button pressed.</td></tr>\r <tr><td><code>Back</code></td><td>number</td><td>number</td><td>\"Back\" center button pressed.</td></tr>\r <tr><td><code>LB</code></td><td>number</td><td>number</td><td>Left bumper button pressed.</td></tr>\r <tr><td><code>RB</code></td><td>number</td><td>number</td><td>Right bumper button pressed.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Sticks</strong></td></tr>\r <tr><td><code>LX</code></td><td>number</td><td>number</td><td>Left stick x-axis scale.</td></tr>\r <tr><td><code>LY</code></td><td>number</td><td>number</td><td>Left stick y-axis scale.</td></tr>\r <tr><td><code>RX</code></td><td>number</td><td>number</td><td>Right stick x-axis scale.</td></tr>\r <tr><td><code>RY</code></td><td>number</td><td>number</td><td>Right stick y-axis scale.</td></tr>\r <tr><td><code>LS</code></td><td>number</td><td>number</td><td>Left stick button pressed.</td></tr>\r <tr><td><code>RS</code></td><td>number</td><td>number</td><td>Right stick button pressed.</td></tr>\r <tr><td><code>LSTouch</code></td><td>number</td><td>number</td><td>Left stick is touched.</td></tr>\r <tr><td><code>RSTouch</code></td><td>number</td><td>number</td><td>Right stick is touched.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Triggers</strong></td></tr>\r <tr><td><code>LT</code></td><td>number</td><td>number</td><td>Left trigger scale.</td></tr>\r <tr><td><code>RT</code></td><td>number</td><td>number</td><td>Right trigger scale.</td></tr>\r <tr><td><code>LTClick</code></td><td>number</td><td>number</td><td>Left trigger click.</td></tr>\r <tr><td><code>RTClick</code></td><td>number</td><td>number</td><td>Right trigger click.</td></tr>\r <tr><td><code>LeftGrip</code></td><td>number</td><td>number</td><td>Left grip scale.</td></tr>\r <tr><td><code>RightGrip</code></td><td>number</td><td>number</td><td>Right grip scale.</td></tr>\r <tr><td><code>LeftGripTouch</code></td><td>number</td><td>number</td><td>Left grip is touched.</td></tr>\r <tr><td><code>RightGripTouch</code></td><td>number</td><td>number</td><td>Right grip is touched.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Aliases, PlayStation Style Names</strong></td></tr>\r <tr><td><code>Cross</code></td><td>number</td><td>number</td><td>Alias for <code>A</code>.</td></tr>\r <tr><td><code>Circle</code></td><td>number</td><td>number</td><td>Alias for <code>B</code>.</td></tr>\r <tr><td><code>Square</code></td><td>number</td><td>number</td><td>Alias for <code>X</code>.</td></tr>\r <tr><td><code>Triangle</code></td><td>number</td><td>number</td><td>Alias for <code>Y</code>.</td></tr>\r <tr><td><code>Left</code></td><td>number</td><td>number</td><td>Alias for <code>DL</code>.</td></tr>\r <tr><td><code>Right</code></td><td>number</td><td>number</td><td>Alias for <code>DR</code>.</td></tr>\r <tr><td><code>Up</code></td><td>number</td><td>number</td><td>Alias for <code>DU</code>.</td></tr>\r <tr><td><code>Down</code></td><td>number</td><td>number</td><td>Alias for <code>DD</code>.</td></tr>\r <tr><td><code>Select</code></td><td>number</td><td>number</td><td>Alias for <code>Back</code>.</td></tr>\r <tr><td><code>L1</code></td><td>number</td><td>number</td><td>Alias for <code>LB</code>.</td></tr>\r <tr><td><code>R1</code></td><td>number</td><td>number</td><td>Alias for <code>RB</code>.</td></tr>\r <tr><td><code>L3</code></td><td>number</td><td>number</td><td>Alias for <code>LS</code>.</td></tr>\r <tr><td><code>R3</code></td><td>number</td><td>number</td><td>Alias for <code>RS</code>.</td></tr>\r <tr><td><code>L2</code></td><td>number</td><td>number</td><td>Alias for <code>LT</code>.</td></tr>\r <tr><td><code>R2</code></td><td>number</td><td>number</td><td>Alias for <code>RT</code>.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Finger Abstractions</strong></td></tr>\r <tr><td><code>LeftPrimaryThumb</code></td><td>number</td><td>number</td><td>Left primary thumb button pressed.</td></tr>\r <tr><td><code>LeftSecondaryThumb</code></td><td>number</td><td>number</td><td>Left secondary thumb button pressed.\r </td></tr>\r <tr><td><code>RightPrimaryThumb</code></td><td>number</td><td>number</td><td>Right primary thumb button pressed.\r </td></tr>\r <tr><td><code>RightSecondaryThumb</code></td><td>number</td><td>number</td><td>Right secondary thumb button pressed.\r </td></tr>\r <tr><td><code>LeftPrimaryThumbTouch</code></td><td>number</td><td>number</td><td>Left thumb touching primary thumb \r button.</td></tr>\r <tr><td><code>LeftSecondaryThumbTouch</code></td><td>number</td><td>number</td><td>Left thumb touching secondary thumb \r button.</td></tr>\r <tr><td><code>LeftThumbUp</code></td><td>number</td><td>number</td><td>Left thumb not touching primary or secondary \r thumb buttons.</td></tr>\r <tr><td><code>RightPrimaryThumbTouch</code></td><td>number</td><td>number</td><td>Right thumb touching primary thumb \r button.</td></tr>\r <tr><td><code>RightSecondaryThumbTouch</code></td><td>number</td><td>number</td><td>Right thumb touching secondary thumb \r button.</td></tr>\r <tr><td><code>RightThumbUp</code></td><td>number</td><td>number</td><td>Right thumb not touching primary or secondary \r thumb buttons.</td></tr>\r <tr><td><code>LeftPrimaryIndex</code></td><td>number</td><td>number</td><td>Left primary index control pressed. \r <strong>To Do:</strong> <em>Implement this for current controllers.</em></td></tr>\r <tr><td><code>LeftSecondaryIndex</code></td><td>number</td><td>number</td><td>Left secondary index control pressed.\r </td></tr>\r <tr><td><code>RightPrimaryIndex</code></td><td>number</td><td>number</td><td>Right primary index control pressed. \r <strong>To Do:</strong> <em>Implement this for current controllers.</em></td></tr>\r <tr><td><code>RightSecondaryIndex</code></td><td>number</td><td>number</td><td>Right secondary index control pressed.\r </td></tr>\r <tr><td><code>LeftPrimaryIndexTouch</code></td><td>number</td><td>number</td><td>Left index finger is touching primary \r index finger control.</td></tr>\r <tr><td><code>LeftSecondaryIndexTouch</code></td><td>number</td><td>number</td><td>Left index finger is touching \r secondary index finger control.</td></tr>\r <tr><td><code>LeftIndexPoint</code></td><td>number</td><td>number</td><td>Left index finger is pointing, not touching \r primary or secondary index finger controls.</td></tr>\r <tr><td><code>RightPrimaryIndexTouch</code></td><td>number</td><td>number</td><td>Right index finger is touching primary \r index finger control.</td></tr>\r <tr><td><code>RightSecondaryIndexTouch</code></td><td>number</td><td>number</td><td>Right index finger is touching \r secondary index finger control.</td></tr>\r <tr><td><code>RightIndexPoint</code></td><td>number</td><td>number</td><td>Right index finger is pointing, not touching \r primary or secondary index finger controls.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Avatar Skeleton</strong></td></tr>\r <tr><td><code>Hips</code></td><td>number</td><td>{@link Pose}</td><td>Hips pose.</td></tr>\r <tr><td><code>Spine2</code></td><td>number</td><td>{@link Pose}</td><td>Spine2 pose.</td></tr>\r <tr><td><code>Head</code></td><td>number</td><td>{@link Pose}</td><td>Head pose.</td></tr>\r <tr><td><code>LeftArm</code></td><td>number</td><td>{@link Pose}</td><td>Left arm pose.</td></tr>\r <tr><td><code>RightArm</code></td><td>number</td><td>{@link Pose}</td><td>Right arm pose</td></tr>\r <tr><td><code>LeftHand</code></td><td>number</td><td>{@link Pose}</td><td>Left hand pose.</td></tr>\r <tr><td><code>LeftHandThumb1</code></td><td>number</td><td>{@link Pose}</td><td>Left thumb 1 finger joint pose.</td></tr>\r <tr><td><code>LeftHandThumb2</code></td><td>number</td><td>{@link Pose}</td><td>Left thumb 2 finger joint pose.</td></tr>\r <tr><td><code>LeftHandThumb3</code></td><td>number</td><td>{@link Pose}</td><td>Left thumb 3 finger joint pose.</td></tr>\r <tr><td><code>LeftHandThumb4</code></td><td>number</td><td>{@link Pose}</td><td>Left thumb 4 finger joint pose.</td></tr>\r <tr><td><code>LeftHandIndex1</code></td><td>number</td><td>{@link Pose}</td><td>Left index 1 finger joint pose.</td></tr>\r <tr><td><code>LeftHandIndex2</code></td><td>number</td><td>{@link Pose}</td><td>Left index 2 finger joint pose.</td></tr>\r <tr><td><code>LeftHandIndex3</code></td><td>number</td><td>{@link Pose}</td><td>Left index 3 finger joint pose.</td></tr>\r <tr><td><code>LeftHandIndex4</code></td><td>number</td><td>{@link Pose}</td><td>Left index 4 finger joint pose.</td></tr>\r <tr><td><code>LeftHandMiddle1</code></td><td>number</td><td>{@link Pose}</td><td>Left middle 1 finger joint pose.\r </td></tr>\r <tr><td><code>LeftHandMiddle2</code></td><td>number</td><td>{@link Pose}</td><td>Left middle 2 finger joint pose.\r </td></tr>\r <tr><td><code>LeftHandMiddle3</code></td><td>number</td><td>{@link Pose}</td><td>Left middle 3 finger joint pose.\r </td></tr>\r <tr><td><code>LeftHandMiddle4</code></td><td>number</td><td>{@link Pose}</td><td>Left middle 4 finger joint pose.\r </td></tr>\r <tr><td><code>LeftHandRing1</code></td><td>number</td><td>{@link Pose}</td><td>Left ring 1 finger joint pose.</td></tr>\r <tr><td><code>LeftHandRing2</code></td><td>number</td><td>{@link Pose}</td><td>Left ring 2 finger joint pose.</td></tr>\r <tr><td><code>LeftHandRing3</code></td><td>number</td><td>{@link Pose}</td><td>Left ring 3 finger joint pose.</td></tr>\r <tr><td><code>LeftHandRing4</code></td><td>number</td><td>{@link Pose}</td><td>Left ring 4 finger joint pose.</td></tr>\r <tr><td><code>LeftHandPinky1</code></td><td>number</td><td>{@link Pose}</td><td>Left pinky 1 finger joint pose.</td></tr>\r <tr><td><code>LeftHandPinky2</code></td><td>number</td><td>{@link Pose}</td><td>Left pinky 2 finger joint pose.</td></tr>\r <tr><td><code>LeftHandPinky3</code></td><td>number</td><td>{@link Pose}</td><td>Left pinky 3 finger joint pose.</td></tr>\r <tr><td><code>LeftHandPinky4</code></td><td>number</td><td>{@link Pose}</td><td>Left pinky 4 finger joint pose.</td></tr>\r <tr><td><code>RightHand</code></td><td>number</td><td>{@link Pose}</td><td>Right hand pose.</td></tr>\r <tr><td><code>RightHandThumb1</code></td><td>number</td><td>{@link Pose}</td><td>Right thumb 1 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandThumb2</code></td><td>number</td><td>{@link Pose}</td><td>Right thumb 2 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandThumb3</code></td><td>number</td><td>{@link Pose}</td><td>Right thumb 3 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandThumb4</code></td><td>number</td><td>{@link Pose}</td><td>Right thumb 4 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandIndex1</code></td><td>number</td><td>{@link Pose}</td><td>Right index 1 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandIndex2</code></td><td>number</td><td>{@link Pose}</td><td>Right index 2 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandIndex3</code></td><td>number</td><td>{@link Pose}</td><td>Right index 3 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandIndex4</code></td><td>number</td><td>{@link Pose}</td><td>Right index 4 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandMiddle1</code></td><td>number</td><td>{@link Pose}</td><td>Right middle 1 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandMiddle2</code></td><td>number</td><td>{@link Pose}</td><td>Right middle 2 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandMiddle3</code></td><td>number</td><td>{@link Pose}</td><td>Right middle 3 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandMiddle4</code></td><td>number</td><td>{@link Pose}</td><td>Right middle 4 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandRing1</code></td><td>number</td><td>{@link Pose}</td><td>Right ring 1 finger joint pose.</td></tr>\r <tr><td><code>RightHandRing2</code></td><td>number</td><td>{@link Pose}</td><td>Right ring 2 finger joint pose.</td></tr>\r <tr><td><code>RightHandRing3</code></td><td>number</td><td>{@link Pose}</td><td>Right ring 3 finger joint pose.</td></tr>\r <tr><td><code>RightHandRing4</code></td><td>number</td><td>{@link Pose}</td><td>Right ring 4 finger joint pose.</td></tr>\r <tr><td><code>RightHandPinky1</code></td><td>number</td><td>{@link Pose}</td><td>Right pinky 1 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandPinky2</code></td><td>number</td><td>{@link Pose}</td><td>Right pinky 2 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandPinky3</code></td><td>number</td><td>{@link Pose}</td><td>Right pinky 3 finger joint pose.\r </td></tr>\r <tr><td><code>RightHandPinky4</code></td><td>number</td><td>{@link Pose}</td><td>Right pinky 4 finger joint pose.\r </td></tr>\r <tr><td><code>LeftFoot</code></td><td>number</td><td>{@link Pose}</td><td>Left foot pose.</td></tr>\r <tr><td><code>RightFoot</code></td><td>number</td><td>{@link Pose}</td><td>Right foot pose.</td></tr>\r\r <tr><td colspan=\"4\"><strong>Trackers</strong></td></tr>\r <tr><td><code>TrackedObject00</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 0 pose.</td></tr>\r <tr><td><code>TrackedObject01</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 1 pose.</td></tr>\r <tr><td><code>TrackedObject02</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 2 pose.</td></tr>\r <tr><td><code>TrackedObject03</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 3 pose.</td></tr>\r <tr><td><code>TrackedObject04</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 4 pose.</td></tr>\r <tr><td><code>TrackedObject05</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 5 pose.</td></tr>\r <tr><td><code>TrackedObject06</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 6 pose.</td></tr>\r <tr><td><code>TrackedObject07</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 7 pose.</td></tr>\r <tr><td><code>TrackedObject08</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 8 pose.</td></tr>\r <tr><td><code>TrackedObject09</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 9 pose.</td></tr>\r <tr><td><code>TrackedObject10</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 10 pose.</td></tr>\r <tr><td><code>TrackedObject11</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 11 pose.</td></tr>\r <tr><td><code>TrackedObject12</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 12 pose.</td></tr>\r <tr><td><code>TrackedObject13</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 13 pose.</td></tr>\r <tr><td><code>TrackedObject14</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 14 pose.</td></tr>\r <tr><td><code>TrackedObject15</code></td><td>number</td><td>{@link Pose}</td><td>Tracker 15 pose.</td></tr>\r\r </tbody>\r</table>"}},
{"MappingObject":{"prefix":"MappingObject","body":["MappingObject"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br><p>A {@link Controller} mapping object that can contain a set of routes that map:</p>\r<ul>\r <li>{@link Controller.Standard} outputs to {@link Controller.Actions} actions or script functions.</li>\r <li>{@link Controller.Hardware} outputs to {@link Controller.Standard} outputs, {@link Controller.Actions} actions, or \r script functions.</li>\r</ul>\r\r<p>Create by one of the following methods:</p>\r<ul>\r <li>Use {@link Controller.newMapping} to create the mapping object, add routes using {@link MappingObject#from|from} or\r {@link MappingObject#makeAxis|makeAxis}, and map the routes to actions or functions using {@link RouteObject} \r methods.</li>\r <li>Use {@link Controller.parseMapping} or {@link Controller.loadMapping} to load a {@link Controller.MappingJSON}.</li>\r</ul>\r\r<p>Enable the mapping using {@link MappingObject#enable|enable} or {@link Controller.enableMapping} for it to take \reffect.</p>\r\r<p>Mappings and their routes are applied according to the following rules:</p>\r<ul>\r <li>One read per output: after a controller output has been read, it can't be read again. Exception: You can use \r {@link RouteObject#peek} to read a value without marking that output as having been read.</li>\r <li>Existing mapping routes take precedence over new mapping routes: within a mapping, if a route is added for a control \r output that already has a route the new route is ignored.</li>\r <li>New mappings override previous mappings: each output is processed using the route in the most recently enabled \r mapping that contains that output.</li>\r</ul>"}},
{"Controller.MappingJSON":{"prefix":"Controller.MappingJSON","body":["Controller.MappingJSON"],"description":"A {@link MappingObject} can be specified in JSON format. A simple example is provided below. Full examples — the \rdefault mappings provided in Interface — can be found at \r<a href=\"https://github.com/highfidelity/hifi/tree/master/interface/resources/controllers\">\rhttps://github.com/highfidelity/hifi/tree/master/interface/resources/controllers</a>."}},
{"Controller.MappingJSONRoute":{"prefix":"Controller.MappingJSONRoute","body":["Controller.MappingJSONRoute"],"description":"A route in a {@link Controller.MappingJSON}."}},
{"Controller.MappingJSONAxis":{"prefix":"Controller.MappingJSONAxis","body":["Controller.MappingJSONAxis"],"description":"An axis pair in a {@link Controller.MappingJSONRoute}."}},
{"Controller.MappingJSONFilter":{"prefix":"Controller.MappingJSONFilter","body":["Controller.MappingJSONFilter"],"description":"A filter in a {@link Controller.MappingJSONRoute}."}},
{"MappingObject#fromQml":{"prefix":"MappingObject#fromQml","body":["MappingObject#fromQml(${1:source: Controller.Standard})"],"description":"Create a new {@link RouteObject} from a controller output, ready to be mapped to a standard control, action, or \rfunction.<br />\rThis is a QML-specific version of {@link MappingObject#from|from}: use this version in QML files."}},
{"MappingObject#makeAxisQml":{"prefix":"MappingObject#makeAxisQml","body":["MappingObject#makeAxisQml(${1:source1: Controller.Hardware},${2:source2: Controller.Hardware})"],"description":"Create a new {@link RouteObject} from two numeric {@link Controller.Hardware} outputs, one applied in the negative \rdirection and the other in the positive direction, ready to be mapped to a standard control, action, or function.<br />\rThis is a QML-specific version of {@link MappingObject#makeAxis|makeAxis}: use this version in QML files."}},
{"MappingObject#from":{"prefix":"MappingObject#from","body":["MappingObject#from(${1:source: Controller.Standard})"],"description":"Create a new {@link RouteObject} from a controller output, ready to be mapped to a standard control, action, or \rfunction."}},
{"MappingObject#makeAxis":{"prefix":"MappingObject#makeAxis","body":["MappingObject#makeAxis(${1:source1: Controller.Hardware},${2:source2: Controller.Hardware})"],"description":"Create a new {@link RouteObject} from two numeric {@link Controller.Hardware} outputs, one applied in the negative \rdirection and the other in the positive direction, ready to be mapped to a standard control, action, or function."}},
{"MappingObject#enable":{"prefix":"MappingObject#enable","body":["MappingObject#enable(${1:enable: boolean})"],"description":"Enable or disable the mapping. When enabled, the routes in the mapping take effect.<br />\rSynonymous with {@link Controller.enableMapping}."}},
{"MappingObject#disable":{"prefix":"MappingObject#disable","body":["MappingObject#disable"],"description":"Disable the mapping. When disabled, the routes in the mapping have no effect.<br />\rSynonymous with {@link Controller.disableMapping}."}},
{"RouteObject":{"prefix":"RouteObject","body":["RouteObject"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br><p>A route in a {@link MappingObject} used by the {@link Controller} API.</p>\r\r<p>Create a route using {@link MappingObject} methods and apply this object's methods to process it, terminating with \r{@link RouteObject#to} to apply it to a <code>Standard</code> control, action, or script function. Note: Loops are not \rpermitted.</p>\r\r<p>Some methods apply to routes with number data, some apply routes with {@link Pose} data, and some apply to both route \rtypes.<p>"}},
{"RouteObject#toQml":{"prefix":"RouteObject#toQml","body":["RouteObject#toQml(${1:destination: Controller.Standard})"],"description":"Terminate the route with a standard control, an action, or a script function. The output value from the route is \rsent to the specified destination.<br />\rThis is a QML-specific version of {@link MappingObject#to|to}: use this version in QML files."}},
{"RouteObject#whenQml":{"prefix":"RouteObject#whenQml","body":["RouteObject#whenQml(${1:expression: condition})"],"description":"Process the route only if a condition is satisfied. The condition is evaluated before the route input is read, and\rthe input is read only if the condition is <code>true</code>. Thus, if the condition is not met then subsequent\rroutes using the same input are processed.<br />\rThis is a QML-specific version of {@link MappingObject#to|to}: use this version in QML files."}},
{"RouteObject#to":{"prefix":"RouteObject#to","body":["RouteObject#to(${1:destination: Controller.Standard})"],"description":"Terminate the route with a standard control, an action, or a script function. The output value from the route is \rsent to the specified destination."}},
{"RouteObject#debug":{"prefix":"RouteObject#debug","body":["RouteObject#debug(${1:enable: boolean})"],"description":"Enable and disabling writing debug information for a route to the program log."}},
{"RouteObject#peek":{"prefix":"RouteObject#peek","body":["RouteObject#peek(${1:enable: boolean})"],"description":"Process the route without marking the controller output as having been read, so that other routes from the same \rcontroller output can also process."}},
{"RouteObject#when":{"prefix":"RouteObject#when","body":["RouteObject#when(${1:expression: condition})"],"description":"Process the route only if a condition is satisfied. The condition is evaluated before the route input is read, and \rthe input is read only if the condition is <code>true</code>. Thus, if the condition is not met then subsequent \rroutes using the same input are processed."}},
{"RouteObject#clamp":{"prefix":"RouteObject#clamp","body":["RouteObject#clamp(${1:min: number},${2:max: number})"],"description":"Filter numeric route values to lie between two values; values outside this range are not passed on through the \rroute."}},
{"RouteObject#hysteresis":{"prefix":"RouteObject#hysteresis","body":["RouteObject#hysteresis(${1:min: number},${2:max: number})"],"description":"Filter numeric route values such that they are rounded to <code>0</code> or <code>1</code> without output values \rflickering when the input value hovers around <code>0.5</code>. For example, this enables you to use an analog input \ras if it were a toggle."}},
{"RouteObject#pulse":{"prefix":"RouteObject#pulse","body":["RouteObject#pulse(${1:interval: number})"],"description":"Filter numeric route values to send at a specified interval."}},
{"RouteObject#scale":{"prefix":"RouteObject#scale","body":["RouteObject#scale(${1:multiplier: number})"],"description":"Filter numeric and {@link Pose} route values to be scaled by a constant amount."}},
{"RouteObject#invert":{"prefix":"RouteObject#invert","body":["RouteObject#invert"],"description":"Filter numeric and {@link Pose} route values to have the opposite sign, e.g., <code>0.5</code> is changed to \r<code>-0.5</code>."}},
{"RouteObject#deadZone":{"prefix":"RouteObject#deadZone","body":["RouteObject#deadZone(${1:min: number})"],"description":"Filter numeric route values such that they're sent only when the input value is outside a dead-zone. When the input \rpasses the dead-zone value, output is sent starting at <code>0.0</code> and catching up with the input value. As the \rinput returns toward the dead-zone value, output values reduce to <code>0.0</code> at the dead-zone value."}},
{"RouteObject#constrainToInteger":{"prefix":"RouteObject#constrainToInteger","body":["RouteObject#constrainToInteger"],"description":"Filter numeric route values such that they are rounded to <code>-1</code>, <code>0</code>, or <code>1</code>.\rFor example, this enables you to use an analog input as if it were a toggle or, in the case of a bidirectional axis, \ra tri-state switch."}},
{"RouteObject#constrainToPositiveInteger":{"prefix":"RouteObject#constrainToPositiveInteger","body":["RouteObject#constrainToPositiveInteger"],"description":"Filter numeric route values such that they are rounded to <code>0</code> or <code>1</code>. For example, this \renables you to use an analog input as if it were a toggle."}},
{"RouteObject#translate":{"prefix":"RouteObject#translate","body":["RouteObject#translate(${1:translate: Vec3})"],"description":"Filter {@link Pose} route values to have a pre-translation applied."}},
{"RouteObject#transform":{"prefix":"RouteObject#transform","body":["RouteObject#transform(${1:transform: Mat4})"],"description":"Filter {@link Pose} route values to have a pre-transform applied."}},
{"RouteObject#postTransform":{"prefix":"RouteObject#postTransform","body":["RouteObject#postTransform(${1:transform: Mat4})"],"description":"Filter {@link Pose} route values to have a post-transform applied."}},
{"RouteObject#rotate":{"prefix":"RouteObject#rotate","body":["RouteObject#rotate(${1:rotation: Quat})"],"description":"Filter {@link Pose} route values to have a pre-rotation applied."}},
{"RouteObject#lowVelocity":{"prefix":"RouteObject#lowVelocity","body":["RouteObject#lowVelocity(${1:rotationConstant: number},${2:translationConstant: number})"],"description":"Filter {@link Pose} route values to be smoothed by a low velocity filter. The filter's rotation and translation \rvalues are calculated as: <code>(1 - f) * currentValue + f * previousValue</code> where \r<code>f = currentVelocity / filterConstant</code>. At low velocities, the filter value is largely the previous \rvalue; at high velocities the value is wholly the current controller value."}},
{"RouteObject#exponentialSmoothing":{"prefix":"RouteObject#exponentialSmoothing","body":["RouteObject#exponentialSmoothing(${1:rotationConstant: number},${2:translationConstant: number})"],"description":"Filter {@link Pose} route values to be smoothed by an exponential decay filter. The filter's rotation and \rtranslation values are calculated as: <code>filterConstant * currentValue + (1 - filterConstant) * \rpreviousValue</code>. Values near 1 are less smooth with lower latency; values near 0 are more smooth with higher \rlatency."}},
{"RouteObject#logicalNot":{"prefix":"RouteObject#logicalNot","body":["RouteObject#logicalNot"],"description":"Filter numeric route values such that a value of <code>0.0</code> is changed to <code>1.0</code>, and other values \rare changed to <code>0.0</code>."}},
{"HMD.IPDScaleChanged":{"prefix":"HMD.IPDScaleChanged","body":["HMD.IPDScaleChanged"],"description":"Triggered when the <code>HMD.ipdScale</code> property value changes."}},
{"HMD.displayModeChanged":{"prefix":"HMD.displayModeChanged","body":["HMD.displayModeChanged(${1:isHMDMode: boolean})"],"description":"Triggered when Interface's display mode changes and when the user puts on or takes off their HMD."}},
{"HMD.mountedChanged":{"prefix":"HMD.mountedChanged","body":["HMD.mountedChanged"],"description":"Triggered when the <code>HMD.mounted</code> property value changes."}},
{"Reticle":{"prefix":"Reticle","body":["Reticle"],"description":"<table><tr><th>Available in:</th><td>Interface Scripts</td><td>Client Entity Scripts</td></tr></table><br>"}},
{"Reticle.isMouseCaptured":{"prefix":"Reticle.isMouseCaptured","body":["Reticle.isMouseCaptured"]}},
{"Reticle.getAllowMouseCapture":{"prefix":"Reticle.getAllowMouseCapture","body":["Reticle.getAllowMouseCapture"]}},
{"Reticle.setAllowMouseCapture":{"prefix":"Reticle.setAllowMouseCapture","body":["Reticle.setAllowMouseCapture(${1:allowMouseCaptured: boolean})"]}},
{"Reticle.isPointingAtSystemOverlay":{"prefix":"Reticle.isPointingAtSystemOverlay","body":["Reticle.isPointingAtSystemOverlay"]}},
{"Reticle.getVisible":{"prefix":"Reticle.getVisible","body":["Reticle.getVisible"]}},