From 00bea4d274b3249f053252e0f8da904407e44ddd Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 5 May 2015 11:05:28 -0700 Subject: [PATCH 1/7] fix crash for NULL deviceProxy --- interface/src/ui/UserInputMapper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/UserInputMapper.cpp b/interface/src/ui/UserInputMapper.cpp index 892ab6a9b6..259d08b4b7 100755 --- a/interface/src/ui/UserInputMapper.cpp +++ b/interface/src/ui/UserInputMapper.cpp @@ -90,7 +90,7 @@ void UserInputMapper::update(float deltaTime) { bool isActiveModifier = false; for (auto& modifier : modifiersIt->second) { auto deviceProxy = getDeviceProxy(modifier); - if (deviceProxy->getButton(modifier, currentTimestamp)) { + if (deviceProxy && deviceProxy->getButton(modifier, currentTimestamp)) { validModifiers.push_back(modifier); isActiveModifier |= (modifier.getID() == inputMapping._modifier.getID()); } @@ -99,8 +99,8 @@ void UserInputMapper::update(float deltaTime) { } // if enabled: default input or all modifiers on - if (enabled) { - auto deviceProxy = getDeviceProxy(inputID); + auto deviceProxy = getDeviceProxy(inputID); + if (enabled && deviceProxy) { switch (inputMapping._input.getType()) { case ChannelType::BUTTON: { _actionStates[channelInput.first] += inputMapping._scale * float(deviceProxy->getButton(inputID, currentTimestamp));// * deltaTime; // weight the impulse by the deltaTime From 5fc5df7c556463c943470115d971045dd43369cb Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 5 May 2015 12:38:44 -0700 Subject: [PATCH 2/7] change skyboxMode to backgroundMode --- .../entities/changingAtmosphereExample.js | 2 +- .../example/entities/zoneAtmosphereExample.js | 2 +- .../src/EntityTreeRenderer.cpp | 2 +- .../entities/src/EntityItemProperties.cpp | 60 +++++++++---------- libraries/entities/src/EntityItemProperties.h | 6 +- libraries/entities/src/EntityPropertyFlags.h | 12 ++-- libraries/entities/src/ZoneEntityItem.cpp | 14 ++--- libraries/entities/src/ZoneEntityItem.h | 6 +- 8 files changed, 51 insertions(+), 53 deletions(-) diff --git a/examples/example/entities/changingAtmosphereExample.js b/examples/example/entities/changingAtmosphereExample.js index 82689fa12b..88a25b6a08 100644 --- a/examples/example/entities/changingAtmosphereExample.js +++ b/examples/example/entities/changingAtmosphereExample.js @@ -23,7 +23,7 @@ var zoneEntityA = Entities.addEntity({ keyLightColor: { red: 255, green: 0, blue: 0 }, stageSunModelEnabled: false, shapeType: "sphere", - skyboxMode: "atmosphere", + backgroundMode: "atmosphere", atmosphere: { center: { x: 1000, y: 0, z: 1000}, innerRadius: 1000.0, diff --git a/examples/example/entities/zoneAtmosphereExample.js b/examples/example/entities/zoneAtmosphereExample.js index 2f21ea3db2..b31a453300 100644 --- a/examples/example/entities/zoneAtmosphereExample.js +++ b/examples/example/entities/zoneAtmosphereExample.js @@ -23,7 +23,7 @@ var zoneEntityA = Entities.addEntity({ keyLightColor: { red: 255, green: 0, blue: 0 }, stageSunModelEnabled: false, shapeType: "sphere", - skyboxMode: "atmosphere", + backgroundMode: "atmosphere", atmosphere: { center: { x: 1000, y: 0, z: 1000}, innerRadius: 1000.0, diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 8c738fe366..97676d6e5d 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -428,7 +428,7 @@ void EntityTreeRenderer::render(RenderArgs::RenderMode renderMode, scene->setStageDayTime(_bestZone->getStageHour()); scene->setStageYearTime(_bestZone->getStageDay()); - if (_bestZone->getSkyboxMode() == SKYBOX_MODE_ATMOSPHERE) { + if (_bestZone->getBackgroundMode() == BACKGROUND_MODE_ATMOSPHERE) { EnvironmentData data = _bestZone->getEnvironmentData(); glm::vec3 keyLightDirection = scene->getKeyLightDirection(); glm::vec3 inverseKeyLightDirection = keyLightDirection * -1.0f; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 7613f1912c..2e107bc958 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -89,7 +89,7 @@ EntityItemProperties::EntityItemProperties() : CONSTRUCT_PROPERTY(stageDay, ZoneEntityItem::DEFAULT_STAGE_DAY), CONSTRUCT_PROPERTY(stageHour, ZoneEntityItem::DEFAULT_STAGE_HOUR), CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), - CONSTRUCT_PROPERTY(skyboxMode, SKYBOX_MODE_INHERIT), + CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), _id(UNKNOWN_ENTITY_ID), _idSet(false), @@ -237,40 +237,40 @@ void EntityItemProperties::setShapeTypeFromString(const QString& shapeName) { } } -const char* skyboxModeNames[] = {"inherit", "atmosphere", "texture" }; +const char* backgroundModeNames[] = {"inherit", "atmosphere", "texture" }; -QHash stringToSkyboxModeLookup; +QHash stringToBackgroundModeLookup; -void addSkyboxMode(SkyboxMode type) { - stringToSkyboxModeLookup[skyboxModeNames[type]] = type; +void addBackgroundMode(BackgroundMode type) { + stringToBackgroundModeLookup[backgroundModeNames[type]] = type; } -void buildStringToSkyboxModeLookup() { - addSkyboxMode(SKYBOX_MODE_INHERIT); - addSkyboxMode(SKYBOX_MODE_ATMOSPHERE); - addSkyboxMode(SKYBOX_MODE_TEXTURE); +void buildStringToBackgroundModeLookup() { + addBackgroundMode(BACKGROUND_MODE_INHERIT); + addBackgroundMode(BACKGROUND_MODE_ATMOSPHERE); + addBackgroundMode(BACKGROUND_MODE_TEXTURE); } -QString EntityItemProperties::getSkyboxModeAsString() const { - if (_skyboxMode < sizeof(skyboxModeNames) / sizeof(char *)) - return QString(skyboxModeNames[_skyboxMode]); - return QString(skyboxModeNames[SKYBOX_MODE_INHERIT]); +QString EntityItemProperties::getBackgroundModeAsString() const { + if (_backgroundMode < sizeof(backgroundModeNames) / sizeof(char *)) + return QString(backgroundModeNames[_backgroundMode]); + return QString(backgroundModeNames[BACKGROUND_MODE_INHERIT]); } -QString EntityItemProperties::getSkyboxModeString(SkyboxMode mode) { - if (mode < sizeof(skyboxModeNames) / sizeof(char *)) - return QString(skyboxModeNames[mode]); - return QString(skyboxModeNames[SKYBOX_MODE_INHERIT]); +QString EntityItemProperties::getBackgroundModeString(BackgroundMode mode) { + if (mode < sizeof(backgroundModeNames) / sizeof(char *)) + return QString(backgroundModeNames[mode]); + return QString(backgroundModeNames[BACKGROUND_MODE_INHERIT]); } -void EntityItemProperties::setSkyboxModeFromString(const QString& skyboxMode) { - if (stringToSkyboxModeLookup.empty()) { - buildStringToSkyboxModeLookup(); +void EntityItemProperties::setBackgroundModeFromString(const QString& backgroundMode) { + if (stringToBackgroundModeLookup.empty()) { + buildStringToBackgroundModeLookup(); } - auto skyboxModeItr = stringToSkyboxModeLookup.find(skyboxMode.toLower()); - if (skyboxModeItr != stringToSkyboxModeLookup.end()) { - _skyboxMode = skyboxModeItr.value(); - _skyboxModeChanged = true; + auto backgroundModeItr = stringToBackgroundModeLookup.find(backgroundMode.toLower()); + if (backgroundModeItr != stringToBackgroundModeLookup.end()) { + _backgroundMode = backgroundModeItr.value(); + _backgroundModeChanged = true; } } @@ -334,7 +334,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, stageDay); CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, stageHour); - CHECK_PROPERTY_CHANGE(PROP_SKYBOX_MODE, skyboxMode); + CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); changedProperties += _atmosphere.getChangedProperties(); @@ -419,7 +419,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(stageAltitude); COPY_PROPERTY_TO_QSCRIPTVALUE(stageDay); COPY_PROPERTY_TO_QSCRIPTVALUE(stageHour); - COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(skyboxMode, getSkyboxModeAsString()); + COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundMode, getBackgroundModeAsString()); // Sitting properties support if (!skipDefaults) { @@ -524,7 +524,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageAltitude, setStageAltitude); COPY_PROPERTY_FROM_QSCRIPTVALUE_INT(stageDay, setStageDay); COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(stageHour, setStageHour); - COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(skyboxMode, SkyboxMode); + COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); _atmosphere.copyFromScriptValue(object, _defaultSettings); _lastEdited = usecTimestampNow(); } @@ -731,7 +731,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)properties.getShapeType()); APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, properties.getCompoundShapeURL()); - APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, appendValue, (uint32_t)properties.getSkyboxMode()); + APPEND_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, appendValue, (uint32_t)properties.getBackgroundMode()); _staticAtmosphere.setProperties(properties); _staticAtmosphere.appentToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState ); @@ -984,7 +984,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STAGE_HOUR, float, setStageHour); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHAPE_TYPE, ShapeType, setShapeType); READ_ENTITY_PROPERTY_STRING_TO_PROPERTIES(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SKYBOX_MODE, SkyboxMode, setSkyboxMode); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode); properties.getAtmosphere().decodeFromEditPacket(propertyFlags, dataAt , processedBytes); } @@ -1088,7 +1088,7 @@ void EntityItemProperties::markAllChanged() { _stageDayChanged = true; _stageHourChanged = true; - _skyboxModeChanged = true; + _backgroundModeChanged = true; _atmosphere.markAllChanged(); } diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 95072f23a0..ef3bc5cbfb 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -139,9 +139,9 @@ public: DEFINE_PROPERTY(PROP_STAGE_HOUR, StageHour, stageHour, float); DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup); - DEFINE_PROPERTY_REF_ENUM(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, SkyboxMode); + DEFINE_PROPERTY_REF_ENUM(PROP_BACKGROUND_MODE, BackgroundMode, backgroundMode, BackgroundMode); - static QString getSkyboxModeString(SkyboxMode mode); + static QString getBackgroundModeString(BackgroundMode mode); public: @@ -276,7 +276,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, LocalGravity, localGravity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, SkyboxMode, skyboxMode, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); debug << " last edited:" << properties.getLastEdited() << "\n"; debug << " edited ago:" << properties.getEditedAgo() << "\n"; diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 0b5d2ce805..3569a3dcc9 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -143,9 +143,7 @@ enum EntityPropertyList { PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH, PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_LOCAL_GRAVITY, PROP_ATMOSPHERE_HAS_STARS = PROP_PARTICLE_RADIUS, - PROP_SKYBOX_MODE = PROP_MODEL_URL, - // SunBrightness - same as KeyLight Intensity? - // SunLocation (or direction) - same as KeyLight + PROP_BACKGROUND_MODE = PROP_MODEL_URL, // WARNING!!! DO NOT ADD PROPS_xxx here unless you really really meant to.... Add them UP above }; @@ -157,10 +155,10 @@ typedef PropertyFlags EntityPropertyFlags; extern EntityPropertyList PROP_LAST_ITEM; -enum SkyboxMode { - SKYBOX_MODE_INHERIT, - SKYBOX_MODE_ATMOSPHERE, - SKYBOX_MODE_TEXTURE, +enum BackgroundMode { + BACKGROUND_MODE_INHERIT, + BACKGROUND_MODE_ATMOSPHERE, + BACKGROUND_MODE_TEXTURE, }; diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index a6e11294b9..c4646bebdf 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -62,7 +62,7 @@ ZoneEntityItem::ZoneEntityItem(const EntityItemID& entityItemID, const EntityIte _shapeType = DEFAULT_SHAPE_TYPE; _compoundShapeURL = DEFAULT_COMPOUND_SHAPE_URL; - _skyboxMode = SKYBOX_MODE_INHERIT; + _backgroundMode = BACKGROUND_MODE_INHERIT; setProperties(properties); } @@ -103,7 +103,7 @@ EntityItemProperties ZoneEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(shapeType, getShapeType); COPY_ENTITY_PROPERTY_TO_PROPERTIES(compoundShapeURL, getCompoundShapeURL); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(skyboxMode, getSkyboxMode); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(backgroundMode, getBackgroundMode); _atmospherePropeties.getProperties(properties); @@ -126,7 +126,7 @@ bool ZoneEntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(stageHour, setStageHour); SET_ENTITY_PROPERTY_FROM_PROPERTIES(shapeType, updateShapeType); SET_ENTITY_PROPERTY_FROM_PROPERTIES(compoundShapeURL, setCompoundShapeURL); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(skyboxMode, setSkyboxMode); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(backgroundMode, setBackgroundMode); bool somethingChangedInAtmosphere = _atmospherePropeties.setProperties(properties); @@ -164,7 +164,7 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_STAGE_HOUR, float, _stageHour); READ_ENTITY_PROPERTY_SETTER(PROP_SHAPE_TYPE, ShapeType, updateShapeType); READ_ENTITY_PROPERTY_STRING(PROP_COMPOUND_SHAPE_URL, setCompoundShapeURL); - READ_ENTITY_PROPERTY_SETTER(PROP_SKYBOX_MODE, SkyboxMode, setSkyboxMode); + READ_ENTITY_PROPERTY_SETTER(PROP_BACKGROUND_MODE, BackgroundMode, setBackgroundMode); bytesRead += _atmospherePropeties.readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, propertyFlags, overwriteLocalData); @@ -188,7 +188,7 @@ EntityPropertyFlags ZoneEntityItem::getEntityProperties(EncodeBitstreamParams& p requestedProperties += PROP_STAGE_HOUR; requestedProperties += PROP_SHAPE_TYPE; requestedProperties += PROP_COMPOUND_SHAPE_URL; - requestedProperties += PROP_SKYBOX_MODE; + requestedProperties += PROP_BACKGROUND_MODE; requestedProperties += _atmospherePropeties.getEntityProperties(params); return requestedProperties; @@ -216,7 +216,7 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_STAGE_HOUR, appendValue, getStageHour()); APPEND_ENTITY_PROPERTY(PROP_SHAPE_TYPE, appendValue, (uint32_t)getShapeType()); APPEND_ENTITY_PROPERTY(PROP_COMPOUND_SHAPE_URL, appendValue, getCompoundShapeURL()); - APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, appendValue, (uint32_t)getSkyboxMode()); // could this be a uint16?? + APPEND_ENTITY_PROPERTY(PROP_BACKGROUND_MODE, appendValue, (uint32_t)getBackgroundMode()); // could this be a uint16?? _atmospherePropeties.appendSubclassData(packetData, params, modelTreeElementExtraEncodeData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState); @@ -239,7 +239,7 @@ void ZoneEntityItem::debugDump() const { qCDebug(entities) << " _stageAltitude:" << _stageAltitude; qCDebug(entities) << " _stageDay:" << _stageDay; qCDebug(entities) << " _stageHour:" << _stageHour; - qCDebug(entities) << " _skyboxMode:" << EntityItemProperties::getSkyboxModeString(_skyboxMode); + qCDebug(entities) << " _backgroundMode:" << EntityItemProperties::getBackgroundModeString(_backgroundMode); _atmospherePropeties.debugDump(); } diff --git a/libraries/entities/src/ZoneEntityItem.h b/libraries/entities/src/ZoneEntityItem.h index a136226346..147cad7e45 100644 --- a/libraries/entities/src/ZoneEntityItem.h +++ b/libraries/entities/src/ZoneEntityItem.h @@ -106,8 +106,8 @@ public: const QString getCompoundShapeURL() const { return _compoundShapeURL; } virtual void setCompoundShapeURL(const QString& url); - void setSkyboxMode(SkyboxMode value) { _skyboxMode = value; } - SkyboxMode getSkyboxMode() const { return _skyboxMode; } + void setBackgroundMode(BackgroundMode value) { _backgroundMode = value; } + BackgroundMode getBackgroundMode() const { return _backgroundMode; } EnvironmentData getEnvironmentData() const; @@ -147,7 +147,7 @@ protected: ShapeType _shapeType = SHAPE_TYPE_NONE; QString _compoundShapeURL; - SkyboxMode _skyboxMode = SKYBOX_MODE_INHERIT; + BackgroundMode _backgroundMode = BACKGROUND_MODE_INHERIT; AtmospherePropertyGroup _atmospherePropeties; static bool _drawZoneBoundaries; From 0d4d5d024e30ad5370a5660929b84705469225b9 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 5 May 2015 14:59:22 -0700 Subject: [PATCH 3/7] revert last change (fix for invalid DeviceProxy) --- interface/src/ui/UserInputMapper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/UserInputMapper.cpp b/interface/src/ui/UserInputMapper.cpp index 259d08b4b7..892ab6a9b6 100755 --- a/interface/src/ui/UserInputMapper.cpp +++ b/interface/src/ui/UserInputMapper.cpp @@ -90,7 +90,7 @@ void UserInputMapper::update(float deltaTime) { bool isActiveModifier = false; for (auto& modifier : modifiersIt->second) { auto deviceProxy = getDeviceProxy(modifier); - if (deviceProxy && deviceProxy->getButton(modifier, currentTimestamp)) { + if (deviceProxy->getButton(modifier, currentTimestamp)) { validModifiers.push_back(modifier); isActiveModifier |= (modifier.getID() == inputMapping._modifier.getID()); } @@ -99,8 +99,8 @@ void UserInputMapper::update(float deltaTime) { } // if enabled: default input or all modifiers on - auto deviceProxy = getDeviceProxy(inputID); - if (enabled && deviceProxy) { + if (enabled) { + auto deviceProxy = getDeviceProxy(inputID); switch (inputMapping._input.getType()) { case ChannelType::BUTTON: { _actionStates[channelInput.first] += inputMapping._scale * float(deviceProxy->getButton(inputID, currentTimestamp));// * deltaTime; // weight the impulse by the deltaTime From 419cfee7758c3d1126eac3d96abfed169b6c2405 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 5 May 2015 15:06:51 -0700 Subject: [PATCH 4/7] more correct fix for invalid DeviceProxy crash bug --- interface/src/ui/UserInputMapper.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/src/ui/UserInputMapper.h b/interface/src/ui/UserInputMapper.h index 32a1782419..ab63bdbef7 100755 --- a/interface/src/ui/UserInputMapper.h +++ b/interface/src/ui/UserInputMapper.h @@ -57,7 +57,9 @@ public: bool isAxis() const { return getType() == ChannelType::AXIS; } bool isJoint() const { return getType() == ChannelType::JOINT; } - explicit Input() {} + // WORKAROUND: the explicit initializer here avoids a bug in GCC-4.8.2 (but not found in 4.9.2) + // where the default initializer (a C++-11ism) for the union data above is not applied. + explicit Input() : _id(0) {} explicit Input(uint32 id) : _id(id) {} explicit Input(uint16 device, uint16 channel, ChannelType type) : _device(device), _channel(channel), _type(uint16(type)) {} Input(const Input& src) : _id(src._id) {} From 5fb79df4c9356788df42e0e616a8ce9167631f1f Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Tue, 5 May 2015 15:18:16 -0700 Subject: [PATCH 5/7] dice don't go away unless 'X' key is clicked, added harmonicOscillator test script --- examples/dice.js | 8 ++--- examples/harmonicOscillator.js | 65 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 examples/harmonicOscillator.js diff --git a/examples/dice.js b/examples/dice.js index b118a6b289..6bda0c6cbe 100644 --- a/examples/dice.js +++ b/examples/dice.js @@ -13,7 +13,8 @@ // var isDice = false; -var NUMBER_OF_DICE = 2; +var NUMBER_OF_DICE = 4; +var LIFETIME = 10000; // Dice will live for about 3 hours var dice = []; var DIE_SIZE = 0.20; @@ -50,7 +51,7 @@ var diceButton = Overlays.addOverlay("image", { }); var GRAVITY = -3.5; -var LIFETIME = 300; + // NOTE: angularVelocity is in radians/sec var MAX_ANGULAR_SPEED = Math.PI; @@ -105,6 +106,7 @@ function mousePressEvent(event) { var clickedText = false; var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y}); if (clickedOverlay == offButton) { + deleteDice(); Script.stop(); } else if (clickedOverlay == diceButton) { var HOW_HARD = 2.0; @@ -116,10 +118,8 @@ function mousePressEvent(event) { } function scriptEnding() { - deleteDice(); Overlays.deleteOverlay(offButton); Overlays.deleteOverlay(diceButton); - } Entities.entityCollisionWithEntity.connect(entityCollisionWithEntity); diff --git a/examples/harmonicOscillator.js b/examples/harmonicOscillator.js new file mode 100644 index 0000000000..0ffbce8beb --- /dev/null +++ b/examples/harmonicOscillator.js @@ -0,0 +1,65 @@ +// harmonicOscillator.js +// +// Created by Philip Rosedale on May 5, 2015 +// Copyright 2015 High Fidelity, Inc. +// +// An object moves around the edge of a disc while +// changing color. The script is continuously updating +// position, velocity, rotation, and color. The movement +// should appear perfectly smooth to someone else, +// provided their network connection is good. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +var ball, disc; +var time = 0.0; +var range = 1.0; +var speed = 0.5; + + +var basePosition = Vec3.sum(Camera.getPosition(), Quat.getFront(Camera.getOrientation())); + +ball = Entities.addEntity( + { type: "Box", + position: basePosition, + dimensions: { x: 0.1, y: 0.1, z: 0.1 }, + color: { red: 255, green: 0, blue: 255 } + }); + +disc = Entities.addEntity( + { type: "Sphere", + position: basePosition, + dimensions: { x: range, y: range / 20.0, z: range }, + color: { red: 128, green: 128, blue: 128 } + }); + +function update(deltaTime) { + time += deltaTime * speed; + if (!ball.isKnownID) { + ball = Entities.identifyEntity(ball); + } + rotation = Quat.angleAxis(time/Math.PI * 180.0, { x: 0, y: 1, z: 0 }); + Entities.editEntity(ball, + { + color: { red: 255 * (Math.sin(time)/2.0 + 0.5), + green: 255 - 255 * (Math.sin(time)/2.0 + 0.5), + blue: 0 }, + position: { x: basePosition.x + Math.sin(time) / 2.0 * range, + y: basePosition.y, + z: basePosition.z + Math.cos(time) / 2.0 * range }, + velocity: { x: Math.cos(time)/2.0 * range, + y: 0.0, + z: -Math.sin(time)/2.0 * range }, + rotation: rotation + }); +} + +function scriptEnding() { + Entities.deleteEntity(ball); + Entities.deleteEntity(disc); +} + +Script.scriptEnding.connect(scriptEnding); +Script.update.connect(update); From 7396bb138d960fc4a809f9643c5894996d8d41d0 Mon Sep 17 00:00:00 2001 From: Chris Collins Date: Tue, 5 May 2015 16:52:38 -0700 Subject: [PATCH 6/7] Removed headmove removed head move, it is not being used by Oculus users at the moment --- examples/defaultScripts.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/defaultScripts.js b/examples/defaultScripts.js index a5c086fc44..89d4094856 100644 --- a/examples/defaultScripts.js +++ b/examples/defaultScripts.js @@ -12,7 +12,6 @@ Script.load("progress.js"); Script.load("edit.js"); Script.load("selectAudioDevice.js"); Script.load("controllers/hydra/hydraMove.js"); -Script.load("headMove.js"); Script.load("inspect.js"); Script.load("lobby.js"); Script.load("notifications.js"); From b519884609bbc41065527ecedb59b15da611c57b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 5 May 2015 20:54:12 -0700 Subject: [PATCH 7/7] Fix lobby not displaying in HMD mode This usage of Glower is similar to that in renderAvatarBillboard(). Both may indicate that something needs changing in the graphics pipeline. --- interface/src/Application.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e20ee73877..b2879aa29e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3241,6 +3241,7 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs { PerformanceTimer perfTimer("3dOverlaysFront"); glClear(GL_DEPTH_BUFFER_BIT); + Glower glower; // Sets alpha to 1.0 _overlays.renderWorld(true); } activeRenderingThread = nullptr;