diff --git a/examples/lookWithMouse.js b/examples/lookWithMouse.js
index 70a98c0733..470a56bd63 100644
--- a/examples/lookWithMouse.js
+++ b/examples/lookWithMouse.js
@@ -86,4 +86,3 @@ MyAvatar.bodyRoll = 0;
// would be nice to change to update
Script.update.connect(update);
-Script.scriptEnding.connect(scriptEnding);
diff --git a/examples/progress.js b/examples/progress.js
index 6ee53c55e6..57a1fd1a07 100644
--- a/examples/progress.js
+++ b/examples/progress.js
@@ -13,9 +13,13 @@
(function () {
- var progress = 100, // %
+ var rawProgress = 100, // % raw value.
+ displayProgress = 100, // % smoothed value to display.
+ DISPLAY_PROGRESS_MINOR_MAXIMUM = 8, // % displayed progress bar goes up to while 0% raw progress.
+ DISPLAY_PROGRESS_MINOR_INCREMENT = 0.1, // % amount to increment display value each update when 0% raw progress.
+ DISPLAY_PROGRESS_MAJOR_INCREMENT = 5, // % maximum amount to increment display value when >0% raw progress.
alpha = 0.0,
- alphaDelta = 0.0, // > 0 if fading in; < 0 if fading out/
+ alphaDelta = 0.0, // > 0 if fading in; < 0 if fading out.
ALPHA_DELTA_IN = 0.15,
ALPHA_DELTA_OUT = -0.02,
fadeTimer = null,
@@ -23,18 +27,19 @@
fadeWaitTimer = null,
FADE_OUT_WAIT = 1000, // Wait before starting to fade out after progress 100%.
visible = false,
- BAR_WIDTH = 320, // Nominal dimension of SVG in pixels of visible portion (half) of the bar.
- BAR_HEIGHT = 20,
+ BAR_WIDTH = 480, // Dimension of SVG in pixels of visible portion (half) of the bar.
+ BAR_HEIGHT = 30,
BAR_URL = "http://hifi-public.s3.amazonaws.com/images/progress-bar.svg",
- BACKGROUND_WIDTH = 360,
- BACKGROUND_HEIGHT = 60,
- BACKGROUND_URL = "http://hifi-public.s3.amazonaws.com/images/progress-bar-background.svg",
+ BACKGROUND_WIDTH = 540,
+ BACKGROUND_HEIGHT = 90,
+ BACKGROUND_URL = "http://ctrlaltstudio.com/hifi/progress-bar-background.svg",
+ //BACKGROUND_URL = "http://hifi-public.s3.amazonaws.com/images/progress-bar-background.svg",
isOnHMD = false,
windowWidth = 0,
windowHeight = 0,
background2D = {},
bar2D = {},
- SCALE_2D = 0.55, // Scale the SVGs for 2D display.
+ SCALE_2D = 0.35, // Scale the SVGs for 2D display.
background3D = {},
bar3D = {},
ENABLE_VR_MODE_MENU_ITEM = "Enable VR Mode",
@@ -43,7 +48,7 @@
PROGRESS_3D_ELEVATION = -0.8, // Height of top middle of top notification relative to avatar eyes.
PROGRESS_3D_YAW = 0.0, // Degrees relative to notifications direction.
PROGRESS_3D_PITCH = -60.0, // Degrees from vertical.
- SCALE_3D = 0.0017, // Scale the bar SVG for 3D display.
+ SCALE_3D = 0.0011, // Scale the bar SVG for 3D display.
BACKGROUND_3D_SIZE = { x: 0.76, y: 0.08 }, // Match up with the 3D background with those of notifications.js notices.
BACKGROUND_3D_COLOR = { red: 2, green: 2, blue: 2 },
BACKGROUND_3D_ALPHA = 0.7;
@@ -89,56 +94,15 @@
function onDownloadInfoChanged(info) {
var i;
- // Calculate progress
+ // Update raw progress value
if (info.downloading.length + info.pending === 0) {
- progress = 100;
+ rawProgress = 100;
} else {
- progress = 0;
+ rawProgress = 0;
for (i = 0; i < info.downloading.length; i += 1) {
- progress += info.downloading[i];
+ rawProgress += info.downloading[i];
}
- progress = progress / (info.downloading.length + info.pending);
- }
-
- // Update state
- if (!visible) { // Not visible because no recent downloads
- if (progress < 100) { // Have started downloading so fade in
- visible = true;
- alphaDelta = ALPHA_DELTA_IN;
- fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
- }
- } else if (alphaDelta !== 0.0) { // Fading in or out
- if (alphaDelta > 0) {
- if (progress === 100) { // Was donloading but now have finished so fade out
- alphaDelta = ALPHA_DELTA_OUT;
- }
- } else {
- if (progress < 100) { // Was finished downloading but have resumed so fade in
- alphaDelta = ALPHA_DELTA_IN;
- }
- }
- } else { // Fully visible because downloading or recently so
- if (fadeWaitTimer === null) {
- if (progress === 100) { // Was downloading but have finished so fade out soon
- fadeWaitTimer = Script.setTimeout(function () {
- alphaDelta = ALPHA_DELTA_OUT;
- fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
- fadeWaitTimer = null;
- }, FADE_OUT_WAIT);
- }
- } else {
- if (progress < 100) { // Was finished and waiting to fade out but have resumed downloading so don't fade out
- Script.clearInterval(fadeWaitTimer);
- fadeWaitTimer = null;
- }
- }
- }
-
- // Update progress bar
- if (visible) {
- Overlays.editOverlay(isOnHMD ? bar3D.overlay : bar2D.overlay, {
- subImage: { x: BAR_WIDTH * (1 - progress / 100), y: 0, width: BAR_WIDTH, height: BAR_HEIGHT }
- });
+ rawProgress = rawProgress / (info.downloading.length + info.pending);
}
}
@@ -200,7 +164,58 @@
createOverlays();
}
+ // Calculate progress value to display
+ if (rawProgress === 0 && displayProgress <= DISPLAY_PROGRESS_MINOR_MAXIMUM) {
+ displayProgress = Math.min(displayProgress + DISPLAY_PROGRESS_MINOR_INCREMENT, DISPLAY_PROGRESS_MINOR_MAXIMUM);
+ } else if (rawProgress < displayProgress) {
+ displayProgress = rawProgress;
+ } else if (rawProgress > displayProgress) {
+ displayProgress = Math.min(rawProgress, displayProgress + DISPLAY_PROGRESS_MAJOR_INCREMENT);
+ } // else (rawProgress === displayProgress); do nothing.
+
+ // Update state
+ if (!visible) { // Not visible because no recent downloads
+ if (displayProgress < 100) { // Have started downloading so fade in
+ visible = true;
+ alphaDelta = ALPHA_DELTA_IN;
+ fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
+ }
+ } else if (alphaDelta !== 0.0) { // Fading in or out
+ if (alphaDelta > 0) {
+ if (displayProgress === 100) { // Was downloading but now have finished so fade out
+ alphaDelta = ALPHA_DELTA_OUT;
+ }
+ } else {
+ if (displayProgress < 100) { // Was finished downloading but have resumed so fade in
+ alphaDelta = ALPHA_DELTA_IN;
+ }
+ }
+ } else { // Fully visible because downloading or recently so
+ if (fadeWaitTimer === null) {
+ if (displayProgress === 100) { // Was downloading but have finished so fade out soon
+ fadeWaitTimer = Script.setTimeout(function () {
+ alphaDelta = ALPHA_DELTA_OUT;
+ fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
+ fadeWaitTimer = null;
+ }, FADE_OUT_WAIT);
+ }
+ } else {
+ if (displayProgress < 100) { // Was finished and waiting to fade out but have resumed so don't fade out
+ Script.clearInterval(fadeWaitTimer);
+ fadeWaitTimer = null;
+ }
+ }
+ }
+
if (visible) {
+
+ // Update progress bar
+ Overlays.editOverlay(isOnHMD ? bar3D.overlay : bar2D.overlay, {
+ visible: visible,
+ subImage: { x: BAR_WIDTH * (1 - displayProgress / 100), y: 0, width: BAR_WIDTH, height: BAR_HEIGHT }
+ });
+
+ // Update position
if (isOnHMD) {
// Update 3D overlays to maintain positions relative to avatar
eyePosition = MyAvatar.getDefaultEyePosition();
diff --git a/interface/resources/icons/start-script.svg b/interface/resources/icons/start-script.svg
index 86354a555d..1401853fe4 100644
--- a/interface/resources/icons/start-script.svg
+++ b/interface/resources/icons/start-script.svg
@@ -536,22 +536,5 @@
height="44.57473"
x="84.498352"
y="1050.0748" />
-
-
-
-
diff --git a/interface/src/audio/AudioScope.cpp b/interface/src/audio/AudioScope.cpp
index 45820e2393..8cc27341d6 100644
--- a/interface/src/audio/AudioScope.cpp
+++ b/interface/src/audio/AudioScope.cpp
@@ -230,7 +230,7 @@ int AudioScope::addSilenceToScope(QByteArray* byteArray, int frameOffset, int si
int samplesToBufferEnd = _samplesPerScope - frameOffset;
if (silentSamples > samplesToBufferEnd) {
memset(destination + frameOffset, 0, samplesToBufferEnd * sizeof(int16_t));
- memset(destination, 0, silentSamples - samplesToBufferEnd * sizeof(int16_t));
+ memset(destination, 0, (silentSamples - samplesToBufferEnd) * sizeof(int16_t));
} else {
memset(destination + frameOffset, 0, silentSamples * sizeof(int16_t));
}
diff --git a/libraries/audio/src/AudioEditBuffer.h b/libraries/audio/src/AudioEditBuffer.h
index b773fedfb8..66639f20bb 100644
--- a/libraries/audio/src/AudioEditBuffer.h
+++ b/libraries/audio/src/AudioEditBuffer.h
@@ -23,8 +23,8 @@ public:
bool getZeroCrossing(uint32_t start, bool direction, float32_t epsilon, uint32_t& zero);
- void linearFade(uint32_t start, uint32_t stop, bool slope);
- void exponentialFade(uint32_t start, uint32_t stop, bool slope);
+ void linearFade(uint32_t start, uint32_t stop, bool increasing);
+ void exponentialFade(uint32_t start, uint32_t stop, bool increasing);
};
template< typename T >
@@ -74,7 +74,7 @@ inline bool AudioEditBuffer::getZeroCrossing(uint32_t start, bool direction,
}
template< typename T >
-inline void AudioEditBuffer::linearFade(uint32_t start, uint32_t stop, bool slope) {
+inline void AudioEditBuffer::linearFade(uint32_t start, uint32_t stop, bool increasing) {
if (start >= stop || start > this->_frameCount || stop > this->_frameCount ) {
return;
@@ -84,7 +84,7 @@ inline void AudioEditBuffer::linearFade(uint32_t start, uint32_t stop, bool s
float32_t delta;
float32_t gain;
- if (slope) { // 0.0 to 1.0f in delta increments
+ if (increasing) { // 0.0 to 1.0f in delta increments
delta = 1.0f / (float32_t)count;
gain = 0.0f;
} else { // 1.0f to 0.0f in delta increments
@@ -95,13 +95,13 @@ inline void AudioEditBuffer::linearFade(uint32_t start, uint32_t stop, bool s
for (uint32_t i = start; i < stop; ++i) {
for (uint32_t j = 0; j < this->_channelCount; ++j) {
this->_frameBuffer[j][i] *= gain;
- gain += delta;
}
+ gain += delta;
}
}
template< typename T >
-inline void AudioEditBuffer::exponentialFade(uint32_t start, uint32_t stop, bool slope) {
+inline void AudioEditBuffer::exponentialFade(uint32_t start, uint32_t stop, bool increasing) {
// TBD
}
diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp
index 43f4dda565..c8c454ff14 100644
--- a/libraries/networking/src/LimitedNodeList.cpp
+++ b/libraries/networking/src/LimitedNodeList.cpp
@@ -310,20 +310,23 @@ int LimitedNodeList::updateNodeWithDataFromPacket(const SharedNodePointer& match
matchingNode->setLastHeardMicrostamp(usecTimestampNow());
- if (!matchingNode->getLinkedData() && linkedDataCreateCallback) {
+ NodeData* linkedData = matchingNode->getLinkedData();
+ if (!linkedData && linkedDataCreateCallback) {
linkedDataCreateCallback(matchingNode.data());
}
-
- QMutexLocker linkedDataLocker(&matchingNode->getLinkedData()->getMutex());
-
- return matchingNode->getLinkedData()->parseData(packet);
+
+ if (linkedData) {
+ QMutexLocker linkedDataLocker(&linkedData->getMutex());
+ return linkedData->parseData(packet);
+ }
+ return 0;
}
int LimitedNodeList::findNodeAndUpdateWithDataFromPacket(const QByteArray& packet) {
SharedNodePointer matchingNode = sendingNodeForPacket(packet);
if (matchingNode) {
- updateNodeWithDataFromPacket(matchingNode, packet);
+ return updateNodeWithDataFromPacket(matchingNode, packet);
}
// we weren't able to match the sender address to the address we have for this node, unlock and don't parse
diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp
index d35e11a1c3..f70c2d9b3c 100644
--- a/libraries/networking/src/NodeList.cpp
+++ b/libraries/networking/src/NodeList.cpp
@@ -347,7 +347,7 @@ void NodeList::handleICEConnectionToDomainServer() {
qDebug() << "Sending ping packets to establish connectivity with domain-server with ID"
<< uuidStringWithoutCurlyBraces(_domainHandler.getICEDomainID());
- // send the ping packet to the local and public sockets for this nodfe
+ // send the ping packet to the local and public sockets for this node
QByteArray localPingPacket = constructPingPacket(PingType::Local, false, _domainHandler.getICEClientID());
writeUnverifiedDatagram(localPingPacket, _domainHandler.getICEPeer().getLocalSocket());