From 5256f5852062520755c7598c75717028cd6e8dc7 Mon Sep 17 00:00:00 2001
From: David Rowe The name of an entity event. When the entity event occurs, any function that has been registered for that event via
- * {@link Script.addEventHandler} is called with parameters per the entity event. The name of an entity event. When the entity event occurs, any function that has been registered for that event
+ * via {@link Script.addEventHandler} is called with parameters per the entity event. See also, the {@link Entities} API. Warning: The
*
- *
- *
* @typedef {string} Script.EntityEvent
*/
connect(entities.data(), &EntityScriptingInterface::enterEntity, this, makeSingleEntityHandler("enterEntity"));
diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h
index 3891f60d92..71af673e6c 100644
--- a/libraries/script-engine/src/ScriptEngine.h
+++ b/libraries/script-engine/src/ScriptEngine.h
@@ -320,13 +320,13 @@ public:
// NOTE - these are intended to be public interfaces available to scripts
/**jsdoc
- * Adds a function to the list of functions called when an entity event occurs on a particular entity.
+ * Adds a function to the list of functions called when a particular event occurs on a particular entity.
*
+ * Event Name Entity Event
*
*
- * Event Name Callback Type Entity Event
- * "enterEntity"
{@link Entities.enterEntity}
- * "leaveEntity"
{@link Entities.leaveEntity}
- * "mousePressOnEntity"
{@link Entities.mousePressOnEntity}
- * "mouseMoveOnEntity"
{@link Entities.mouseMoveOnEntity}
- * "mouseReleaseOnEntity"
{@link Entities.mouseReleaseOnEntity}
- * "clickDownOnEntity"
{@link Entities.clickDownOnEntity}
- * "holdingClickOnEntity"
{@link Entities.holdingClickOnEntity}
- * "clickReleaseOnEntity"
{@link Entities.clickReleaseOnEntity}
- * "hoverEnterEntity"
{@link Entities.hoverEnterEntity}
- * "hoverOverEntity"
{@link Entities.hoverOverEntity}
- * "hoverLeaveEntity"
{@link Entities.hoverLeaveEntity}
+ * "collisionWithEntity"
{@link Entities.collisionWithEntity}
+ * "enterEntity"
{@link Script~entityEventCallback|entityEventCallback}
+ * {@link Entities.enterEntity}
+ * "leaveEntity"
{@link Script~entityEventCallback|entityEventCallback}
+ * {@link Entities.leaveEntity}
+ * "mousePressOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.mousePressOnEntity}
+ * "mouseMoveOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.mouseMoveOnEntity}
+ * "mouseReleaseOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.mouseReleaseOnEntity}
+ * "clickDownOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.clickDownOnEntity}
+ * "holdingClickOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.holdingClickOnEntity}
+ * "clickReleaseOnEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.clickReleaseOnEntity}
+ * "hoverEnterEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.hoverEnterEntity}
+ * "hoverOverEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.hoverOverEntity}
+ * "hoverLeaveEntity"
{@link Script~pointerEventCallback|pointerEventCallback}
+ * {@link Entities.hoverLeaveEntity}
*
* "collisionWithEntity"
{@link Script~collisionEventCallback|collisionEventCallback}
+ * {@link Entities.collisionWithEntity}
+ * EventBridge.scriptEventReceived.connect(function(message) {
* ...
* });
EventBridge
object is not necessarily set up immediately ready for the web
+ * page's script to use. A simple workaround that normally works is to add a delay before calling
+ * EventBridge.scriptEventReceived.connect(...)
. A better solution is to periodically call
+ * EventBridge.scriptEventReceived.connect(...)
and then EventBridge.emitWebEvent(...)
to send a
+ * message to the Interface script, and have that send a message back using emitScriptEvent(...)
; when the
+ * return message is received, the EventBridge
is ready for use.true
if the Interface window is minimized, false
if it isn't.
* @returns {Signal}
+ * @example
Warning: These coordinates are not necessarily in meters.
*For information on the joint hierarchy used, see - * Avatar Standards.
+ * Avatar Standards. * @function MyAvatar.getDefaultJointTranslation * @param {number} index - The joint index. * @returns {Vec3} The default translation of the joint (in model coordinates) if the joint index is valid, otherwise diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 854ecb9ec3..241ebe91c4 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -860,7 +860,7 @@ public: /**jsdoc * Gets the rotation of a joint relative to its parent. For information on the joint hierarchy used, see - * Avatar Standards. + * Avatar Standards. * @function Avatar.getJointRotation * @param {number} index - The index of the joint. * @returns {Quat} The rotation of the joint relative to its parent. @@ -871,7 +871,7 @@ public: * Gets the translation of a joint relative to its parent, in model coordinates. *Warning: These coordinates are not necessarily in meters.
*For information on the joint hierarchy used, see - * Avatar Standards.
+ * Avatar Standards. * @function Avatar.getJointTranslation * @param {number} index - The index of the joint. * @returns {Vec3} The translation of the joint relative to its parent, in model coordinates. @@ -981,7 +981,7 @@ public: /**jsdoc * Gets the rotation of a joint relative to its parent. For information on the joint hierarchy used, see - * Avatar Standards. + * Avatar Standards. * @function Avatar.getJointRotation * @param {string} name - The name of the joint. * @returns {Quat} The rotation of the joint relative to its parent. @@ -996,7 +996,7 @@ public: * Gets the translation of a joint relative to its parent, in model coordinates. *Warning: These coordinates are not necessarily in meters.
*For information on the joint hierarchy used, see - * Avatar Standards.
+ * Avatar Standards. * @function Avatar.getJointTranslation * @param {number} name - The name of the joint. * @returns {Vec3} The translation of the joint relative to its parent, in model coordinates. From 9d67b4aff2c3f8ad72f320f4da9c718a24843e02 Mon Sep 17 00:00:00 2001 From: David Rowetrue
if the user wearing the HMD is determined to be sitting
* (avatar leaning is disabled, recentering is enabled), false
if the user wearing the HMD is
* determined to be standing (avatar leaning is enabled, and avatar recenters if it leans too far).
- * If userRecenterModel == 2
(i.e., auto) the property value automatically updates as the user sits
+ * If userRecenterModel == 2
(i.e., "auto") the property value automatically updates as the user sits
* or stands, unless isSitStandStateLocked == true
. Setting the property value overrides the current
- * siting / standing state, which is updated when the user next sits or stands unless
+ * sitting / standing state, which is updated when the user next sits or stands unless
* isSitStandStateLocked == true
.
* @property {boolean} isSitStandStateLocked - true
to lock the avatar sitting/standing state, i.e., use this
* to disable automatically changing state.
@@ -1953,8 +1953,8 @@ public:
/**jsdoc
* Starts a sitting action for the avatar.
* @function MyAvatar.beginSit
- * @param {Vec3} position - The point in space where the avatar will sit.
- * @param {Quat} rotation - Initial absolute orientation of the avatar once is seated.
+ * @param {Vec3} position - The position where the avatar should sit.
+ * @param {Quat} rotation - The initial orientation of the seated avatar.
*/
Q_INVOKABLE void beginSit(const glm::vec3& position, const glm::quat& rotation);
@@ -1962,15 +1962,14 @@ public:
* Ends a sitting action for the avatar.
* @function MyAvatar.endSit
* @param {Vec3} position - The position of the avatar when standing up.
- * @param {Quat} rotation - The absolute rotation of the avatar once the sitting action ends.
+ * @param {Quat} rotation - The orientation of the avatar when standing up.
*/
Q_INVOKABLE void endSit(const glm::vec3& position, const glm::quat& rotation);
/**jsdoc
- * Gets whether the avatar is in a seated pose. The seated pose is set by calling the
- * MyAvatar::beginSit method.
+ * Gets whether the avatar is in a seated pose. The seated pose is set by calling {@link MyAvatar.beginSit}.
* @function MyAvatar.isSeated
- * @returns {boolean} true
if the avatar is in a seated pose.
+ * @returns {boolean} true
if the avatar is in a seated pose, false
if it isn't.
*/
Q_INVOKABLE bool isSeated() { return _characterController.getSeated(); }
From aa077684f57c1de079f8997840aa2851803c1ffb Mon Sep 17 00:00:00 2001
From: David Rowe MouseY
MouseWheelRight
1.0
).MouseWheelLeft
1.0
).MouseWheelUp
1.0
).
+ * MouseWheelRight
1.0
).MouseWheelLeft
1.0
).MouseWheelUp
1.0
).
* Warning: The mouse wheel in an ordinary mouse generates left/right wheel events instead of * up/down.
*MouseWheelDown
1.0
).
+ * MouseWheelDown
1.0
).
* Warning: The mouse wheel in an ordinary mouse generates left/right wheel events instead of * up/down.
*TouchpadDown
GesturePinchOut
GesturePinchOut
Warning: Not yet implemented.
* - * @property {FilterFlags} PICK_BYPASS_IGNORE - Allows pick to intersect entities even when their ignorePickIntersection property is 'true'. - * For debug purposes. Read-only. + * @property {FilterFlags} PICK_BYPASS_IGNORE - Allows pick to intersect entities even when their + *ignorePickIntersection
property value is true
. For debug purposes.
+ * Read-only.
*
* @property {IntersectionType} INTERSECTED_NONE - Intersected nothing. Read-only.
* @property {IntersectionType} INTERSECTED_ENTITY - Intersected an entity. Read-only.
From ccc4be5312bae699cfe5697248b1b6668c3d45f5 Mon Sep 17 00:00:00 2001
From: David Rowe true
if the avatar is in a "hero" zone, false
if it isn't.
* Read-only.
- * @property {boolean} hasScriptedBlendshapes=false - true
if blend shapes are controlled by scripted actions,
- * otherwise false
. Set this to true
before using the {@link MyAvatar.setBlendshape} method,
+ * @property {boolean} hasScriptedBlendshapes=false - true
if blend shapes are controlled by scripted actions,
+ * otherwise false
. Set this to true
before using the {@link MyAvatar.setBlendshape} method,
* and set back to false
after you no longer want scripted control over the blend shapes.
- * Note: This property will automatically be set to true if the Controller system has valid facial - * blend shape actions.
- * @property {boolean} hasProceduralBlinkFaceMovement=true -true
if avatars blink automatically by animating
- * facial blend shapes, false
if automatic blinking is disabled. Set this property to false
if
- * you wish to fully control the blink facial blend shapes via the {@link MyAvatar.setBlendshape} method.
- * @property {boolean} hasProceduralEyeFaceMovement=true - true
if the facial blend shapes for an avatar's eyes
- * adjust automatically as the eyes move, false
if this automatic movement is disabled. Set this property
- * to true
to prevent the iris from being obscured by the upper or lower lids. Set this property to
- * false
if you wish to fully control the eye blend shapes via the {@link MyAvatar.setBlendshape} method.
- * @property {boolean} hasAudioEnabledFaceMovement=true - true
if the avatar's mouth blend shapes animate
- * automatically based on detected microphone input, false
if this automatic movement is disabled. Set
- * this property to false
if you wish to fully control the mouth facial blend shapes via the
+ * Note: This property will automatically be set to true
if the controller system has
+ * valid facial blend shape actions.
true
if avatars blink automatically by animating
+ * facial blend shapes, false
if automatic blinking is disabled. Set this property to false
+ * to fully control the blink facial blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * @property {boolean} hasProceduralEyeFaceMovement=true - true
if the facial blend shapes for an avatar's eyes
+ * adjust automatically as the eyes move, false
if this automatic movement is disabled. Set this property
+ * to true
to prevent the iris from being obscured by the upper or lower lids. Set this property to
+ * false
to fully control the eye blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * @property {boolean} hasAudioEnabledFaceMovement=true - true
if the avatar's mouth blend shapes animate
+ * automatically based on detected microphone input, false
if this automatic movement is disabled. Set
+ * this property to false
to fully control the mouth facial blend shapes via the
* {@link MyAvatar.setBlendshape} method.
*
* @comment IMPORTANT: This group of properties is copied from Avatar.h; they should NOT be edited here.
@@ -321,10 +321,7 @@ class MyAvatar : public Avatar {
* @borrows Avatar.setAttachmentsVariant as setAttachmentsVariant
* @borrows Avatar.updateAvatarEntity as updateAvatarEntity
* @borrows Avatar.clearAvatarEntity as clearAvatarEntity
- * @borrows Avatar.hasScriptedBlendshapes as hasScriptedBlendshapes
- * @borrows Avatar.hasProceduralBlinkFaceMovement as hasProceduralBlinkFaceMovement
- * @borrows Avatar.hasProceduralEyeFaceMovement as hasProceduralEyeFaceMovement
- * @borrows Avatar.hasAudioEnabledFaceMovement as hasAudioEnabledFaceMovement
+ * @borrows Avatar.setForceFaceTrackerConnected as setForceFaceTrackerConnected
* @borrows Avatar.setSkeletonModelURL as setSkeletonModelURL
* @borrows Avatar.getAttachmentData as getAttachmentData
* @borrows Avatar.setAttachmentData as setAttachmentData
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index 241ebe91c4..24808b98bf 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -533,21 +533,21 @@ class AvatarData : public QObject, public SpatiallyNestable {
* @property {boolean} hasPriority - true
if the avatar is in a "hero" zone, false
if it isn't.
* Read-only.
* @property {boolean} hasScriptedBlendshapes=false - true
if blend shapes are controlled by scripted actions,
- * otherwise false
. Set this to true
before using the {@link MyAvatar.setBlendshape} method,
+ * otherwise false
. Set this to true
before using the {@link Avatar.setBlendshape} method,
* and set back to false
after you no longer want scripted control over the blend shapes.
- * Note: This property will automatically be set to true if the Controller system has valid facial - * blend shape actions.
+ *Note: This property will automatically be set to true
if the controller system has
+ * valid facial blend shape actions.
true
if avatars blink automatically by animating
- * facial blend shapes, false
if automatic blinking is disabled. Set this property to false
if
- * you wish to fully control the blink facial blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * facial blend shapes, false
if automatic blinking is disabled. Set this property to false
+ * to fully control the blink facial blend shapes via the {@link Avatar.setBlendshape} method.
* @property {boolean} hasProceduralEyeFaceMovement=true - true
if the facial blend shapes for an avatar's eyes
* adjust automatically as the eyes move, false
if this automatic movement is disabled. Set this property
* to true
to prevent the iris from being obscured by the upper or lower lids. Set this property to
- * false
if you wish to fully control the eye blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * false
to fully control the eye blend shapes via the {@link Avatar.setBlendshape} method.
* @property {boolean} hasAudioEnabledFaceMovement=true - true
if the avatar's mouth blend shapes animate
* automatically based on detected microphone input, false
if this automatic movement is disabled. Set
- * this property to false
if you wish to fully control the mouth facial blend shapes via the
- * {@link MyAvatar.setBlendshape} method.
+ * this property to false
to fully control the mouth facial blend shapes via the
+ * {@link Avatar.setBlendshape} method.
*/
Q_PROPERTY(glm::vec3 position READ getWorldPosition WRITE setPositionViaScript)
Q_PROPERTY(float scale READ getDomainLimitedScale WRITE setTargetScale)
@@ -1134,8 +1134,8 @@ public:
/**jsdoc
* Sets the value of a blend shape to animate your avatar's face. In order for other users to see the resulting animations
- * on your avatar's face, set {@link Avatar.hasScriptedBlendshapes} to true
. When you are done using this API,
- * set {@link Avatar.hasScriptedBlendshapes} back to false
when the animation is complete.
+ * on your avatar's face, set hasScriptedBlendshapes
to true
. When you are done using this API,
+ * set hasScriptedBlendshapes
back to false
when the animation is complete.
* @function Avatar.setBlendshape
* @param {string} name - The name of the blendshape, per the
* {@link https://docs.highfidelity.com/create/avatars/avatar-standards.html#blendshapes Avatar Standards}.
@@ -1188,12 +1188,12 @@ public:
Q_INVOKABLE virtual void clearAvatarEntity(const QUuid& entityID, bool requiresRemovalFromTree = true);
/**jsdoc
- * Deprecated: This method is deprecated and will be removed.
- * Use Avatar.hasScriptedBlendshapes property instead. - * Enables blendshapes set using {@link Avatar.setBlendshape} or {@link MyAvatar.setBlendshape} to be transmitted to other + * Enables blend shapes set using {@link Avatar.setBlendshape} or {@link MyAvatar.setBlendshape} to be transmitted to other * users so that they can see the animation of your avatar's face. + *Deprecated: This method is deprecated and will be removed. Use the
+ * Avatar.hasScriptedBlendshapes
or MyAvatar.hasScriptedBlendshapes
property instead.
true
to enable blendshape changes to be transmitted to other users,
+ * @param {boolean} connected - true
to enable blend shape changes to be transmitted to other users,
* false
to disable.
*/
Q_INVOKABLE void setForceFaceTrackerConnected(bool connected) { setHasScriptedBlendshapes(connected); }
From c52fa7a376bcc0ccbab28cb8ae919c6dbbc241e3 Mon Sep 17 00:00:00 2001
From: David Rowe A docking location of an InteractiveWindow
.
Value | Name | Description |
---|---|---|
0 | TOP | Dock to the top edge of the Interface window. |
1 | BOTTOM | Dock to the bottom edge of the Interface window. |
2 | LEFT | Dock to the left edge of the Interface window. |
3 | RIGHT | Dock to the right edge of the Interface window. |
InteractiveWindow
. Used when defining the `relativePosition` property of an `InteractiveWindow`.
+ * The possible relative position anchors of an InteractiveWindow
relative to the Interface window.
* @typedef {object} InteractiveWindow.RelativePositionAnchors
- * @property {InteractiveWindow.RelativePositionAnchor} NO_ANCHOR - Specifies that the position of the `InteractiveWindow` will not be relative to any part of the Interface window.
- * @property {InteractiveWindow.RelativePositionAnchor} TOP_LEFT - Specifies that the `relativePosition` of the `InteractiveWindow` will be offset from the top left of the Interface window.
- * @property {InteractiveWindow.RelativePositionAnchor} TOP_RIGHT - Specifies that the `relativePosition` of the `InteractiveWindow` will be offset from the top right of the Interface window.
- * @property {InteractiveWindow.RelativePositionAnchor} BOTTOM_RIGHT - Specifies that the `relativePosition` of the `InteractiveWindow` will be offset from the bottom right of the Interface window.
- * @property {InteractiveWindow.RelativePositionAnchor} BOTTOM_LEFT - Specifies that the `relativePosition` of the `InteractiveWindow` will be offset from the bottom left of the Interface window.
+ * @property {InteractiveWindow.RelativePositionAnchor} NO_ANCHOR - Position is not relative to any part of the Interface
+ * window.
+ * @property {InteractiveWindow.RelativePositionAnchor} TOP_LEFT - Position is offset from the top left of the Interface window.
+ * @property {InteractiveWindow.RelativePositionAnchor} TOP_RIGHT - Position is offset from the top right of the Interface
+ * window.
+ * @property {InteractiveWindow.RelativePositionAnchor} BOTTOM_RIGHT - Position offset from the bottom right of the Interface
+ * window.
+ * @property {InteractiveWindow.RelativePositionAnchor} BOTTOM_LEFT - Position is offset from the bottom left of the Interface
+ * window.
*/
static const QVariantMap RELATIVE_POSITION_ANCHOR {
{ "NO_ANCHOR", RelativePositionAnchor::NO_ANCHOR },
@@ -89,21 +78,6 @@ int DesktopScriptingInterface::getHeight() {
* @property {InteractiveWindow.PresentationMode} NATIVE - The window is displayed separately from the Interface window, as its
* own separate window.
*/
-/**jsdoc
- * A display mode for an InteractiveWindow
.
Value | Name | Description |
---|---|---|
0 | VIRTUAL | The window is displayed inside Interface: in the desktop window in - * desktop mode or on the HUD surface in HMD mode. |
1 | NATIVE | The window is displayed separately from the Interface window, as its - * own separate window. |
WebView
* control (defined by "WebView.qml" included in the Interface install) to embed an HTML web page (complete with
* EventBridge
object).
- * @param {InteractiveWindow.Properties} [properties] - Initial window properties.
+ * @param {InteractiveWindow.WindowProperties} [properties] - Initial window properties.
* @returns {InteractiveWindow} A new window object.
* @example InteractiveWindow
.
- * @typedef {object} InteractiveWindow.Properties
+ * Property values used when creating an InteractiveWindow
.
+ * @typedef {object} InteractiveWindow.WindowProperties
* @property {string} [title="InteractiveWindow] - The title of the window.
* @property {Vec2} [position] - The initial position of the window, in pixels.
* @property {Vec2} [size] - The initial size of the window, in pixels
@@ -142,13 +142,36 @@ void InteractiveWindow::emitMainWindowResizeEvent() {
* @property {InteractiveWindow.PresentationWindowInfo} [presentationWindowInfo] - Controls how a NATIVE
window is
* displayed. If used, the window is docked to the specified edge of the Interface window, otherwise the window is
* displayed as its own separate window.
- * @property {InteractiveWindow.AdditionalFlags} [additionalFlags=0] - Window behavior flags in addition to "native window flags" (minimize/maximize/close),
- * set at window creation. Possible flag values are provided as {@link Desktop|Desktop.ALWAYS_ON_TOP} and {@link Desktop|Desktop.CLOSE_BUTTON_HIDES}.
- * Additional flag values can be found on Qt's website at https://doc.qt.io/qt-5/qt.html#WindowType-enum.
- * @property {InteractiveWindow.OverrideFlags} [overrideFlags=0] - Window behavior flags instead of the default window flags.
- * Set at window creation. Possible flag values are provided as {@link Desktop|Desktop.ALWAYS_ON_TOP} and {@link Desktop|Desktop.CLOSE_BUTTON_HIDES}.
- * Additional flag values can be found on Qt's website at https://doc.qt.io/qt-5/qt.html#WindowType-enum.
+ * @property {InteractiveWindow.Flags} [additionalFlags=0] - Customizes window behavior.
+ * @property {InteractiveWindow.OverrideFlags} [overrideFlags=0] - Customizes window controls.
+
+ * @property {InteractiveWindow.RelativePositionAnchor} [relativePositionAnchor] - he anchor for the
+ * relativePosition
, if used.
+ * @property {Vec2} [relativePosition] - The position of the window, relative to the relativePositionAnchor
, in
+ * pixels. Excludes the window frame.
+ * @property {boolean} [isFullScreenWindow] - true
to make the window full screen.
*/
+/**jsdoc
+ * A set of flags customizing InteractiveWindow
controls. The value is constructed by using the |
+ * (bitwise OR) operator on the individual flag values..
Value | Name | Description | |
---|---|---|---|
0x00000001 | Window | Displays the window as a window rather than a dialog. | |
0x00001000 | WindowTitleHint | Adds a title bar. | + * |
0x00002000 | WindowSystemMenuHint | Adds a window system menu. | + * |
0x00004000 | WindowMinimizeButtonHint | Adds a minimize button. | + * |
0x00008000 | WindowMaximizeButtonHint | Adds a maximize button. | + * |
0x00040000 | WindowStaysOnTopHint | The window stays on top of other windows. + * Not used on Windows. + * | |
0x08000000 | WindowCloseButtonHint | Adds a close button. | + * |
A display mode for an InteractiveWindow
.
Value | Name | Description |
---|---|---|
0 | VIRTUAL | The window is displayed inside Interface: in the desktop window in + * desktop mode or on the HUD surface in HMD mode. |
1 | NATIVE | The window is displayed separately from the Interface window, as its + * own separate window. |
A docking location of an InteractiveWindow
.
Value | Name | Description |
---|---|---|
0 | TOP | Dock to the top edge of the Interface window. |
1 | BOTTOM | Dock to the bottom edge of the Interface window. |
2 | LEFT | Dock to the left edge of the Interface window. |
3 | RIGHT | Dock to the right edge of the Interface window. |
The anchor for a relative position of an InteractiveWindow
.
Value | Name | Description |
---|---|---|
0 | NO_ANCHOR | Position is not relative to any part of the Interface window. |
1 | TOP_LEFT | Position is offset from the top left of the Interface window. |
2 | TOP_RIGHT | Position is offset from the top right of the Interface window. |
3 | BOTTOM_RIGHT | Position offset from the bottom right of the Interface + * window. |
4 | BOTTOM_LEFFT | Position is offset from the bottom left of the Interface + * window. |
relativePosition
, if used.
+ * @property {Vec2} relativePosition - The position of the window, relative to the relativePositionAnchor
, in
+ * pixels. Excludes the window frame.
* @property {Vec2} size - The size of the window, in pixels.
* @property {boolean} visible - true
if the window is visible, false
if it isn't.
* @property {InteractiveWindow.PresentationMode} presentationMode - The presentation mode of the window:
From e13b237e960cf0fd5c4aaf0c2735718638f5eca8 Mon Sep 17 00:00:00 2001
From: David Rowe CameraFirstPerson
CameraFirstPersonLookAt
CameraThirdPerson
CameraFSM
CameraLookAt
CameraFSM
CameraSelfie
CameraIndependent
CameraEntity
InHMD
0
1
2
null
if no avatar is being looked at.
*/
// FIXME: The return type doesn't have a conversion to a script value so the function always returns undefined in
// JavaScript. Note: When fixed, JSDoc is needed for the return type.
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
index d0ab314edf..a9e16e9ff1 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
@@ -1920,6 +1920,13 @@ void Avatar::setParentJointIndex(quint16 parentJointIndex) {
}
}
+/**jsdoc
+ * Information about a joint in an avatar's skeleton hierarchy.
+ * @typedef {object} SkeletonJoint
+ * @property {string} name - Joint name.
+ * @property {number} index - Joint index.
+ * @property {number} parentIndex - Index of this joint's parent (-1 if no parent).
+ */
QListCreated using {@link MyAvatar.getTargetAvatar} or {@link AvatarList.getAvatar}.
+ * + * @class ScriptAvatar + * @hideconstructor + * + * @hifi-interface + * @hifi-client-entity + * @hifi-avatar + * @hifi-assignment-client + * @hifi-server-entity + * + * @property {Vec3} position - The avatar's position. + * @property {number} scale - The target scale of the avatar without any restrictions on permissible values imposed by the + * domain. + * @property {Vec3} handPosition - A user-defined hand position, in world coordinates. The position moves with the avatar but + * is otherwise not used or changed by Interface. + * @property {number} bodyPitch - The pitch of the avatar's body, in degrees. + * @property {number} bodyYaw - The yaw of the avatar's body, in degrees. + * @property {number} bodyRoll - The roll of the avatar's body, in degrees. + * @property {Quat} orientation - The orientation of the avatar's body. + * @property {Quat} headOrientation - The orientation of the avatar's head. + * @property {number} headPitch - The pitch of the avatar's head relative to the body, in degrees. + * @property {number} headYaw - The yaw of the avatar's head relative to the body, in degrees. + * @property {number} headRoll - The roll of the avatar's head relative to the body, in degrees. + * + * @property {Vec3} velocity - The linear velocity of the avatar. + * @property {Vec3} angularVelocity - The angular velocity of the avatar. + * + * @property {Uuid} sessionUUID - The avatar's session ID. + * @property {string} displayName - The avatar's display name. + * @property {string} sessionDisplayName - The avatar's display name, sanitized and versioned, as defined by the avatar mixer. + * It is unique among all avatars present in the domain at the time. + * @property {boolean} isReplicated - Deprecated: This property is deprecated and will be + * removed. + * @property {boolean} lookAtSnappingEnabled -true
if the avatar's eyes snap to look at another avatar's eyes
+ * when the other avatar is in the line of sight and also has lookAtSnappingEnabled == true
.
+ *
+ * @property {string} skeletonModelURL - The avatar's FST file.
+ * @property {AttachmentData[]} attachmentData - Information on the avatar's attachments.
+ * Deprecated: This property is deprecated and will be removed. Use avatar entities instead.
+ * @property {string[]} jointNames - The list of joints in the avatar model. + * + * @property {number} audioLoudness - The instantaneous loudness of the audio input that the avatar is injecting into the + * domain. + * @property {number} audioAverageLoudness - The rolling average loudness of the audio input that the avatar is injecting into + * the domain. + * + * @property {Mat4} sensorToWorldMatrix - The scale, rotation, and translation transform from the user's real world to the + * avatar's size, orientation, and position in the virtual world. + * @property {Mat4} controllerLeftHandMatrix - The rotation and translation of the left hand controller relative to the avatar. + * @property {Mat4} controllerRightHandMatrix - The rotation and translation of the right hand controller relative to the + * avatar. + * + * @property {Vec3} skeletonOffset - The rendering offset of the avatar. + */ class ScriptAvatar : public ScriptAvatarData { Q_OBJECT @@ -26,27 +84,138 @@ public: public slots: + /**jsdoc + * Gets the default rotation of a joint in the avatar relative to its parent. + *For information on the joint hierarchy used, see + * Avatar Standards.
+ * @function ScriptAvatar.getDefaultJointRotation + * @param {number} index - The joint index. + * @returns {Quat} The default rotation of the joint if avatar data are available and the joint index is valid, otherwise + * {@link Quat(0)|Quat.IDENTITY}. + */ glm::quat getDefaultJointRotation(int index) const; + + /**jsdoc + * Gets the default translation of a joint in the avatar relative to its parent, in model coordinates. + *Warning: These coordinates are not necessarily in meters.
+ *For information on the joint hierarchy used, see + * Avatar Standards.
+ * @function ScriptAvatar.getDefaultJointTranslation + * @param {number} index - The joint index. + * @returns {Vec3} The default translation of the joint (in model coordinates) if avatar data are available and the joint + * index is valid, otherwise {@link Vec3(0)|Vec3.ZERO}. + */ glm::vec3 getDefaultJointTranslation(int index) const; + + /**jsdoc + * Gets the offset applied to the avatar for rendering. + * @function ScriptAvatar.getSkeletonOffset + * @returns {Vec3} The skeleton offset if avatar data are available, otherwise {@link Vec3(0)|Vec3.ZERO}. + */ glm::vec3 getSkeletonOffset() const; + + /**jsdoc + * Gets the position of a joint in the avatar. + * @function ScriptAvatar.getJointPosition + * @param {number} index - The index of the joint. + * @returns {Vec3} The position of the joint in world coordinates, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't + * available. + */ glm::vec3 getJointPosition(int index) const; + + /**jsdoc + * Gets the position of a joint in the current avatar. + * @function ScriptAvatar.getJointPosition + * @param {string} name - The name of the joint. + * @returns {Vec3} The position of the joint in world coordinates, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't + * available. + */ glm::vec3 getJointPosition(const QString& name) const; + + /**jsdoc + * Gets the position of the current avatar's neck in world coordinates. + * @function ScriptAvatar.getNeckPosition + * @returns {Vec3} The position of the neck in world coordinates, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't + * available. + */ glm::vec3 getNeckPosition() const; + + /**jsdoc + * Gets the current acceleration of the avatar. + * @function ScriptAvatar.getAcceleration + * @returns {Vec3} The current acceleration of the avatar, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't available.. + */ glm::vec3 getAcceleration() const; + + /**jsdoc + * Gets the ID of the entity of avatar that the avatar is parented to. + * @function ScriptAvatar.getParentID + * @returns {Uuid} The ID of the entity or avatar that the avatar is parented to. {@link Uuid(0)|Uuid.NULL} if not parented + * or avatar data aren't available. + */ QUuid getParentID() const; + + /**jsdoc + * Gets the joint of the entity or avatar that the avatar is parented to. + * @function ScriptAvatar.getParentJointIndex + * @returns {number} The joint of the entity or avatar that the avatar is parented to.65535
or
+ * -1
if parented to the entity or avatar's position and orientation rather than a joint, or avatar data
+ * aren't available.
+ */
quint16 getParentJointIndex() const;
+
+ /**jsdoc
+ * Gets information on all the joints in the avatar's skeleton.
+ * @function ScriptAvatar.getSkeleton
+ * @returns {SkeletonJoint[]} Information about each joint in the avatar's skeleton.
+ */
QVariantList getSkeleton() const;
+
+ /**jsdoc
+ * @function ScriptAvatar.getSimulationRate
+ * @param {AvatarSimulationRate} [rateName=""] - Rate name.
+ * @returns {number} Simulation rate in Hz, or 0.0
if avatar data aren't available.
+ * @deprecated This function is deprecated and will be removed.
+ */
float getSimulationRate(const QString& rateName = QString("")) const;
+
+ /**jsdoc
+ * Gets the position of the left palm in world coordinates.
+ * @function ScriptAvatar.getLeftPalmPosition
+ * @returns {Vec3} The position of the left palm in world coordinates, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't
+ * available.
+ */
glm::vec3 getLeftPalmPosition() const;
+
+ /**jsdoc
+ * Gets the rotation of the left palm in world coordinates.
+ * @function ScriptAvatar.getLeftPalmRotation
+ * @returns {Quat} The rotation of the left palm in world coordinates, or {@link Quat(0)|Quat.IDENTITY} if the avatar data
+ * aren't available.
+ */
glm::quat getLeftPalmRotation() const;
+
+ /**jsdoc
+ * Gets the position of the right palm in world coordinates.
+ * @function ScriptAvatar.getLeftPalmPosition
+ * @returns {Vec3} The position of the right palm in world coordinates, or {@link Vec3(0)|Vec3.ZERO} if avatar data aren't
+ * available.
+ */
glm::vec3 getRightPalmPosition() const;
+
+ /**jsdoc
+ * Gets the rotation of the right palm in world coordinates.
+ * @function ScriptAvatar.getLeftPalmRotation
+ * @returns {Quat} The rotation of the right palm in world coordinates, or {@link Quat(0)|Quat.IDENTITY} if the avatar data
+ * aren't available.
+ */
glm::quat getRightPalmRotation() const;
private:
diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h
index c474353451..e12e5b4649 100644
--- a/libraries/avatars/src/AvatarHashMap.h
+++ b/libraries/avatars/src/AvatarHashMap.h
@@ -111,7 +111,7 @@ public:
* Gets information about an avatar.
* @function AvatarList.getAvatar
* @param {Uuid} avatarID - The ID of the avatar.
- * @returns {AvatarData} Information about the avatar.
+ * @returns {ScriptAvatar} Information about the avatar.
*/
// Null/Default-constructed QUuids will return MyAvatar
Q_INVOKABLE virtual ScriptAvatarData* getAvatar(QUuid avatarID) { return new ScriptAvatarData(getAvatarBySessionID(avatarID)); }
diff --git a/libraries/avatars/src/ScriptAvatarData.h b/libraries/avatars/src/ScriptAvatarData.h
index 9c5c2c6918..7dcd7cc7e1 100644
--- a/libraries/avatars/src/ScriptAvatarData.h
+++ b/libraries/avatars/src/ScriptAvatarData.h
@@ -16,53 +16,6 @@
#include "AvatarData.h"
-/**jsdoc
- * Information about an avatar.
- * @typedef {object} AvatarData
- * @property {Vec3} position - The avatar's position.
- * @property {number} scale - The target scale of the avatar without any restrictions on permissible values imposed by the
- * domain.
- * @property {Vec3} handPosition - A user-defined hand position, in world coordinates. The position moves with the avatar but
- * is otherwise not used or changed by Interface.
- * @property {number} bodyPitch - The pitch of the avatar's body, in degrees.
- * @property {number} bodyYaw - The yaw of the avatar's body, in degrees.
- * @property {number} bodyRoll - The roll of the avatar's body, in degrees.
- * @property {Quat} orientation - The orientation of the avatar's body.
- * @property {Quat} headOrientation - The orientation of the avatar's head.
- * @property {number} headPitch - The pitch of the avatar's head relative to the body, in degrees.
- * @property {number} headYaw - The yaw of the avatar's head relative to the body, in degrees.
- * @property {number} headRoll - The roll of the avatar's head relative to the body, in degrees.
- *
- * @property {Vec3} velocity - The linear velocity of the avatar.
- * @property {Vec3} angularVelocity - The angular velocity of the avatar.
- *
- * @property {Uuid} sessionUUID - The avatar's session ID.
- * @property {string} displayName - The avatar's display name.
- * @property {string} sessionDisplayName - The avatar's display name, sanitized and versioned, as defined by the avatar mixer.
- * It is unique among all avatars present in the domain at the time.
- * @property {boolean} isReplicated - Deprecated: This property is deprecated and will be
- * removed.
- * @property {boolean} lookAtSnappingEnabled - true
if the avatar's eyes snap to look at another avatar's eyes
- * when the other avatar is in the line of sight and also has lookAtSnappingEnabled == true
.
- *
- * @property {string} skeletonModelURL - The avatar's FST file.
- * @property {AttachmentData[]} attachmentData - Information on the avatar's attachments.
- * Deprecated: This property is deprecated and will be removed. Use avatar entities instead.
- * @property {string[]} jointNames - The list of joints in the current avatar model. - * - * @property {number} audioLoudness - The instantaneous loudness of the audio input that the avatar is injecting into the - * domain. - * @property {number} audioAverageLoudness - The rolling average loudness of the audio input that the avatar is injecting into - * the domain. - * - * @property {Mat4} sensorToWorldMatrix - The scale, rotation, and translation transform from the user's real world to the - * avatar's size, orientation, and position in the virtual world. - * @property {Mat4} controllerLeftHandMatrix - The rotation and translation of the left hand controller relative to the avatar. - * @property {Mat4} controllerRightHandMatrix - The rotation and translation of the right hand controller relative to the - * avatar. - * - * @property {boolean} hasPriority -true
if the avatar is in a "hero" zone, false
if it isn't.
- */
class ScriptAvatarData : public QObject {
Q_OBJECT
@@ -153,16 +106,110 @@ public:
// ATTACHMENT AND JOINT PROPERTIES
//
QString getSkeletonModelURLFromScript() const;
+
+ /**jsdoc
+ * Gets the pointing state of the hands to control where the laser emanates from. If the right index finger is pointing, the
+ * laser emanates from the tip of that finger, otherwise it emanates from the palm.
+ * @function ScriptAvatar.getHandState
+ * @returns {HandState|number} The pointing state of the hand, or -1
if the avatar data aren't available.
+ */
Q_INVOKABLE char getHandState() const;
+
+ /**jsdoc
+ * Gets the rotation of a joint relative to its parent. For information on the joint hierarchy used, see
+ * Avatar Standards.
+ * @function ScriptAvatar.getJointRotation
+ * @param {number} index - The index of the joint.
+ * @returns {Quat} The rotation of the joint relative to its parent, or {@link Quat(0)|Quat.IDENTITY} if the avatar data
+ * aren't available.
+ */
Q_INVOKABLE glm::quat getJointRotation(int index) const;
+
+ /**jsdoc
+ * Gets the translation of a joint relative to its parent, in model coordinates.
+ * Warning: These coordinates are not necessarily in meters.
+ *For information on the joint hierarchy used, see + * Avatar Standards.
+ * @function ScriptAvatar.getJointTranslation + * @param {number} index - The index of the joint. + * @returns {Vec3} The translation of the joint relative to its parent, in model coordinates, or {@link Vec3(0)|Vec3.ZERO} + * if the avatar data aren't available. + */ Q_INVOKABLE glm::vec3 getJointTranslation(int index) const; + + /**jsdoc + * Gets the rotation of a joint relative to its parent. For information on the joint hierarchy used, see + * Avatar Standards. + * @function ScriptAvatar.getJointRotation + * @param {string} name - The name of the joint. + * @returns {Quat} The rotation of the joint relative to its parent, or {@link Quat(0)|Quat.IDENTITY} if the avatar data + * aren't available. + */ Q_INVOKABLE glm::quat getJointRotation(const QString& name) const; + + /**jsdoc + * Gets the translation of a joint relative to its parent, in model coordinates. + *Warning: These coordinates are not necessarily in meters.
+ *For information on the joint hierarchy used, see + * Avatar Standards.
+ * @function ScriptAvatar.getJointTranslation + * @param {number} name - The name of the joint. + * @returns {Vec3} The translation of the joint relative to its parent, in model coordinates, or {@link Vec3(0)|Vec3.ZERO} + * if the avatar data aren't available. + */ Q_INVOKABLE glm::vec3 getJointTranslation(const QString& name) const; + + /**jsdoc + * Gets the rotations of all joints in the avatar. Each joint's rotation is relative to its parent joint. + * @function ScriptAvatar.getJointRotations + * @returns {Quat[]} The rotations of all joints relative to each's parent, or[]
if the avatar data aren't
+ * available. The values are in the same order as the array returned by {@link ScriptAvatar.getJointNames}.
+ */
Q_INVOKABLE QVectorWarning: These coordinates are not necessarily in meters.
+ * @function ScriptAvatar.getJointTranslations + * @returns {Vec3[]} The translations of all joints relative to each's parent, in model coordinates, or[]
if
+ * the avatar data aren't available. The values are in the same order as the array returned by
+ * {@link ScriptAvatar.getJointNames}.
+ */
Q_INVOKABLE QVectortrue
if the joint data are valid, false
if not or the avatar data aren't
+ * available.
+ */
Q_INVOKABLE bool isJointDataValid(const QString& name) const;
+
+ /**jsdoc
+ * Gets the joint index for a named joint. The joint index value is the position of the joint in the array returned by
+ * {@linkScriptAvatar.getJointNames}.
+ * @function ScriptAvatar.getJointIndex
+ * @param {string} name - The name of the joint.
+ * @returns {number} The index of the joint if valid and avatar data are available, otherwise -1
.
+ */
Q_INVOKABLE int getJointIndex(const QString& name) const;
+
+ /**jsdoc
+ * Gets the names of all the joints in the avatar.
+ * @function ScriptAvatar.getJointNames
+ * @returns {string[]} The joint names, or []
if the avatar data aren't available.
+ */
Q_INVOKABLE QStringList getJointNames() const;
+
+ /**jsdoc
+ * Gets information about the models currently attached to the avatar.
+ * @function ScriptAvatar.getAttachmentData
+ * @returns {AttachmentData[]} Information about all models attached to the avatar, or []
if the avatar data
+ * aren't available.
+ * @deprecated This function is deprecated and will be removed. Use avatar entities instead.
+ */
Q_INVOKABLE QVectordisplayName
property value changes.
+ * @function ScriptAvatar.displayNameChanged
+ * @returns {Signal}
+ */
void displayNameChanged();
+
+ /**jsdoc
+ * Triggered when the avatar's sessionDisplayName
property value changes.
+ * @function ScriptAvatar.sessionDisplayNameChanged
+ * @returns {Signal}
+ */
void sessionDisplayNameChanged();
+
+ /**jsdoc
+ * Triggered when the avatar's model (i.e., skeletonModelURL
property value) is changed.
+ * @function ScriptAvatar.skeletonModelURLChanged
+ * @returns {Signal}
+ */
void skeletonModelURLChanged();
+
+ /**jsdoc
+ * Triggered when the avatar's lookAtSnappingEnabled
property value changes.
+ * @function ScriptAvatar.lookAtSnappingChanged
+ * @param {boolean} enabled - true
if look-at snapping is enabled, false
if not.
+ * @returns {Signal}
+ */
void lookAtSnappingChanged(bool enabled);
public slots:
+
+ /**jsdoc
+ * Gets the rotation of a joint relative to the avatar.
+ * @function ScriptAvatar.getAbsoluteJointRotationInObjectFrame
+ * @param {number} index - The index of the joint.
+ * @returns {Quat} The rotation of the joint relative to the avatar, or {@link Quat(0)|Quat.IDENTITY} if the avatar data
+ * aren't available.
+ */
glm::quat getAbsoluteJointRotationInObjectFrame(int index) const;
+
+ /**jsdoc
+ * Gets the translation of a joint relative to the avatar.
+ * @function ScriptAvatar.getAbsoluteJointTranslationInObjectFrame
+ * @param {number} index - The index of the joint.
+ * @returns {Vec3} The translation of the joint relative to the avatar, or {@link Vec3(0)|Vec3.ZERO} if the avatar data
+ * aren't available.
+ */
glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const;
protected: