diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index aadc8ee268..ccfa629fea 100755
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -184,6 +184,7 @@ class MyAvatar : public Avatar {
* @property {Mat4} controllerLeftHandMatrix Read-only.
* @property {Mat4} controllerRightHandMatrix Read-only.
* @property {number} sensorToWorldScale Read-only.
+ * @property {boolean} hasPriority - is the avatar in a Hero zone? Read-only
*/
// FIXME: `glm::vec3 position` is not accessible from QML, so this exposes position in a QML-native type
Q_PROPERTY(QVector3D qmlPosition READ getQmlPosition)
diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp
index 26407c3564..3355228eea 100755
--- a/libraries/avatars/src/AvatarData.cpp
+++ b/libraries/avatars/src/AvatarData.cpp
@@ -1143,10 +1143,11 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
// we store the hand state as well as other items in a shared bitset. The hand state is an octal, but is split
// into two sections to maintain backward compatibility. The bits are ordered as such (0-7 left to right).
// AA 6/1/18 added three more flags bits 8,9, and 10 for procedural audio, blink, and eye saccade enabled
- // +---+-----+-----+--+--+--+--+-----+
- // |x,x|H0,H1|x,x,x|H2|Au|Bl|Ey|xxxxx|
- // +---+-----+-----+--+--+--+--+-----+
+ // +---+-----+-----+--+--+--+--+--+----+
+ // |x,x|H0,H1|x,x,x|H2|Au|Bl|Ey|He|xxxx|
+ // +---+-----+-----+--+--+--+--+--+----+
// Hand state - H0,H1,H2 is found in the 3rd, 4th, and 8th bits
+ // Hero-avatar status (He) - 12th bit
auto newHandState = getSemiNibbleAt(bitItems, HAND_STATE_START_BIT)
+ (oneAtBit16(bitItems, HAND_STATE_FINGER_POINTING_BIT) ? IS_FINGER_POINTING_FLAG : 0);
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index 95bbcbeb16..424384c15e 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -453,6 +453,8 @@ class AvatarData : public QObject, public SpatiallyNestable {
Q_PROPERTY(float sensorToWorldScale READ getSensorToWorldScale)
+ Q_PROPERTY(bool hasPriority READ getHasPriority)
+
public:
virtual QString getName() const override { return QString("Avatar:") + _displayName; }
diff --git a/libraries/avatars/src/ScriptAvatarData.cpp b/libraries/avatars/src/ScriptAvatarData.cpp
index a716a40ad8..18717c8ca3 100644
--- a/libraries/avatars/src/ScriptAvatarData.cpp
+++ b/libraries/avatars/src/ScriptAvatarData.cpp
@@ -343,6 +343,14 @@ glm::mat4 ScriptAvatarData::getControllerRightHandMatrix() const {
// END
//
+bool ScriptAvatarData::getHasPriority() const {
+ if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
+ return sharedAvatarData->getHasPriority();
+ } else {
+ return false;
+ }
+}
+
glm::quat ScriptAvatarData::getAbsoluteJointRotationInObjectFrame(int index) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getAbsoluteJointRotationInObjectFrame(index);
diff --git a/libraries/avatars/src/ScriptAvatarData.h b/libraries/avatars/src/ScriptAvatarData.h
index 91bac61728..01f7ff360a 100644
--- a/libraries/avatars/src/ScriptAvatarData.h
+++ b/libraries/avatars/src/ScriptAvatarData.h
@@ -68,6 +68,8 @@ class ScriptAvatarData : public QObject {
Q_PROPERTY(glm::mat4 controllerLeftHandMatrix READ getControllerLeftHandMatrix)
Q_PROPERTY(glm::mat4 controllerRightHandMatrix READ getControllerRightHandMatrix)
+ Q_PROPERTY(bool hasPriority READ getHasPriority)
+
public:
ScriptAvatarData(AvatarSharedPointer avatarData);
@@ -133,6 +135,8 @@ public:
glm::mat4 getControllerLeftHandMatrix() const;
glm::mat4 getControllerRightHandMatrix() const;
+ bool getHasPriority() const;
+
signals:
void displayNameChanged();
void sessionDisplayNameChanged();