mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 11:41:17 +02:00
Merge branch 'master' into M18586
This commit is contained in:
commit
6ccd73ea47
10 changed files with 92 additions and 23 deletions
|
@ -131,7 +131,7 @@ Rectangle {
|
||||||
print("Marketplace item tester unsupported assetType " + assetType);
|
print("Marketplace item tester unsupported assetType " + assetType);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"trash": function(){
|
"trash": function(resource, assetType){
|
||||||
if ("application" === assetType) {
|
if ("application" === assetType) {
|
||||||
Commerce.uninstallApp(resource);
|
Commerce.uninstallApp(resource);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#define hifi_AudioHRTF_h
|
#define hifi_AudioHRTF_h
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static const int HRTF_AZIMUTHS = 72; // 360 / 5-degree steps
|
static const int HRTF_AZIMUTHS = 72; // 360 / 5-degree steps
|
||||||
static const int HRTF_TAPS = 64; // minimum-phase FIR coefficients
|
static const int HRTF_TAPS = 64; // minimum-phase FIR coefficients
|
||||||
|
@ -56,6 +57,27 @@ public:
|
||||||
void setGainAdjustment(float gain) { _gainAdjust = HRTF_GAIN * gain; };
|
void setGainAdjustment(float gain) { _gainAdjust = HRTF_GAIN * gain; };
|
||||||
float getGainAdjustment() { return _gainAdjust; }
|
float getGainAdjustment() { return _gainAdjust; }
|
||||||
|
|
||||||
|
// clear internal state, but retain settings
|
||||||
|
void reset() {
|
||||||
|
// FIR history
|
||||||
|
memset(_firState, 0, sizeof(_firState));
|
||||||
|
|
||||||
|
// integer delay history
|
||||||
|
memset(_delayState, 0, sizeof(_delayState));
|
||||||
|
|
||||||
|
// biquad history
|
||||||
|
memset(_bqState, 0, sizeof(_bqState));
|
||||||
|
|
||||||
|
// parameter history
|
||||||
|
_azimuthState = 0.0f;
|
||||||
|
_distanceState = 0.0f;
|
||||||
|
_gainState = 0.0f;
|
||||||
|
|
||||||
|
// _gainAdjust is retained
|
||||||
|
|
||||||
|
_silentState = true;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AudioHRTF(const AudioHRTF&) = delete;
|
AudioHRTF(const AudioHRTF&) = delete;
|
||||||
AudioHRTF& operator=(const AudioHRTF&) = delete;
|
AudioHRTF& operator=(const AudioHRTF&) = delete;
|
||||||
|
@ -88,7 +110,7 @@ private:
|
||||||
// global and local gain adjustment
|
// global and local gain adjustment
|
||||||
float _gainAdjust = HRTF_GAIN;
|
float _gainAdjust = HRTF_GAIN;
|
||||||
|
|
||||||
bool _silentState = false;
|
bool _silentState = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AudioHRTF_h
|
#endif // AudioHRTF_h
|
||||||
|
|
|
@ -187,6 +187,13 @@ void EntityTreeRenderer::resetEntitiesScriptEngine() {
|
||||||
connect(entityScriptingInterface.data(), &EntityScriptingInterface::hoverLeaveEntity, _entitiesScriptEngine.data(), [&](const EntityItemID& entityID, const PointerEvent& event) {
|
connect(entityScriptingInterface.data(), &EntityScriptingInterface::hoverLeaveEntity, _entitiesScriptEngine.data(), [&](const EntityItemID& entityID, const PointerEvent& event) {
|
||||||
_entitiesScriptEngine->callEntityScriptMethod(entityID, "hoverLeaveEntity", event);
|
_entitiesScriptEngine->callEntityScriptMethod(entityID, "hoverLeaveEntity", event);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connect(_entitiesScriptEngine.data(), &ScriptEngine::entityScriptPreloadFinished, [&](const EntityItemID& entityID) {
|
||||||
|
EntityItemPointer entity = getTree()->findEntityByID(entityID);
|
||||||
|
if (entity) {
|
||||||
|
entity->setScriptHasFinishedPreload(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::clear() {
|
void EntityTreeRenderer::clear() {
|
||||||
|
@ -512,7 +519,11 @@ bool EntityTreeRenderer::findBestZoneAndMaybeContainingEntities(QVector<EntityIt
|
||||||
// be ignored because they can have events fired on them.
|
// be ignored because they can have events fired on them.
|
||||||
// FIXME - this could be optimized further by determining if the script is loaded
|
// FIXME - this could be optimized further by determining if the script is loaded
|
||||||
// and if it has either an enterEntity or leaveEntity method
|
// and if it has either an enterEntity or leaveEntity method
|
||||||
if (isZone || hasScript) {
|
//
|
||||||
|
// also, don't flag a scripted entity as containing the avatar until the script is loaded,
|
||||||
|
// so that the script is awake in time to receive the "entityEntity" call (even if the entity is a zone).
|
||||||
|
if ((!hasScript && isZone) ||
|
||||||
|
(hasScript && entity->isScriptPreloadFinished())) {
|
||||||
// now check to see if the point contains our entity, this can be expensive if
|
// now check to see if the point contains our entity, this can be expensive if
|
||||||
// the entity has a collision hull
|
// the entity has a collision hull
|
||||||
if (entity->contains(_avatarPosition)) {
|
if (entity->contains(_avatarPosition)) {
|
||||||
|
@ -972,6 +983,7 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, bool
|
||||||
entity->scriptHasUnloaded();
|
entity->scriptHasUnloaded();
|
||||||
}
|
}
|
||||||
if (shouldLoad) {
|
if (shouldLoad) {
|
||||||
|
entity->setScriptHasFinishedPreload(false);
|
||||||
_entitiesScriptEngine->loadEntityScript(entityID, resolveScriptURL(scriptUrl), reload);
|
_entitiesScriptEngine->loadEntityScript(entityID, resolveScriptURL(scriptUrl), reload);
|
||||||
entity->scriptHasPreloaded();
|
entity->scriptHasPreloaded();
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,10 +97,10 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce
|
||||||
withWriteLock([&] {
|
withWriteLock([&] {
|
||||||
auto entity = getEntity();
|
auto entity = getEntity();
|
||||||
_position = entity->getWorldPosition();
|
_position = entity->getWorldPosition();
|
||||||
_dimensions = entity->getScaledDimensions();
|
_dimensions = entity->getUnscaledDimensions(); // get unscaled to avoid scaling twice
|
||||||
_orientation = entity->getWorldOrientation();
|
_orientation = entity->getWorldOrientation();
|
||||||
updateModelTransformAndBound();
|
updateModelTransformAndBound();
|
||||||
_renderTransform = getModelTransform();
|
_renderTransform = getModelTransform(); // contains parent scale, if this entity scales with its parent
|
||||||
if (_shape == entity::Sphere) {
|
if (_shape == entity::Sphere) {
|
||||||
_renderTransform.postScale(SPHERE_ENTITY_SCALE);
|
_renderTransform.postScale(SPHERE_ENTITY_SCALE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3197,3 +3197,26 @@ void EntityItem::setCloneIDs(const QVector<QUuid>& cloneIDs) {
|
||||||
_cloneIDs = cloneIDs;
|
_cloneIDs = cloneIDs;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool EntityItem::shouldPreloadScript() const {
|
||||||
|
return !_script.isEmpty() && ((_loadedScript != _script) || (_loadedScriptTimestamp != _scriptTimestamp));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityItem::scriptHasPreloaded() {
|
||||||
|
_loadedScript = _script;
|
||||||
|
_loadedScriptTimestamp = _scriptTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityItem::scriptHasUnloaded() {
|
||||||
|
_loadedScript = "";
|
||||||
|
_loadedScriptTimestamp = 0;
|
||||||
|
_scriptPreloadFinished = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityItem::setScriptHasFinishedPreload(bool value) {
|
||||||
|
_scriptPreloadFinished = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EntityItem::isScriptPreloadFinished() {
|
||||||
|
return _scriptPreloadFinished;
|
||||||
|
}
|
||||||
|
|
|
@ -470,10 +470,11 @@ public:
|
||||||
/// We only want to preload if:
|
/// We only want to preload if:
|
||||||
/// there is some script, and either the script value or the scriptTimestamp
|
/// there is some script, and either the script value or the scriptTimestamp
|
||||||
/// value have changed since our last preload
|
/// value have changed since our last preload
|
||||||
bool shouldPreloadScript() const { return !_script.isEmpty() &&
|
bool shouldPreloadScript() const;
|
||||||
((_loadedScript != _script) || (_loadedScriptTimestamp != _scriptTimestamp)); }
|
void scriptHasPreloaded();
|
||||||
void scriptHasPreloaded() { _loadedScript = _script; _loadedScriptTimestamp = _scriptTimestamp; }
|
void scriptHasUnloaded();
|
||||||
void scriptHasUnloaded() { _loadedScript = ""; _loadedScriptTimestamp = 0; }
|
void setScriptHasFinishedPreload(bool value);
|
||||||
|
bool isScriptPreloadFinished();
|
||||||
|
|
||||||
bool getClientOnly() const { return _clientOnly; }
|
bool getClientOnly() const { return _clientOnly; }
|
||||||
virtual void setClientOnly(bool clientOnly) { _clientOnly = clientOnly; }
|
virtual void setClientOnly(bool clientOnly) { _clientOnly = clientOnly; }
|
||||||
|
@ -584,6 +585,7 @@ protected:
|
||||||
QString _script { ENTITY_ITEM_DEFAULT_SCRIPT }; /// the value of the script property
|
QString _script { ENTITY_ITEM_DEFAULT_SCRIPT }; /// the value of the script property
|
||||||
QString _loadedScript; /// the value of _script when the last preload signal was sent
|
QString _loadedScript; /// the value of _script when the last preload signal was sent
|
||||||
quint64 _scriptTimestamp { ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP }; /// the script loaded property used for forced reload
|
quint64 _scriptTimestamp { ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP }; /// the script loaded property used for forced reload
|
||||||
|
bool _scriptPreloadFinished { false };
|
||||||
|
|
||||||
QString _serverScripts;
|
QString _serverScripts;
|
||||||
/// keep track of time when _serverScripts property was last changed
|
/// keep track of time when _serverScripts property was last changed
|
||||||
|
|
|
@ -2442,6 +2442,8 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co
|
||||||
// if we got this far, then call the preload method
|
// if we got this far, then call the preload method
|
||||||
callEntityScriptMethod(entityID, "preload");
|
callEntityScriptMethod(entityID, "preload");
|
||||||
|
|
||||||
|
emit entityScriptPreloadFinished(entityID);
|
||||||
|
|
||||||
_occupiedScriptURLs.remove(entityScript);
|
_occupiedScriptURLs.remove(entityScript);
|
||||||
processDeferredEntityLoads(entityScript, entityID);
|
processDeferredEntityLoads(entityScript, entityID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -712,6 +712,13 @@ signals:
|
||||||
// script is updated (goes from RUNNING to ERROR_RUNNING_SCRIPT, for example)
|
// script is updated (goes from RUNNING to ERROR_RUNNING_SCRIPT, for example)
|
||||||
void entityScriptDetailsUpdated();
|
void entityScriptDetailsUpdated();
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* @function Script.entityScriptPreloadFinished
|
||||||
|
* @returns {Signal}
|
||||||
|
*/
|
||||||
|
// Emitted when an entity script has finished running preload
|
||||||
|
void entityScriptPreloadFinished(const EntityItemID& entityID);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
|
|
@ -73,21 +73,22 @@ Script.include("/~/system/libraries/utils.js");
|
||||||
method: "clearSelection",
|
method: "clearSelection",
|
||||||
hand: hand
|
hand: hand
|
||||||
}));
|
}));
|
||||||
|
} else {
|
||||||
|
if (this.selectedTarget.type === Picks.INTERSECTED_ENTITY) {
|
||||||
|
Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({
|
||||||
|
method: "selectEntity",
|
||||||
|
entityID: this.selectedTarget.objectID,
|
||||||
|
hand: hand
|
||||||
|
}));
|
||||||
|
} else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) {
|
||||||
|
Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({
|
||||||
|
method: "selectOverlay",
|
||||||
|
overlayID: this.selectedTarget.objectID,
|
||||||
|
hand: hand
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.selectedTarget.type === Picks.INTERSECTED_ENTITY) {
|
|
||||||
Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({
|
|
||||||
method: "selectEntity",
|
|
||||||
entityID: this.selectedTarget.objectID,
|
|
||||||
hand: hand
|
|
||||||
}));
|
|
||||||
} else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) {
|
|
||||||
Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({
|
|
||||||
method: "selectOverlay",
|
|
||||||
overlayID: this.selectedTarget.objectID,
|
|
||||||
hand: hand
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.triggerClicked = true;
|
this.triggerClicked = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
var WAITING_INTERVAL = 100; // ms
|
var WAITING_INTERVAL = 100; // ms
|
||||||
var CONNECTING_INTERVAL = 100; // ms
|
var CONNECTING_INTERVAL = 100; // ms
|
||||||
var MAKING_CONNECTION_TIMEOUT = 800; // ms
|
var MAKING_CONNECTION_TIMEOUT = 800; // ms
|
||||||
var CONNECTING_TIME = 1600; // ms
|
var CONNECTING_TIME = 100; // ms One interval.
|
||||||
var PARTICLE_RADIUS = 0.15; // m
|
var PARTICLE_RADIUS = 0.15; // m
|
||||||
var PARTICLE_ANGLE_INCREMENT = 360 / 45; // 1hz
|
var PARTICLE_ANGLE_INCREMENT = 360 / 45; // 1hz
|
||||||
var HANDSHAKE_SOUND_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/davidkelly/production/audio/4beat_sweep.wav";
|
var HANDSHAKE_SOUND_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/davidkelly/production/audio/4beat_sweep.wav";
|
||||||
|
|
Loading…
Reference in a new issue