From 1a4266a64a93db554fea764aba38bb4596177b40 Mon Sep 17 00:00:00 2001
From: David Rowe
Date: Mon, 20 Jan 2020 14:33:06 +1300
Subject: [PATCH 01/13] Review JSDoc updates from recent commits
---
.../src/avatars/ScriptableAvatar.h | 10 +++++-----
interface/src/avatar/MyAvatar.h | 18 +++++++++---------
interface/src/ui/InteractiveWindow.cpp | 2 +-
.../src/avatars-renderer/Avatar.cpp | 2 +-
.../src/avatars-renderer/Avatar.h | 4 ++--
.../src/avatars-renderer/ScriptAvatar.h | 4 ++--
libraries/avatars/src/AvatarData.h | 10 +++++-----
libraries/avatars/src/ScriptAvatarData.h | 2 +-
.../GraphicsScriptingInterface.cpp | 2 +-
.../src/graphics-scripting/ScriptableMesh.h | 4 ++--
.../graphics-scripting/ScriptableMeshPart.h | 2 +-
.../src/graphics-scripting/ScriptableModel.h | 4 ++--
.../src/graphics/BufferViewHelpers.cpp | 2 +-
libraries/shared/src/JointData.h | 2 +-
libraries/shared/src/RegisteredMetaTypes.cpp | 2 +-
15 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/assignment-client/src/avatars/ScriptableAvatar.h b/assignment-client/src/avatars/ScriptableAvatar.h
index 500c3f44fb..1e6046ba7e 100644
--- a/assignment-client/src/avatars/ScriptableAvatar.h
+++ b/assignment-client/src/avatars/ScriptableAvatar.h
@@ -82,15 +82,15 @@
* 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.
+ * facial blend shapes, false
if automatic blinking is disabled. Set 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
if you wish to fully control the eye blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * to true
to prevent the iris from being obscured by the upper or lower lids. Set 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
if you wish to fully control the mouth facial blend shapes via the
+ * this property to false
to fully control the mouth facial blend shapes via the
* {@link MyAvatar.setBlendshape} method.
*
* @example Create a scriptable avatar.
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index 9b9bc2d9df..0f46af458e 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -154,12 +154,12 @@ class MyAvatar : public Avatar {
* 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
- * to fully control the blink facial blend shapes via the {@link MyAvatar.setBlendshape} method.
+ * facial blend shapes, false
if automatic blinking is disabled. Set 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.
+ * to true
to prevent the iris from being obscured by the upper or lower lids. Set 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
@@ -1793,15 +1793,15 @@ public:
/**jsdoc
* Turns the avatar's head until it faces the target point within a +90/-90 degree range.
- * Once this method is called, API calls will have full control of the head for a limited time.
- * If this method is not called for 2 seconds, the engine will regain control of the head.
+ * Once this method is called, API calls have full control of the head for a limited time.
+ * If this method is not called for 2 seconds, the engine regains control of the head.
* @function MyAvatar.setHeadLookAt
* @param {Vec3} lookAtTarget - The target point in world coordinates.
*/
Q_INVOKABLE void setHeadLookAt(const glm::vec3& lookAtTarget);
/**jsdoc
- * Returns the current target point of the head's look direction in world coordinates.
+ * Gets the current target point of the head's look direction in world coordinates.
* @function MyAvatar.getHeadLookAt
* @returns {Vec3} The head's look-at target in world coordinates.
*/
@@ -1815,7 +1815,7 @@ public:
/**jsdoc
* Forces the avatar's eyes to look at a specified location. Once this method is called, API calls
- * have full control of the eyes for a limited time. If this method is not called for two seconds,
+ * full control of the eyes for a limited time. If this method is not called for 2 seconds,
* the engine regains control of the eyes.
* @function MyAvatar.setEyesLookAt
* @param {Vec3} lookAtTarget - The target point in world coordinates.
@@ -1823,7 +1823,7 @@ public:
Q_INVOKABLE void setEyesLookAt(const glm::vec3& lookAtTarget);
/**jsdoc
- * Returns the current target point of the eyes look direction in world coordinates.
+ * Gets the current target point of the eyes look direction in world coordinates.
* @function MyAvatar.getEyesLookAt
* @returns {Vec3} The eyes' look-at target in world coordinates.
*/
diff --git a/interface/src/ui/InteractiveWindow.cpp b/interface/src/ui/InteractiveWindow.cpp
index 2acac2c529..0ac1f05737 100644
--- a/interface/src/ui/InteractiveWindow.cpp
+++ b/interface/src/ui/InteractiveWindow.cpp
@@ -145,7 +145,7 @@ void InteractiveWindow::emitMainWindowResizeEvent() {
* @property {InteractiveWindow.Flags} [additionalFlags=0] - Customizes window behavior.
* @property {InteractiveWindow.OverrideFlags} [overrideFlags=0] - Customizes window controls.
- * @property {InteractiveWindow.RelativePositionAnchor} [relativePositionAnchor] - he anchor for the
+ * @property {InteractiveWindow.RelativePositionAnchor} [relativePositionAnchor] - The anchor for the
* relativePosition
, if used.
* @property {Vec2} [relativePosition] - The position of the window, relative to the relativePositionAnchor
, in
* pixels. Excludes the window frame.
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
index a9e16e9ff1..3792057052 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
@@ -1925,7 +1925,7 @@ void Avatar::setParentJointIndex(quint16 parentJointIndex) {
* @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).
+ * @property {number} parentIndex - Index of this joint's parent (-1
if no parent).
*/
QList Avatar::getSkeleton() {
SkeletonModelPointer skeletonModel = _skeletonModel;
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
index dcd4d00db0..2c36a92b0f 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
@@ -442,7 +442,7 @@ public:
void setOrientationViaScript(const glm::quat& orientation) override;
/**jsdoc
- * Gets the ID of the entity of avatar that the avatar is parented to.
+ * Gets the ID of the entity or avatar that the avatar is parented to.
* @function MyAvatar.getParentID
* @returns {Uuid} The ID of the entity or avatar that the avatar is parented to. {@link Uuid(0)|Uuid.NULL} if not parented.
*/
@@ -450,7 +450,7 @@ public:
Q_INVOKABLE virtual const QUuid getParentID() const override { return SpatiallyNestable::getParentID(); }
/**jsdoc
- * Sets the ID of the entity of avatar that the avatar is parented to.
+ * Sets the ID of the entity or avatar that the avatar is parented to.
* @function MyAvatar.setParentID
* @param {Uuid} parentID - The ID of the entity or avatar that the avatar should be parented to. Set to
* {@link Uuid(0)|Uuid.NULL} to unparent.
diff --git a/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h b/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
index 3f8fc4f88b..abc15ae11b 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
@@ -19,7 +19,7 @@
/**jsdoc
* Information about an avatar.
*
- * Created using {@link MyAvatar.getTargetAvatar} or {@link AvatarList.getAvatar}.
+ * Create using {@link MyAvatar.getTargetAvatar} or {@link AvatarList.getAvatar}.
*
* @class ScriptAvatar
* @hideconstructor
@@ -152,7 +152,7 @@ public slots:
/**jsdoc
- * Gets the ID of the entity of avatar that the avatar is parented to.
+ * Gets the ID of the entity or 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.
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index 24808b98bf..40e3a056da 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -538,12 +538,12 @@ class AvatarData : public QObject, public SpatiallyNestable {
* 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
- * to fully control the blink facial blend shapes via the {@link Avatar.setBlendshape} method.
+ * facial blend shapes, false
if automatic blinking is disabled. Set 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
to fully control the eye blend shapes via the {@link Avatar.setBlendshape} method.
+ * to true
to prevent the iris from being obscured by the upper or lower lids. Set to 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
to fully control the mouth facial blend shapes via the
@@ -1542,7 +1542,7 @@ signals:
void sessionDisplayNameChanged();
/**jsdoc
- * Triggered when the avatar's model (i.e., skeletonModelURL
property value) is changed.
+ * Triggered when the avatar's model (i.e., skeletonModelURL
property value) changes.
* @function Avatar.skeletonModelURLChanged
* @returns {Signal}
* @example Report when your avatar's skeleton model changes.
diff --git a/libraries/avatars/src/ScriptAvatarData.h b/libraries/avatars/src/ScriptAvatarData.h
index 7dcd7cc7e1..128bf9aef7 100644
--- a/libraries/avatars/src/ScriptAvatarData.h
+++ b/libraries/avatars/src/ScriptAvatarData.h
@@ -248,7 +248,7 @@ signals:
void sessionDisplayNameChanged();
/**jsdoc
- * Triggered when the avatar's model (i.e., skeletonModelURL
property value) is changed.
+ * Triggered when the avatar's model (i.e., skeletonModelURL
property value) changes.
* @function ScriptAvatar.skeletonModelURLChanged
* @returns {Signal}
*/
diff --git a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp
index 9d36cfd91a..a27eff9cbe 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp
+++ b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.cpp
@@ -434,7 +434,7 @@ namespace scriptable {
* @property {string} [glossMap] - The URL of the gloss texture image.
* Only use one of roughnessMap
and glossMap
.
* "hifi_pbr"
model only.
- * @property {string} [normalMa]p - The URL of the normal texture image.
+ * @property {string} [normalMap] - The URL of the normal texture image.
* If "fallthrough"
then it and bumpMap
fall through to the material below.
* Only use one of normalMap
and bumpMap
.
* "hifi_pbr"
model only.
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
index 8d70eda9e4..0e7eecc03b 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
@@ -31,7 +31,7 @@ namespace scriptable {
/**jsdoc
* A handle to in-memory mesh data in a {@link GraphicsModel}.
*
- * Created using the {@link Graphics} API, {@link GraphicsModel.cloneModel}, or {@link GraphicsMesh.cloneMesh}.
+ * Create using the {@link Graphics} API, {@link GraphicsModel.cloneModel}, or {@link GraphicsMesh.cloneMesh}.
*
* @class GraphicsMesh
* @hideconstructor
@@ -133,7 +133,7 @@ namespace scriptable {
QVector findNearbyVertexIndices(const glm::vec3& origin, float epsilon = 1e-6) const;
/**jsdoc
- * Adds an attribute to the (whole) mesh's vertices.
+ * Adds an attribute for all vertices.
* @function GraphicsMesh.addAttribute
* @param {Graphics.BufferTypeName} name - The name of the attribute.
* @param {Graphics.BufferType} [defaultValue] - The value to give the attributes added to the vertices.
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
index 78ddb4f2b0..878b239f3d 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
@@ -13,7 +13,7 @@ namespace scriptable {
/**jsdoc
* A handle to in-memory mesh part data in a {@link GraphicsModel}.
*
- * Created using the {@link Graphics} API, {@link GraphicsModel.cloneModel}, {@link GraphicsMesh.cloneMesh}, or
+ *
Create using the {@link Graphics} API, {@link GraphicsModel.cloneModel}, {@link GraphicsMesh.cloneMesh}, or
* {@link GraphicsMeshPart.cloneMeshPart}.
*
* @class GraphicsMeshPart
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableModel.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableModel.h
index 6dc2a06747..a6f135c321 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableModel.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableModel.h
@@ -22,7 +22,7 @@ namespace scriptable {
* Note: The model may be used for more than one instance of an item displayed in the scene. Modifying the model updates
* all instances displayed.
*
- * Created using the {@link Graphics} API or {@link GraphicsModel.cloneModel}.
+ * Create using the {@link Graphics} API or {@link GraphicsModel.cloneModel}.
*
* @class GraphicsModel
* @hideconstructor
@@ -34,7 +34,7 @@ namespace scriptable {
* @property {Uuid} objectID - The ID of the entity or avatar that the model is associated with, if any; null
* if the model is not associated with an entity or avatar.
* Read-only.
- * @property {number} numMeshes - The number of meshes contained in the model.
+ * @property {number} numMeshes - The number of meshes in the model.
* Read-only.
* @property {GraphicsMesh[]} meshes - The meshes in the model. Each mesh may have more than one mesh part.
* Read-only.
diff --git a/libraries/graphics/src/graphics/BufferViewHelpers.cpp b/libraries/graphics/src/graphics/BufferViewHelpers.cpp
index 076cb92dcf..87d19ec6a2 100644
--- a/libraries/graphics/src/graphics/BufferViewHelpers.cpp
+++ b/libraries/graphics/src/graphics/BufferViewHelpers.cpp
@@ -76,7 +76,7 @@ const std::array ZERO123 = { { "0", "1", "2", "3" } };
* {@link Vec2} | "texcoord4" | Fifth UV coordinates buffer. |
*
*
- * @typedef {Vec3|vec2} Graphics.BufferType
+ * @typedef {Vec4|Vec3|Vec2} Graphics.BufferType
*/
QMap ATTRIBUTES{
{"position", gpu::Stream::POSITION },
diff --git a/libraries/shared/src/JointData.h b/libraries/shared/src/JointData.h
index 3f957fa046..329c2dd151 100644
--- a/libraries/shared/src/JointData.h
+++ b/libraries/shared/src/JointData.h
@@ -16,7 +16,7 @@ public:
// Used by the avatar mixer to describe a single joint
// Translations relative to their parent joint
// Rotations are absolute (i.e. not relative to parent) and are in rig space.
-// No JSDoc because its not provided as a type to the script engine.
+// No JSDoc because it's not provided as a type to the script engine.
class JointData {
public:
glm::quat rotation;
diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp
index 7c30d4f205..7faaebbae9 100644
--- a/libraries/shared/src/RegisteredMetaTypes.cpp
+++ b/libraries/shared/src/RegisteredMetaTypes.cpp
@@ -1309,7 +1309,7 @@ void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out) {
/**jsdoc
* A triangle in a mesh.
* @typedef {object} MeshFace
- * @property {number[]} vertices - The indexes of the three vertices that make up the fase.
+ * @property {number[]} vertices - The indexes of the three vertices that make up the face.
*/
QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace) {
QScriptValue obj = engine->newObject();
From eae3336f5735b38775088a6b97d887cfbb18d8f5 Mon Sep 17 00:00:00 2001
From: David Rowe
Date: Mon, 20 Jan 2020 15:06:32 +1300
Subject: [PATCH 02/13] Fix up docs links
---
.../hifi/avatarPackager/AvatarPackagerApp.qml | 2 +-
.../qml/hifi/avatarPackager/AvatarProject.qml | 2 +-
.../qml/hifi/avatarapp/MessageBoxes.qml | 2 +-
.../qml/hifi/commerce/checkout/Checkout.qml | 2 +-
.../qml/hifi/commerce/purchases/Purchases.qml | 2 +-
interface/src/Application.cpp | 2 +-
interface/src/avatar/AvatarDoctor.cpp | 2 +-
interface/src/avatar/MyAvatar.h | 14 +++++++-------
.../src/avatars-renderer/Avatar.h | 4 ++--
.../src/avatars-renderer/ScriptAvatar.h | 4 ++--
libraries/avatars/src/AvatarData.h | 18 +++++++++---------
libraries/avatars/src/ScriptAvatarData.h | 8 ++++----
libraries/image/src/image/TextureProcessing.h | 2 +-
libraries/midi/src/Midi.h | 2 +-
libraries/script-engine/src/ScriptEngine.h | 2 +-
libraries/script-engine/src/Vec3.h | 2 +-
16 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/interface/resources/qml/hifi/avatarPackager/AvatarPackagerApp.qml b/interface/resources/qml/hifi/avatarPackager/AvatarPackagerApp.qml
index 278ce36362..9158e25f75 100644
--- a/interface/resources/qml/hifi/avatarPackager/AvatarPackagerApp.qml
+++ b/interface/resources/qml/hifi/avatarPackager/AvatarPackagerApp.qml
@@ -229,7 +229,7 @@ Item {
}
function openDocs() {
- Qt.openUrlExternally("https://docs.highfidelity.com/create/avatars/package-avatar.html");
+ Qt.openUrlExternally("https://docs.projectathena.dev/create/avatars/package-avatar.html");
}
function openVideo() {
diff --git a/interface/resources/qml/hifi/avatarPackager/AvatarProject.qml b/interface/resources/qml/hifi/avatarPackager/AvatarProject.qml
index e5bffa7829..5dd2dd0bd6 100644
--- a/interface/resources/qml/hifi/avatarPackager/AvatarProject.qml
+++ b/interface/resources/qml/hifi/avatarPackager/AvatarProject.qml
@@ -326,7 +326,7 @@ Item {
text: "This item is not for sale yet, learn more."
onLinkActivated: {
- Qt.openUrlExternally("https://docs.highfidelity.com/sell/add-item/upload-avatar.html");
+ Qt.openUrlExternally("https://docs.projectathena.dev/sell/add-item/upload-avatar.html");
}
}
diff --git a/interface/resources/qml/hifi/avatarapp/MessageBoxes.qml b/interface/resources/qml/hifi/avatarapp/MessageBoxes.qml
index 7d25438a1f..decb5e0807 100644
--- a/interface/resources/qml/hifi/avatarapp/MessageBoxes.qml
+++ b/interface/resources/qml/hifi/avatarapp/MessageBoxes.qml
@@ -7,7 +7,7 @@ MessageBox {
popup.onButton2Clicked = callback;
popup.titleText = 'Specify Avatar URL'
popup.bodyText = 'This will not overwrite your existing favorite if you are wearing one.
' +
- '' +
+ '' +
'Learn to make a custom avatar by opening this link on your desktop.' +
''
popup.inputText.visible = true;
diff --git a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml
index 41ac9232e2..315fc540dd 100644
--- a/interface/resources/qml/hifi/commerce/checkout/Checkout.qml
+++ b/interface/resources/qml/hifi/commerce/checkout/Checkout.qml
@@ -778,7 +778,7 @@ Rectangle {
lightboxPopup.bodyText = "Rezzing this content set will replace the existing environment and all of the items in this domain. " +
"If you want to save the state of the content in this domain, create a backup before proceeding.
" +
"For more information about backing up and restoring content, " +
- "" +
+ "" +
"click here to open info on your desktop browser.";
lightboxPopup.button1text = "CANCEL";
lightboxPopup.button1method = function() {
diff --git a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml
index 85e5211649..40365ef9e7 100644
--- a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml
+++ b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml
@@ -602,7 +602,7 @@ Rectangle {
lightboxPopup.bodyText = "Rezzing this content set will replace the existing environment and all of the items in this domain. " +
"If you want to save the state of the content in this domain, create a backup before proceeding.
" +
"For more information about backing up and restoring content, " +
- "" +
+ "" +
"click here to open info on your desktop browser.";
lightboxPopup.button1text = "CANCEL";
lightboxPopup.button1method = function() {
diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 36f1f4132a..776f78774c 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -7749,7 +7749,7 @@ bool Application::askToReplaceDomainContent(const QString& url) {
static const QString infoText = simpleWordWrap("Your domain's content will be replaced with a new content set. "
"If you want to save what you have now, create a backup before proceeding. For more information about backing up "
"and restoring content, visit the documentation page at: ", MAX_CHARACTERS_PER_LINE) +
- "\nhttps://docs.highfidelity.com/create-and-explore/start-working-in-your-sandbox/restoring-sandbox-content";
+ "\nhttps://docs.projectathena.dev/host/maintain-domain.html";
ModalDialogListener* dig = OffscreenUi::asyncQuestion("Are you sure you want to replace this domain's content set?",
infoText, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
diff --git a/interface/src/avatar/AvatarDoctor.cpp b/interface/src/avatar/AvatarDoctor.cpp
index 4ff6fb7553..3c56170825 100644
--- a/interface/src/avatar/AvatarDoctor.cpp
+++ b/interface/src/avatar/AvatarDoctor.cpp
@@ -55,7 +55,7 @@ static QStringList HAND_MAPPING_SUFFIXES = {
"HandThumb1",
};
-const QUrl PACKAGE_AVATAR_DOCS_BASE_URL = QUrl("https://docs.highfidelity.com/create/avatars/package-avatar.html");
+const QUrl PACKAGE_AVATAR_DOCS_BASE_URL = QUrl("https://docs.projectathena.dev/create/avatars/package-avatar.html");
AvatarDoctor::AvatarDoctor(const QUrl& avatarFSTFileUrl) :
_avatarFSTFileUrl(avatarFSTFileUrl) {
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index 0f46af458e..8ab532358b 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -654,7 +654,7 @@ public:
* Note: When using pre-built animation data, it's critical that the joint orientation of the source animation and target
* rig are equivalent, since the animation data applies absolute values onto the joints. If the orientations are different,
* the avatar will move in unpredictable ways. For more information about avatar joint orientation standards, see
- * Avatar Standards.
+ * Avatar Standards.
* @function MyAvatar.overrideAnimation
* @param {string} url - The URL to the animation file. Animation files may be in glTF or FBX format, but only need to
* contain the avatar skeleton and animation data. glTF models may be in JSON or binary format (".gltf" or ".glb" URLs
@@ -762,7 +762,7 @@ public:
* Note: When using pre-built animation data, it's critical that the joint orientation of the source animation and target
* rig are equivalent, since the animation data applies absolute values onto the joints. If the orientations are different,
* the avatar will move in unpredictable ways. For more information about avatar joint orientation standards, see
- * Avatar Standards.
+ * Avatar Standards.
* @function MyAvatar.overrideRoleAnimation
* @param {string} role - The animation role to override
* @param {string} url - The URL to the animation file. Animation files need to be in glTF or FBX format, but only need to
@@ -1920,7 +1920,7 @@ public:
/**jsdoc
* Enables and disables flow simulation of physics on the avatar's hair, clothes, and body parts. See
- * {@link https://docs.highfidelity.com/create/avatars/add-flow.html|Add Flow to Your Avatar} for more
+ * {@link https://docs.projectathena.dev/create/avatars/add-flow.html|Add Flow to Your Avatar} for more
* information.
* @function MyAvatar.useFlow
* @param {boolean} isActive - true
if flow simulation is enabled on the joint, false
if it isn't.
@@ -2284,7 +2284,7 @@ public slots:
/**jsdoc
* Gets the URL of the override animation graph.
- *
See {@link https://docs.highfidelity.com/create/avatars/custom-animations.html|Custom Avatar Animations} for
+ *
See {@link https://docs.projectathena.dev/create/avatars/custom-animations.html|Custom Avatar Animations} for
* information on animation graphs.
* @function MyAvatar.getAnimGraphOverrideUrl
* @returns {string} The URL of the override animation graph JSON file. ""
if there is no override animation
@@ -2294,7 +2294,7 @@ public slots:
/**jsdoc
* Sets the animation graph to use in preference to the default animation graph.
- * See {@link https://docs.highfidelity.com/create/avatars/custom-animations.html|Custom Avatar Animations} for
+ *
See {@link https://docs.projectathena.dev/create/avatars/custom-animations.html|Custom Avatar Animations} for
* information on animation graphs.
* @function MyAvatar.setAnimGraphOverrideUrl
* @param {string} url - The URL of the animation graph JSON file to use. Set to ""
to clear an override.
@@ -2303,7 +2303,7 @@ public slots:
/**jsdoc
* Gets the URL of animation graph (i.e., the avatar animation JSON) that's currently being used for avatar animations.
- * See {@link https://docs.highfidelity.com/create/avatars/custom-animations.html|Custom Avatar Animations} for
+ *
See {@link https://docs.projectathena.dev/create/avatars/custom-animations.html|Custom Avatar Animations} for
* information on animation graphs.
* @function MyAvatar.getAnimGraphUrl
* @returns {string} The URL of the current animation graph JSON file.
@@ -2314,7 +2314,7 @@ public slots:
/**jsdoc
* Sets the current animation graph (i.e., the avatar animation JSON) to use for avatar animations and makes it the default.
- * See {@link https://docs.highfidelity.com/create/avatars/custom-animations.html|Custom Avatar Animations} for
+ *
See {@link https://docs.projectathena.dev/create/avatars/custom-animations.html|Custom Avatar Animations} for
* information on animation graphs.
* @function MyAvatar.setAnimGraphUrl
* @param {string} url - The URL of the animation graph JSON file to use.
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
index 2c36a92b0f..cd1fc7c7fc 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
@@ -207,7 +207,7 @@ public:
/**jsdoc
* Gets the default rotation of a joint (in the current avatar) relative to its parent.
* For information on the joint hierarchy used, see
- * Avatar Standards.
+ * Avatar Standards.
* @function MyAvatar.getDefaultJointRotation
* @param {number} index - The joint index.
* @returns {Quat} The default rotation of the joint if the joint index is valid, otherwise {@link Quat(0)|Quat.IDENTITY}.
@@ -218,7 +218,7 @@ public:
* Gets the default translation of a joint (in the current 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.
+ * 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-renderer/src/avatars-renderer/ScriptAvatar.h b/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
index abc15ae11b..b5fdad078e 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/ScriptAvatar.h
@@ -87,7 +87,7 @@ 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.
+ * 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
@@ -99,7 +99,7 @@ public slots:
* 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.
+ * 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
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index 40e3a056da..fac23a5f96 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -796,7 +796,7 @@ public:
* @param {Quat} rotation - The rotation of the joint relative to its parent.
* @param {Vec3} translation - The translation of the joint relative to its parent, in model coordinates.
* @example Set your avatar to it's default T-pose for a while.
- *
+ *
* // Set all joint translations and rotations to defaults.
* var i, length, rotation, translation;
* for (i = 0, length = MyAvatar.getJointNames().length; i < length; i++) {
@@ -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.
@@ -904,7 +904,7 @@ public:
* @param {string} name - The name of the joint.
* @param {Quat} rotation - The rotation of the joint relative to its parent.
* @example Set your avatar to its default T-pose then rotate its right arm.
- *
+ *
* // Set all joint translations and rotations to defaults.
* var i, length, rotation, translation;
* for (i = 0, length = MyAvatar.getJointNames().length; i < length; i++) {
@@ -939,7 +939,7 @@ public:
* @param {Vec3} translation - The translation of the joint relative to its parent, in model coordinates.
* @example Stretch your avatar's neck. Depending on the avatar you are using, you will either see a gap between
* the head and body or you will see the neck stretched.
- *
+ *
* // Stretch your avatar's neck.
* MyAvatar.setJointTranslation("Neck", Vec3.multiply(2, MyAvatar.getJointTranslation("Neck")));
*
@@ -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.
@@ -1041,7 +1041,7 @@ public:
* @param {Quat[]} jointRotations - The rotations for all joints in the avatar. The values are in the same order as the
* array returned by {@link MyAvatar.getJointNames}, or {@link Avatar.getJointNames} if using the Avatar
API.
* @example Set your avatar to its default T-pose then rotate its right arm.
- *
+ *
* // Set all joint translations and rotations to defaults.
* var i, length, rotation, translation;
* for (i = 0, length = MyAvatar.getJointNames().length; i < length; i++) {
@@ -1138,7 +1138,7 @@ public:
* 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}.
+ * {@link https://docs.projectathena.dev/create/avatars/avatar-standards.html#blendshapes Avatar Standards}.
* @param {number} value - A value between 0.0
and 1.0
.
* @example Open your avatar's mouth wide.
* MyAvatar.hasScriptedBlendshapes = true;
diff --git a/libraries/avatars/src/ScriptAvatarData.h b/libraries/avatars/src/ScriptAvatarData.h
index 128bf9aef7..bddbf5f887 100644
--- a/libraries/avatars/src/ScriptAvatarData.h
+++ b/libraries/avatars/src/ScriptAvatarData.h
@@ -117,7 +117,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 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
@@ -129,7 +129,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 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}
@@ -139,7 +139,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 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
@@ -151,7 +151,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 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}
diff --git a/libraries/image/src/image/TextureProcessing.h b/libraries/image/src/image/TextureProcessing.h
index c1817a08a6..677d48c61f 100644
--- a/libraries/image/src/image/TextureProcessing.h
+++ b/libraries/image/src/image/TextureProcessing.h
@@ -33,7 +33,7 @@ namespace TextureUsage {
/**jsdoc
* Describes the type of texture.
* See also: {@link Material} and
- * {@link https://docs.highfidelity.com/create/3d-models/pbr-materials-guide.html|PBR Materials Guide}.
+ * {@link https://docs.projectathena.dev/create/3d-models/pbr-materials-guide.html|PBR Materials Guide}.
*
*
* Value | Name | Description |
diff --git a/libraries/midi/src/Midi.h b/libraries/midi/src/Midi.h
index 5b7c82d6da..986682d7f9 100644
--- a/libraries/midi/src/Midi.h
+++ b/libraries/midi/src/Midi.h
@@ -23,7 +23,7 @@
/**jsdoc
* The Midi
API provides the ability to connect Interface with musical instruments and other external or virtual
* devices via the MIDI protocol. For further information and examples, see the tutorial:
- * Use MIDI to Control Your Environment.
+ * Use MIDI to Control Your Environment.
*
* Note: Only works on Windows.
*
diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h
index 71af673e6c..4265390995 100644
--- a/libraries/script-engine/src/ScriptEngine.h
+++ b/libraries/script-engine/src/ScriptEngine.h
@@ -417,7 +417,7 @@ public:
/**jsdoc
* Provides access to methods or objects provided in an external JavaScript or JSON file.
- * See {@link https://docs.highfidelity.com/script/js-tips.html} for further details.
+ * See {@link https://docs.projectathena.dev/script/js-tips.html} for further details.
* @function Script.require
* @param {string} module - The module to use. May be a JavaScript file, a JSON file, or the name of a system module such
* as "appUi"
(i.e., the "appUi.js" system module JavaScript file).
diff --git a/libraries/script-engine/src/Vec3.h b/libraries/script-engine/src/Vec3.h
index 86df912d0e..a8fe51efe8 100644
--- a/libraries/script-engine/src/Vec3.h
+++ b/libraries/script-engine/src/Vec3.h
@@ -24,7 +24,7 @@
/**jsdoc
* The Vec3
API provides facilities for generating and manipulating 3-dimensional vectors. High Fidelity uses a
* right-handed Cartesian coordinate system where the y-axis is the "up" and the negative z-axis is the "front" direction.
- *
+ *
*
* @namespace Vec3
* @variation 0
From b816d7053a89c7485cb88a7230fa942ed025dd4e Mon Sep 17 00:00:00 2001
From: David Rowe
Date: Mon, 20 Jan 2020 21:07:33 +1300
Subject: [PATCH 03/13] Update models used in JSDoc examples
---
interface/src/avatar/MyAvatar.h | 10 +++++-----
libraries/avatars/src/AvatarData.h | 4 ++--
libraries/entities/src/EntityItemProperties.cpp | 4 ++--
.../graphics-scripting/GraphicsScriptingInterface.h | 4 ++--
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index 8ab532358b..6856e8b58c 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -665,7 +665,7 @@ public:
* @param {number} firstFrame - The frame to start the animation at.
* @param {number} lastFrame - The frame to end the animation at.
* @example Play a clapping animation on your avatar for three seconds.
- * var ANIM_URL = "https://s3.amazonaws.com/hifi-public/animations/ClapAnimations/ClapHands_Standing.fbx";
+ * var ANIM_URL = "https://apidocs.projectathena.dev/models/ClapHands_Standing.fbx";
* MyAvatar.overrideAnimation(ANIM_URL, 30, true, 0, 53);
* Script.setTimeout(function () {
* MyAvatar.restoreAnimation();
@@ -688,7 +688,7 @@ public:
* @param {number} firstFrame - The frame to start the animation at.
* @param {number} lastFrame - The frame to end the animation at.
* @example Override left hand animation for three seconds.
- * var ANIM_URL = "https://s3.amazonaws.com/hifi-public/animations/ClapAnimations/ClapHands_Standing.fbx";
+ * var ANIM_URL = "https://apidocs.projectathena.dev/models/ClapHands_Standing.fbx";
* MyAvatar.overrideHandAnimation(isLeft, ANIM_URL, 30, true, 0, 53);
* Script.setTimeout(function () {
* MyAvatar.restoreHandAnimation();
@@ -705,7 +705,7 @@ public:
* animation, this function has no effect.
* @function MyAvatar.restoreAnimation
* @example Play a clapping animation on your avatar for three seconds.
- * var ANIM_URL = "https://s3.amazonaws.com/hifi-public/animations/ClapAnimations/ClapHands_Standing.fbx";
+ * var ANIM_URL = "https://apidocs.projectathena.dev/models/ClapHands_Standing.fbx";
* MyAvatar.overrideAnimation(ANIM_URL, 30, true, 0, 53);
* Script.setTimeout(function () {
* MyAvatar.restoreAnimation();
@@ -722,7 +722,7 @@ public:
* @function MyAvatar.restoreHandAnimation
* @param isLeft {boolean} Set to true if using the left hand
* @example Override left hand animation for three seconds.
- * var ANIM_URL = "https://s3.amazonaws.com/hifi-public/animations/ClapAnimations/ClapHands_Standing.fbx";
+ * var ANIM_URL = "https://apidocs.projectathena.dev/models/ClapHands_Standing.fbx";
* MyAvatar.overrideHandAnimation(isLeft, ANIM_URL, 30, true, 0, 53);
* Script.setTimeout(function () {
* MyAvatar.restoreHandAnimation();
@@ -780,7 +780,7 @@ public:
* hanging at its sides when it is not moving, the avatar will stand and clap its hands. Note that just as it did before, as soon as the avatar
* starts to move, the animation will smoothly blend into the walk animation used by the "walkFwd" animation role.
* // An animation of the avatar clapping its hands while standing. Restore default after 30s.
- * var ANIM_URL = "https://s3.amazonaws.com/hifi-public/animations/ClapAnimations/ClapHands_Standing.fbx";
+ * var ANIM_URL = "https://apidocs.projectathena.dev/models/ClapHands_Standing.fbx";
* MyAvatar.overrideRoleAnimation("idleStand", ANIM_URL, 30, true, 0, 53);
* Script.setTimeout(function () {
* MyAvatar.restoreRoleAnimation();
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index fac23a5f96..2f595fab08 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -1274,7 +1274,7 @@ public:
* null
to remove all attachments.
* @deprecated This function is deprecated and will be removed. Use avatar entities instead.
* @example Remove a hat attachment if your avatar is wearing it.
- * var hatURL = "https://s3.amazonaws.com/hifi-public/tony/cowboy-hat.fbx";
+ * var hatURL = "https://apidocs.projectathena.dev/models/cowboy-hat.fbx";
* var attachments = MyAvatar.getAttachmentData();
*
* for (var i = 0; i < attachments.length; i++) {
@@ -1311,7 +1311,7 @@ public:
* @deprecated This function is deprecated and will be removed. Use avatar entities instead.
* @example Attach a cowboy hat to your avatar's head.
* var attachment = {
- * modelURL: "https://s3.amazonaws.com/hifi-public/tony/cowboy-hat.fbx",
+ * modelURL: "https://apidocs.projectathena.dev/models/cowboy-hat.fbx",
* jointName: "Head",
* translation: {"x": 0, "y": 0.25, "z": 0},
* rotation: {"x": 0, "y": 0, "z": 0, "w": 1},
diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp
index 1d476af22f..ebdbbc4397 100644
--- a/libraries/entities/src/EntityItemProperties.cpp
+++ b/libraries/entities/src/EntityItemProperties.cpp
@@ -1036,8 +1036,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
* type: "Model",
* position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 0.75, z: -2 })),
* rotation: MyAvatar.orientation,
- * modelURL: "http://content.highfidelity.com/seefo/production/puck-attach/vive_tracker_puck.obj",
- * dimensions: { x: 0.0945, y: 0.0921, z: 0.0423 },
+ * modelURL: "https://apidocs.projectathena.dev/models/cowboy-hat.fbx",
+ * dimensions: { x: 0.8569, y: 0.3960, z: 1.0744 },
* lifetime: 300 // Delete after 5 minutes.
* });
*/
diff --git a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h
index 9b56433bf6..ed3e207eaf 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h
@@ -87,8 +87,8 @@ public slots:
* type: "Model",
* position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(Camera.orientation, { x: -0.5, y: 0, z: -3 })),
* rotation: MyAvatar.orientation,
- * modelURL: "http://content.highfidelity.com/seefo/production/puck-attach/vive_tracker_puck.obj",
- * dimensions: { x: 0.945, y: 0.921, z: 0.423 },
+ * modelURL: "https://apidocs.projectathena.dev/models/cowboy-hat.fbx",
+ * dimensions: { x: 0.8569, y: 0.3960, z: 1.0744 },
* lifetime: 300 // Delete after 5 minutes.
* });
* var shapeEntityID = Entities.addEntity({
From 0666c3bbb109ba03b36e518f66161863706e0fb1 Mon Sep 17 00:00:00 2001
From: David Rowe
Date: Mon, 20 Jan 2020 21:31:50 +1300
Subject: [PATCH 04/13] Document that MyAvatar goto methods have safe landing
---
interface/src/avatar/MyAvatar.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index 6856e8b58c..0d018eb007 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -2051,7 +2051,8 @@ public slots:
float getGravity();
/**jsdoc
- * Moves the avatar to a new position and/or orientation in the domain, while taking into account Avatar leg-length.
+ * Moves the avatar to a new position and/or orientation in the domain, with safe landing, while taking into account avatar
+ * leg length.
* @function MyAvatar.goToFeetLocation
* @param {Vec3} position - The new position for the avatar, in world coordinates.
* @param {boolean} [hasOrientation=false] - Set to true
to set the orientation of the avatar.
@@ -2076,14 +2077,14 @@ public slots:
bool hasOrientation = false, const glm::quat& newOrientation = glm::quat(),
bool shouldFaceLocation = false, bool withSafeLanding = true);
/**jsdoc
- * Moves the avatar to a new position and (optional) orientation in the domain.
+ * Moves the avatar to a new position and (optional) orientation in the domain, with safe landing.
* @function MyAvatar.goToLocation
* @param {MyAvatar.GoToProperties} target - The goto target.
*/
void goToLocation(const QVariant& properties);
/**jsdoc
- * Moves the avatar to a new position and then enables collisions.
+ * Moves the avatar to a new position, with safe landing, and enables collisions.
* @function MyAvatar.goToLocationAndEnableCollisions
* @param {Vec3} position - The new position for the avatar, in world coordinates.
*/
From 0588fd3f4f522c6ccbf1b27acbd164f45e876815 Mon Sep 17 00:00:00 2001
From: Kasen IO
Date: Tue, 7 Apr 2020 02:11:29 -0400
Subject: [PATCH 05/13] API docs rebranded to Vircadia.
---
tools/jsdoc/api-mainpage.md | 4 ++--
tools/jsdoc/hifi-jsdoc-template/publish.js | 2 +-
.../static/images/fav-icon.ico | Bin 135615 -> 125193 bytes
.../static/images/project-athena-logo.png | Bin 218170 -> 0 bytes
.../static/images/vircadia-logo-1880.png | Bin 0 -> 54627 bytes
.../hifi-jsdoc-template/tmpl/layout.tmpl | 4 ++--
6 files changed, 5 insertions(+), 5 deletions(-)
delete mode 100644 tools/jsdoc/hifi-jsdoc-template/static/images/project-athena-logo.png
create mode 100644 tools/jsdoc/hifi-jsdoc-template/static/images/vircadia-logo-1880.png
diff --git a/tools/jsdoc/api-mainpage.md b/tools/jsdoc/api-mainpage.md
index 57a518dd81..d478aeba37 100644
--- a/tools/jsdoc/api-mainpage.md
+++ b/tools/jsdoc/api-mainpage.md
@@ -1,4 +1,4 @@
-The Project Athena JavaScript API lets content creators and developers create new experiences and transform virtual worlds within the High Fidelity metaverse. With it, you can build great content, customize avatars, play audio and so much more.
+The Vircadia JavaScript API lets content creators and developers create new experiences and transform virtual worlds within the High Fidelity metaverse. With it, you can build great content, customize avatars, play audio and so much more.
You are most likely to interact with these APIs:
@@ -6,4 +6,4 @@ You are most likely to interact with these APIs:
* The **[AvatarList](AvatarList.html)**, **[MyAvatar](MyAvatar.html)**, and **[Avatar](Avatar.html)** namespaces affect your personal avatars, and lets you get information on other people's avatars.
* The **[Script](Script.html)** namespace lets you to connect callbacks from your client to script, such as functionality that is dependent on time (`Script.update`, `Script.setTimeout`, `Script.setInterval`, etc), connect paths relatively to assets (`Script.resolvePath`), refer to other scripts (`Script.require`, `Script.include`), or connect functions to events which occur when the script is turned off (`Script.scriptEnding`).
-To learn more about using High Fidelity and exploring the metaverse, visit the [Project Athena Documentation](https://docs.projectathena.dev).
+To learn more about using High Fidelity and exploring the metaverse, visit the [Vircadia Documentation](https://docs.vircadia.dev).
diff --git a/tools/jsdoc/hifi-jsdoc-template/publish.js b/tools/jsdoc/hifi-jsdoc-template/publish.js
index 1bafe0eec5..4ca4eb469e 100644
--- a/tools/jsdoc/hifi-jsdoc-template/publish.js
+++ b/tools/jsdoc/hifi-jsdoc-template/publish.js
@@ -697,7 +697,7 @@ exports.publish = function(taffyData, opts, tutorials) {
var files = find({kind: 'file'});
var packages = find({kind: 'package'});
- generate('', 'Project Athena API Reference',
+ generate('', 'Vircadia API Reference',
packages.concat(
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
).concat(files),
diff --git a/tools/jsdoc/hifi-jsdoc-template/static/images/fav-icon.ico b/tools/jsdoc/hifi-jsdoc-template/static/images/fav-icon.ico
index da7b47cbbad0b448154a27717e1578fe885d04c5..5c09071822e3b748b25d9429645b1947cf7388ef 100644
GIT binary patch
literal 125193
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