From 90d56bc1084e0af89697a5fbe7df8bf7b172f761 Mon Sep 17 00:00:00 2001 From: TonyPeng Date: Tue, 15 Jul 2014 16:10:13 -0700 Subject: [PATCH 1/3] Use the number of local lights to update new avatars instead of checking hashes. --- examples/avatarLocalLight.js | 18 ++++-------------- interface/src/avatar/Avatar.cpp | 10 ++++------ interface/src/avatar/Avatar.h | 3 ++- interface/src/avatar/AvatarManager.cpp | 11 +++++++++++ interface/src/avatar/AvatarManager.h | 1 + 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/examples/avatarLocalLight.js b/examples/avatarLocalLight.js index 225ed4d755..025196e0b0 100644 --- a/examples/avatarLocalLight.js +++ b/examples/avatarLocalLight.js @@ -17,7 +17,6 @@ var currentSelection = 0; var currentNumLights = 1; var maxNumLights = 2; var currentNumAvatars = 0; -var avatarHashIDs = []; function keyPressEvent(event) { @@ -142,23 +141,14 @@ function updateLocalLights() // new avatars, so add lights var numAvatars = AvatarManager.getNumAvatars(); if (numAvatars != currentNumAvatars) { - + for (var i = 0; i < numAvatars; i++) { var id = AvatarManager.getAvatarHashKey(i); - // check if avatar has already been registered - var hasRegistered = false; - for (var j = 0; j < numAvatars; j++) { - if (avatarHashIDs[j] == id) { - hasRegistered = true; - break; - } - } + var numLights = AvatarManager.getNumLightsInAvatar(i); - // add new id and set light params - if (!hasRegistered) { - - avatarHashIDs.push(id); + // check if new avatar has lights + if (numLights <= 0) { AvatarManager.addAvatarLocalLight(i); // set color and direction for new avatar diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 461956b3c7..aff0a4a5c0 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -928,27 +928,25 @@ void Avatar::setShowDisplayName(bool showDisplayName) { void Avatar::setLocalLightDirection(const glm::vec3& direction, int lightIndex) { _localLightDirections[lightIndex] = direction; - qDebug( "set light %d direction ( %f, %f, %f )\n", lightIndex, direction.x, direction.y, direction.z ); } void Avatar::setLocalLightColor(const glm::vec3& color, int lightIndex) { _localLightColors[lightIndex] = color; - qDebug( "set light %d color ( %f, %f, %f )\n", lightIndex, color.x, color.y, color.z ); } void Avatar::addLocalLight() { if (_numLocalLights + 1 <= MAX_LOCAL_LIGHTS) { ++_numLocalLights; } - - qDebug("ADD LOCAL LIGHT (numLocalLights = %d)\n", _numLocalLights); } void Avatar::removeLocalLight() { if (_numLocalLights - 1 >= 0) { --_numLocalLights; } - - qDebug("REMOVE LOCAL LIGHT (numLocalLights = %d)\n", _numLocalLights); +} + +int Avatar::getNumLocalLights() { + return _numLocalLights; } diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 2d85aa70a5..0550c4aa04 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -162,7 +162,8 @@ public slots: void setLocalLightDirection(const glm::vec3& direction, int lightIndex); void setLocalLightColor(const glm::vec3& color, int lightIndex); void addLocalLight(); - void removeLocalLight(); + void removeLocalLight(); + int getNumLocalLights(); signals: void collisionWithAvatar(const QUuid& myUUID, const QUuid& theirUUID, const CollisionInfo& collision); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index bc84aa6b87..128735a24e 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -200,6 +200,17 @@ void AvatarManager::setAvatarLightColor(const glm::vec3& color, int lightIndex, } } +int AvatarManager::getNumLightsInAvatar(int avatarIndex) { + int numLights = 0; + + Avatar* avatar = getAvatarFromIndex(avatarIndex); + if (avatar) { + numLights = avatar->getNumLocalLights(); + } + + return numLights; +} + int AvatarManager::getNumAvatars() { return _avatarHash.count(); } diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index f2b5904883..d4b404e3d5 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -42,6 +42,7 @@ public slots: void setAvatarLightDirection(const glm::vec3& direction, int lightIndex, int avatarIndex); void removeAvatarLocalLight(int avatarIndex); void addAvatarLocalLight(int avatarIndex); + int getNumLightsInAvatar(int avatarIndex); int getNumAvatars(); QString getAvatarHashKey(int index); From 317a08fc603429df1f351e1260eed0672c3db116 Mon Sep 17 00:00:00 2001 From: TonyPeng Date: Wed, 16 Jul 2014 09:44:05 -0700 Subject: [PATCH 2/3] Draw local light stats. --- interface/src/avatar/Avatar.cpp | 9 +++++++++ interface/src/avatar/Avatar.h | 2 ++ interface/src/ui/Stats.cpp | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index aff0a4a5c0..b5590dec09 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -950,3 +950,12 @@ int Avatar::getNumLocalLights() { return _numLocalLights; } +glm::vec3 Avatar::getLocalLightDirection(int lightIndex) { + return _localLightDirections[lightIndex]; +} + +glm::vec3 Avatar::getLocalLightColor(int lightIndex) { + return _localLightColors[lightIndex]; +} + + diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 0550c4aa04..d2f3ee6ab4 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -164,6 +164,8 @@ public slots: void addLocalLight(); void removeLocalLight(); int getNumLocalLights(); + glm::vec3 getLocalLightDirection(int lightIndex); + glm::vec3 getLocalLightColor(int lightIndex); signals: void collisionWithAvatar(const QUuid& myUUID, const QUuid& theirUUID, const CollisionInfo& collision); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index d865fc8004..8789a332c9 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -812,5 +812,26 @@ void Stats::display( drawText(horizontalOffset, verticalOffset, 0.10f, 0.f, 2.f, reflectionsStatus, color); } + + // draw local light stats + int numLocalLights = myAvatar->getNumLocalLights(); + verticalOffset = 400; + horizontalOffset = 20; + + char buffer[128]; + for (int i = 0; i < numLocalLights; i++) { + glm::vec3 lightDirection = myAvatar->getLocalLightDirection(i); + snprintf(buffer, sizeof(buffer), "Light %d direction (%.2f, %.2f, %.2f)", i, lightDirection.x, lightDirection.y, lightDirection.z); + drawText(horizontalOffset, verticalOffset, scale, rotation, font, buffer, color); + + verticalOffset += STATS_PELS_PER_LINE; + + glm::vec3 lightColor = myAvatar->getLocalLightColor(i); + snprintf(buffer, sizeof(buffer), "Light %d color (%.2f, %.2f, %.2f)", i, lightColor.x, lightColor.y, lightColor.z); + drawText(horizontalOffset, verticalOffset, scale, rotation, font, buffer, color); + + verticalOffset += STATS_PELS_PER_LINE; + } + } From 7aae85833b7b648bce3c38241dd5c306d407e663 Mon Sep 17 00:00:00 2001 From: TonyPeng Date: Wed, 16 Jul 2014 10:08:49 -0700 Subject: [PATCH 3/3] Take out getter for avatar's hash key. --- examples/avatarLocalLight.js | 17 ++++++++--------- interface/src/avatar/AvatarManager.cpp | 8 -------- interface/src/avatar/AvatarManager.h | 1 - 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/examples/avatarLocalLight.js b/examples/avatarLocalLight.js index 025196e0b0..5768388b45 100644 --- a/examples/avatarLocalLight.js +++ b/examples/avatarLocalLight.js @@ -17,6 +17,7 @@ var currentSelection = 0; var currentNumLights = 1; var maxNumLights = 2; var currentNumAvatars = 0; +var changeDelta = 0.1; function keyPressEvent(event) { @@ -39,7 +40,7 @@ function keyPressEvent(event) { print("light selection = " + currentSelection); } else if (event.text == "5" ) { - localLightColors[currentSelection].x += 0.01; + localLightColors[currentSelection].x += changeDelta; if ( localLightColors[currentSelection].x > 1.0) { localLightColors[currentSelection].x = 0.0; } @@ -48,7 +49,7 @@ function keyPressEvent(event) { print("CHANGE RED light " + currentSelection + " color (" + localLightColors[currentSelection].x + ", " + localLightColors[currentSelection].y + ", " + localLightColors[currentSelection].z + " )" ); } else if (event.text == "6" ) { - localLightColors[currentSelection].y += 0.01; + localLightColors[currentSelection].y += changeDelta; if ( localLightColors[currentSelection].y > 1.0) { localLightColors[currentSelection].y = 0.0; } @@ -57,7 +58,7 @@ function keyPressEvent(event) { print("CHANGE GREEN light " + currentSelection + " color (" + localLightColors[currentSelection].x + ", " + localLightColors[currentSelection].y + ", " + localLightColors[currentSelection].z + " )" ); } else if (event.text == "7" ) { - localLightColors[currentSelection].z += 0.01; + localLightColors[currentSelection].z += changeDelta; if ( localLightColors[currentSelection].z > 1.0) { localLightColors[currentSelection].z = 0.0; } @@ -66,7 +67,7 @@ function keyPressEvent(event) { print("CHANGE BLUE light " + currentSelection + " color (" + localLightColors[currentSelection].x + ", " + localLightColors[currentSelection].y + ", " + localLightColors[currentSelection].z + " )" ); } else if (event.text == "8" ) { - localLightDirections[currentSelection].x += 0.01; + localLightDirections[currentSelection].x += changeDelta; if (localLightDirections[currentSelection].x > 1.0) { localLightDirections[currentSelection].x = -1.0; } @@ -75,7 +76,7 @@ function keyPressEvent(event) { print("PLUS X light " + currentSelection + " direction (" + localLightDirections[currentSelection].x + ", " + localLightDirections[currentSelection].y + ", " + localLightDirections[currentSelection].z + " )" ); } else if (event.text == "9" ) { - localLightDirections[currentSelection].x -= 0.01; + localLightDirections[currentSelection].x -= changeDelta; if (localLightDirections[currentSelection].x < -1.0) { localLightDirections[currentSelection].x = 1.0; } @@ -84,7 +85,7 @@ function keyPressEvent(event) { print("MINUS X light " + currentSelection + " direction (" + localLightDirections[currentSelection].x + ", " + localLightDirections[currentSelection].y + ", " + localLightDirections[currentSelection].z + " )" ); } else if (event.text == "0" ) { - localLightDirections[currentSelection].y += 0.01; + localLightDirections[currentSelection].y += changeDelta; if (localLightDirections[currentSelection].y > 1.0) { localLightDirections[currentSelection].y = -1.0; } @@ -93,7 +94,7 @@ function keyPressEvent(event) { print("PLUS Y light " + currentSelection + " direction (" + localLightDirections[currentSelection].x + ", " + localLightDirections[currentSelection].y + ", " + localLightDirections[currentSelection].z + " )" ); } else if (event.text == "-" ) { - localLightDirections[currentSelection].y -= 0.01; + localLightDirections[currentSelection].y -= changeDelta; if (localLightDirections[currentSelection].y < -1.0) { localLightDirections[currentSelection].y = 1.0; } @@ -143,8 +144,6 @@ function updateLocalLights() if (numAvatars != currentNumAvatars) { for (var i = 0; i < numAvatars; i++) { - var id = AvatarManager.getAvatarHashKey(i); - var numLights = AvatarManager.getNumLightsInAvatar(i); // check if new avatar has lights diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 128735a24e..c172df5de6 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -214,11 +214,3 @@ int AvatarManager::getNumLightsInAvatar(int avatarIndex) { int AvatarManager::getNumAvatars() { return _avatarHash.count(); } - -QString AvatarManager::getAvatarHashKey(int index) { - QString id = ((_avatarHash.keys())[index]).toString(); - std::string idString = id.toStdString(); - return id; -} - - diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index d4b404e3d5..e6f058c0ab 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -44,7 +44,6 @@ public slots: void addAvatarLocalLight(int avatarIndex); int getNumLightsInAvatar(int avatarIndex); int getNumAvatars(); - QString getAvatarHashKey(int index); private: AvatarManager(const AvatarManager& other);