From 460eaa515bf0a4fbcd166206d456bb5d2c9506dc Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 10 Aug 2015 14:19:25 -0700 Subject: [PATCH 01/45] adding direction spread --- libraries/entities/src/ParticleEffectEntityItem.cpp | 5 +++++ libraries/entities/src/ParticleEffectEntityItem.h | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index dc5bbb85ed..7909606f8d 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -50,6 +50,7 @@ const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION(0.0f, 1.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_EMIT_STRENGTH = 25.0f; const float ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY = -9.8f; const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; @@ -107,6 +108,10 @@ void ParticleEffectEntityItem::setEmitDirection(glm::vec3 emitDirection) { computeAndUpdateDimensions(); } +void ParticleEffectEntityItem::setDirectionSpread(glm::vec3 directionSpread) { + _directionSpread = directionSpread; +} + void ParticleEffectEntityItem::setEmitStrength(float emitStrength) { _emitStrength = emitStrength; computeAndUpdateDimensions(); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 994c609f0f..651dc55616 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -103,6 +103,11 @@ public: static const glm::vec3 DEFAULT_EMIT_DIRECTION; void setEmitDirection(glm::vec3 emitDirection); const glm::vec3& getEmitDirection() const { return _emitDirection; } + + + static const glm::vec3 DEFAULT_DIRECTION_SPREAD; + void setDirectionSpread(glm::vec3 directionSpread); + const glm::vec3& getDirectionSpread() const { return _directionSpread; } static const float DEFAULT_EMIT_STRENGTH; void setEmitStrength(float emitStrength); @@ -146,6 +151,7 @@ protected: float _lifespan; float _emitRate; glm::vec3 _emitDirection; + glm::vec3 _directionSpread; float _emitStrength; float _localGravity; float _particleRadius; From 23dcc647c4deb5f7271b25f2d12245da2d226389 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 10 Aug 2015 15:00:21 -0700 Subject: [PATCH 02/45] adding more for direction spread --- libraries/entities/src/EntityItemProperties.cpp | 1 + libraries/entities/src/EntityItemProperties.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 3 +++ libraries/entities/src/ParticleEffectEntityItem.cpp | 5 +++++ 4 files changed, 10 insertions(+) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 4e7228e573..cd470dcee2 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -84,6 +84,7 @@ CONSTRUCT_PROPERTY(maxParticles, ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES CONSTRUCT_PROPERTY(lifespan, ParticleEffectEntityItem::DEFAULT_LIFESPAN), CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE), CONSTRUCT_PROPERTY(emitDirection, ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION), +CONSTRUCT_PROPERTY(directionSpread, ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD), CONSTRUCT_PROPERTY(emitStrength, ParticleEffectEntityItem::DEFAULT_EMIT_STRENGTH), CONSTRUCT_PROPERTY(localGravity, ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 3ce6040d19..8236f3bb67 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -131,6 +131,7 @@ public: DEFINE_PROPERTY(PROP_LIFESPAN, Lifespan, lifespan, float); DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float); DEFINE_PROPERTY_REF(PROP_EMIT_DIRECTION, EmitDirection, emitDirection, glm::vec3); + DEFINE_PROPERTY_REF(PROP_DIRECTION_SPREAD, DirectionSpread, directionSpread, glm::vec3); DEFINE_PROPERTY(PROP_EMIT_STRENGTH, EmitStrength, emitStrength, float); DEFINE_PROPERTY(PROP_LOCAL_GRAVITY, LocalGravity, localGravity, float); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index be16683f39..99aa30327b 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -125,6 +125,9 @@ enum EntityPropertyList { PROP_FACE_CAMERA, PROP_SCRIPT_TIMESTAMP, PROP_ACTION_DATA, + + // used by particles + PROP_DIRECTION_SPREAD, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 7909606f8d..5ecc1384cd 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -207,6 +207,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(localGravity, setLocalGravity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(directionSpread, setDirectionSpread); if (somethingChanged) { bool wantDebug = false; @@ -262,6 +263,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); + READ_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, glm::vec3, setDirectionSpread); return bytesRead; } @@ -285,6 +287,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_LOCAL_GRAVITY; requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; + requestedProperties += PROP_DIRECTION_SPREAD; return requestedProperties; } @@ -312,6 +315,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); + APPEND_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, getDirectionSpread()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -532,6 +536,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // jitter the _emitDirection by a random offset glm::vec3 randOffset; + qDebug() << "direction spread " << _directionSpread.x; randOffset.x = (randFloat() - 0.5f) * 0.25f * _emitStrength; randOffset.y = (randFloat() - 0.5f) * 0.25f * _emitStrength; randOffset.z = (randFloat() - 0.5f) * 0.25f * _emitStrength; From d568e20e147d02c05160f125be68ab22da1e7170 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 10 Aug 2015 15:06:08 -0700 Subject: [PATCH 03/45] spread going accross wire --- libraries/entities/src/EntityItemProperties.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index cd470dcee2..d554bea415 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -345,6 +345,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_LIFESPAN, lifespan); CHECK_PROPERTY_CHANGE(PROP_EMIT_RATE, emitRate); CHECK_PROPERTY_CHANGE(PROP_EMIT_DIRECTION, emitDirection); + CHECK_PROPERTY_CHANGE(PROP_DIRECTION_SPREAD, directionSpread); CHECK_PROPERTY_CHANGE(PROP_EMIT_STRENGTH, emitStrength); CHECK_PROPERTY_CHANGE(PROP_LOCAL_GRAVITY, localGravity); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); @@ -442,6 +443,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(lifespan); COPY_PROPERTY_TO_QSCRIPTVALUE(emitRate); COPY_PROPERTY_TO_QSCRIPTVALUE(emitDirection); + COPY_PROPERTY_TO_QSCRIPTVALUE(directionSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(emitStrength); COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); @@ -556,6 +558,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(lifespan, float, setLifespan); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRate, float, setEmitRate); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitDirection, glmVec3, setEmitDirection); + COPY_PROPERTY_FROM_QSCRIPTVALUE(directionSpread, glmVec3, setDirectionSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitStrength, float, setEmitStrength); COPY_PROPERTY_FROM_QSCRIPTVALUE(localGravity, float, setLocalGravity); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); @@ -789,9 +792,11 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_LIFESPAN, properties.getLifespan()); APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, properties.getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, properties.getEmitDirection()); + APPEND_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, properties.getDirectionSpread()); APPEND_ENTITY_PROPERTY(PROP_EMIT_STRENGTH, properties.getEmitStrength()); APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, properties.getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); + } if (properties.getType() == EntityTypes::Zone) { @@ -1046,6 +1051,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LIFESPAN, float, setLifespan); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_DIRECTION, glm::vec3, setEmitDirection); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DIRECTION_SPREAD, glm::vec3, setDirectionSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_STRENGTH, float, setEmitStrength); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); @@ -1166,6 +1172,7 @@ void EntityItemProperties::markAllChanged() { _lifespanChanged = true; _emitRateChanged = true; _emitDirectionChanged = true; + _directionSpreadChanged = true; _emitStrengthChanged = true; _localGravityChanged = true; _particleRadiusChanged = true; From d341dc337de9e99e469a5d5d594d94c85b3ea71a Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 10 Aug 2015 15:48:28 -0700 Subject: [PATCH 04/45] added direction spread property to particle entity to enable users to create more varied effects (such as falling snow --- libraries/entities/src/ParticleEffectEntityItem.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 5ecc1384cd..c626b88735 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -536,10 +536,10 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // jitter the _emitDirection by a random offset glm::vec3 randOffset; - qDebug() << "direction spread " << _directionSpread.x; - randOffset.x = (randFloat() - 0.5f) * 0.25f * _emitStrength; - randOffset.y = (randFloat() - 0.5f) * 0.25f * _emitStrength; - randOffset.z = (randFloat() - 0.5f) * 0.25f * _emitStrength; + randOffset.x = -_directionSpread.x + randFloat() * (_directionSpread.x * 2.0f); + randOffset.y = -_directionSpread.y + randFloat() * (_directionSpread.y * 2.0f); + randOffset.z = -_directionSpread.z + randFloat() * (_directionSpread.z * 2.0f); + // set initial conditions _particlePositions[i] = glm::vec3(0.0f, 0.0f, 0.0f); From ddaba19a4e07a7419a6daf25adc63e7335b673b6 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 11 Aug 2015 14:43:05 -0700 Subject: [PATCH 05/45] chaning to velocity from direction --- .../entities/src/EntityItemProperties.cpp | 7 --- libraries/entities/src/EntityItemProperties.h | 2 - .../entities/src/ParticleEffectEntityItem.cpp | 59 +------------------ .../entities/src/ParticleEffectEntityItem.h | 7 --- 4 files changed, 2 insertions(+), 73 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 9302ed5049..c4364858e8 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -86,7 +86,6 @@ CONSTRUCT_PROPERTY(lifespan, ParticleEffectEntityItem::DEFAULT_LIFESPAN), CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE), CONSTRUCT_PROPERTY(emitDirection, ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION), CONSTRUCT_PROPERTY(directionSpread, ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD), -CONSTRUCT_PROPERTY(emitStrength, ParticleEffectEntityItem::DEFAULT_EMIT_STRENGTH), CONSTRUCT_PROPERTY(localGravity, ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), @@ -352,7 +351,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_RATE, emitRate); CHECK_PROPERTY_CHANGE(PROP_EMIT_DIRECTION, emitDirection); CHECK_PROPERTY_CHANGE(PROP_DIRECTION_SPREAD, directionSpread); - CHECK_PROPERTY_CHANGE(PROP_EMIT_STRENGTH, emitStrength); CHECK_PROPERTY_CHANGE(PROP_LOCAL_GRAVITY, localGravity); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); @@ -455,7 +453,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitRate); COPY_PROPERTY_TO_QSCRIPTVALUE(emitDirection); COPY_PROPERTY_TO_QSCRIPTVALUE(directionSpread); - COPY_PROPERTY_TO_QSCRIPTVALUE(emitStrength); COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); @@ -576,7 +573,6 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRate, float, setEmitRate); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitDirection, glmVec3, setEmitDirection); COPY_PROPERTY_FROM_QSCRIPTVALUE(directionSpread, glmVec3, setDirectionSpread); - COPY_PROPERTY_FROM_QSCRIPTVALUE(emitStrength, float, setEmitStrength); COPY_PROPERTY_FROM_QSCRIPTVALUE(localGravity, float, setLocalGravity); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); @@ -818,7 +814,6 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, properties.getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, properties.getEmitDirection()); APPEND_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, properties.getDirectionSpread()); - APPEND_ENTITY_PROPERTY(PROP_EMIT_STRENGTH, properties.getEmitStrength()); APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, properties.getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); @@ -1088,7 +1083,6 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_DIRECTION, glm::vec3, setEmitDirection); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DIRECTION_SPREAD, glm::vec3, setDirectionSpread); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_STRENGTH, float, setEmitStrength); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); } @@ -1220,7 +1214,6 @@ void EntityItemProperties::markAllChanged() { _emitRateChanged = true; _emitDirectionChanged = true; _directionSpreadChanged = true; - _emitStrengthChanged = true; _localGravityChanged = true; _particleRadiusChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index a3f512b36e..4ebe29eda9 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -133,7 +133,6 @@ public: DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float); DEFINE_PROPERTY_REF(PROP_EMIT_DIRECTION, EmitDirection, emitDirection, glm::vec3); DEFINE_PROPERTY_REF(PROP_DIRECTION_SPREAD, DirectionSpread, directionSpread, glm::vec3); - DEFINE_PROPERTY(PROP_EMIT_STRENGTH, EmitStrength, emitStrength, float); DEFINE_PROPERTY(PROP_LOCAL_GRAVITY, LocalGravity, localGravity, float); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); @@ -313,7 +312,6 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, Lifespan, lifespan, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRate, emitRate, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitDirection, emitDirection, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitStrength, emitStrength, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, LocalGravity, localGravity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index e1019efba5..403d9e4df5 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -52,7 +52,6 @@ const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION(0.0f, 1.0f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD(0.0f, 0.0f, 0.0f); -const float ParticleEffectEntityItem::DEFAULT_EMIT_STRENGTH = 25.0f; const float ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY = -9.8f; const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -69,7 +68,6 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _lifespan(DEFAULT_LIFESPAN), _emitRate(DEFAULT_EMIT_RATE), _emitDirection(DEFAULT_EMIT_DIRECTION), - _emitStrength(DEFAULT_EMIT_STRENGTH), _localGravity(DEFAULT_LOCAL_GRAVITY), _particleRadius(DEFAULT_PARTICLE_RADIUS), _lastAnimated(usecTimestampNow()), @@ -95,78 +93,29 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte ParticleEffectEntityItem::~ParticleEffectEntityItem() { } -void ParticleEffectEntityItem::setDimensions(const glm::vec3& value) { - computeAndUpdateDimensions(); -} void ParticleEffectEntityItem::setLifespan(float lifespan) { _lifespan = lifespan; - computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setEmitDirection(glm::vec3 emitDirection) { _emitDirection = glm::normalize(emitDirection); - computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setDirectionSpread(glm::vec3 directionSpread) { _directionSpread = directionSpread; } -void ParticleEffectEntityItem::setEmitStrength(float emitStrength) { - _emitStrength = emitStrength; - computeAndUpdateDimensions(); -} void ParticleEffectEntityItem::setLocalGravity(float localGravity) { _localGravity = localGravity; - computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { _particleRadius = particleRadius; - computeAndUpdateDimensions(); } -void ParticleEffectEntityItem::computeAndUpdateDimensions() { - const float t = _lifespan * 1.1f; // add 10% extra time, to account for incremental timer accumulation error. - const float MAX_RANDOM_FACTOR = (0.5f * 0.25f); - const float maxOffset = (MAX_RANDOM_FACTOR * _emitStrength) + _particleRadius; - - // bounds for x and z is easy to compute because there is no at^2 term. - float xMax = (_emitDirection.x * _emitStrength + maxOffset) * t; - float xMin = (_emitDirection.x * _emitStrength - maxOffset) * t; - - float zMax = (_emitDirection.z * _emitStrength + maxOffset) * t; - float zMin = (_emitDirection.z * _emitStrength - maxOffset) * t; - - // yEnd is where the particle will end. - float a = _localGravity; - float atSquared = a * t * t; - float v = _emitDirection.y * _emitStrength + maxOffset; - float vt = v * t; - float yEnd = 0.5f * atSquared + vt; - - // yApex is where the particle is at it's apex. - float yApexT = (-v / a); - float yApex = 0.0f; - - // only set apex if it's within the lifespan of the particle. - if (yApexT >= 0.0f && yApexT <= t) { - yApex = -(v * v) / (2.0f * a); - } - - float yMax = std::max(yApex, yEnd); - float yMin = std::min(yApex, yEnd); - - // times 2 because dimensions are diameters not radii. - glm::vec3 dims(2.0f * std::max(fabsf(xMin), fabsf(xMax)), - 2.0f * std::max(fabsf(yMin), fabsf(yMax)), - 2.0f * std::max(fabsf(zMin), fabsf(zMax))); - - EntityItem::setDimensions(dims); -} EntityItemProperties ParticleEffectEntityItem::getProperties() const { EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class @@ -182,7 +131,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(lifespan, getLifespan); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRate, getEmitRate); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitDirection, getEmitDirection); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitStrength, getEmitStrength); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(localGravity, getLocalGravity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); @@ -204,7 +153,6 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifespan, setLifespan); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRate, setEmitRate); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitDirection, setEmitDirection); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitStrength, setEmitStrength); SET_ENTITY_PROPERTY_FROM_PROPERTIES(localGravity, setLocalGravity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); @@ -260,7 +208,6 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, glm::vec3, setEmitDirection); - READ_ENTITY_PROPERTY(PROP_EMIT_STRENGTH, float, setEmitStrength); READ_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); @@ -284,7 +231,6 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_LIFESPAN; requestedProperties += PROP_EMIT_RATE; requestedProperties += PROP_EMIT_DIRECTION; - requestedProperties += PROP_EMIT_STRENGTH; requestedProperties += PROP_LOCAL_GRAVITY; requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; @@ -312,7 +258,6 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_LIFESPAN, getLifespan()); APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, getEmitDirection()); - APPEND_ENTITY_PROPERTY(PROP_EMIT_STRENGTH, getEmitStrength()); APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); @@ -544,7 +489,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // set initial conditions _particlePositions[i] = glm::vec3(0.0f, 0.0f, 0.0f); - _particleVelocities[i] = _emitDirection * _emitStrength + randOffset; + _particleVelocities[i] = _emitDirection + randOffset; integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 651dc55616..584bc7beff 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -86,8 +86,6 @@ public: void setAnimationLastFrame(float lastFrame) { _animationLoop.setLastFrame(lastFrame); } float getAnimationLastFrame() const { return _animationLoop.getLastFrame(); } - virtual void setDimensions(const glm::vec3& value) override; - static const quint32 DEFAULT_MAX_PARTICLES; void setMaxParticles(quint32 maxParticles); quint32 getMaxParticles() const { return _maxParticles; } @@ -109,9 +107,6 @@ public: void setDirectionSpread(glm::vec3 directionSpread); const glm::vec3& getDirectionSpread() const { return _directionSpread; } - static const float DEFAULT_EMIT_STRENGTH; - void setEmitStrength(float emitStrength); - float getEmitStrength() const { return _emitStrength; } static const float DEFAULT_LOCAL_GRAVITY; void setLocalGravity(float localGravity); @@ -121,7 +116,6 @@ public: void setParticleRadius(float particleRadius); float getParticleRadius() const { return _particleRadius; } - void computeAndUpdateDimensions(); bool getAnimationIsPlaying() const { return _animationLoop.isRunning(); } float getAnimationFrameIndex() const { return _animationLoop.getFrameIndex(); } @@ -152,7 +146,6 @@ protected: float _emitRate; glm::vec3 _emitDirection; glm::vec3 _directionSpread; - float _emitStrength; float _localGravity; float _particleRadius; quint64 _lastAnimated; From c2915fc0f582020edbe9c9e74f6a480ebc27f0b0 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 11 Aug 2015 15:16:36 -0700 Subject: [PATCH 06/45] changing to velocity spread --- .../entities/src/EntityItemProperties.cpp | 28 ++++++------- libraries/entities/src/EntityItemProperties.h | 6 +-- libraries/entities/src/EntityPropertyFlags.h | 6 +-- .../entities/src/ParticleEffectEntityItem.cpp | 42 +++++++++---------- .../entities/src/ParticleEffectEntityItem.h | 16 +++---- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index c4364858e8..ddf7257775 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -84,8 +84,8 @@ CONSTRUCT_PROPERTY(shapeType, SHAPE_TYPE_NONE), CONSTRUCT_PROPERTY(maxParticles, ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES), CONSTRUCT_PROPERTY(lifespan, ParticleEffectEntityItem::DEFAULT_LIFESPAN), CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE), -CONSTRUCT_PROPERTY(emitDirection, ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION), -CONSTRUCT_PROPERTY(directionSpread, ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD), +CONSTRUCT_PROPERTY(emitVelocity, ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY), +CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD), CONSTRUCT_PROPERTY(localGravity, ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), @@ -349,8 +349,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_MAX_PARTICLES, maxParticles); CHECK_PROPERTY_CHANGE(PROP_LIFESPAN, lifespan); CHECK_PROPERTY_CHANGE(PROP_EMIT_RATE, emitRate); - CHECK_PROPERTY_CHANGE(PROP_EMIT_DIRECTION, emitDirection); - CHECK_PROPERTY_CHANGE(PROP_DIRECTION_SPREAD, directionSpread); + CHECK_PROPERTY_CHANGE(PROP_EMIT_VELOCITY, emitVelocity); + CHECK_PROPERTY_CHANGE(PROP_VELOCITY_SPREAD, velocitySpread); CHECK_PROPERTY_CHANGE(PROP_LOCAL_GRAVITY, localGravity); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); @@ -451,8 +451,8 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(maxParticles); COPY_PROPERTY_TO_QSCRIPTVALUE(lifespan); COPY_PROPERTY_TO_QSCRIPTVALUE(emitRate); - COPY_PROPERTY_TO_QSCRIPTVALUE(emitDirection); - COPY_PROPERTY_TO_QSCRIPTVALUE(directionSpread); + COPY_PROPERTY_TO_QSCRIPTVALUE(emitVelocity); + COPY_PROPERTY_TO_QSCRIPTVALUE(velocitySpread); COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); @@ -571,8 +571,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(maxParticles, float, setMaxParticles); COPY_PROPERTY_FROM_QSCRIPTVALUE(lifespan, float, setLifespan); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRate, float, setEmitRate); - COPY_PROPERTY_FROM_QSCRIPTVALUE(emitDirection, glmVec3, setEmitDirection); - COPY_PROPERTY_FROM_QSCRIPTVALUE(directionSpread, glmVec3, setDirectionSpread); + COPY_PROPERTY_FROM_QSCRIPTVALUE(emitVelocity, glmVec3, setEmitVelocity); + COPY_PROPERTY_FROM_QSCRIPTVALUE(velocitySpread, glmVec3, setVelocitySpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(localGravity, float, setLocalGravity); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); @@ -812,8 +812,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_MAX_PARTICLES, properties.getMaxParticles()); APPEND_ENTITY_PROPERTY(PROP_LIFESPAN, properties.getLifespan()); APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, properties.getEmitRate()); - APPEND_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, properties.getEmitDirection()); - APPEND_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, properties.getDirectionSpread()); + APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, properties.getEmitVelocity()); + APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, properties.getVelocitySpread()); APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, properties.getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); @@ -1081,8 +1081,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MAX_PARTICLES, float, setMaxParticles); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LIFESPAN, float, setLifespan); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RATE, float, setEmitRate); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_DIRECTION, glm::vec3, setEmitDirection); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DIRECTION_SPREAD, glm::vec3, setDirectionSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); } @@ -1212,8 +1212,8 @@ void EntityItemProperties::markAllChanged() { _maxParticlesChanged = true; _lifespanChanged = true; _emitRateChanged = true; - _emitDirectionChanged = true; - _directionSpreadChanged = true; + _emitVelocityChanged = true; + _velocitySpreadChanged = true; _localGravityChanged = true; _particleRadiusChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 4ebe29eda9..db4ebb9229 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -131,8 +131,8 @@ public: DEFINE_PROPERTY(PROP_MAX_PARTICLES, MaxParticles, maxParticles, quint32); DEFINE_PROPERTY(PROP_LIFESPAN, Lifespan, lifespan, float); DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float); - DEFINE_PROPERTY_REF(PROP_EMIT_DIRECTION, EmitDirection, emitDirection, glm::vec3); - DEFINE_PROPERTY_REF(PROP_DIRECTION_SPREAD, DirectionSpread, directionSpread, glm::vec3); + DEFINE_PROPERTY_REF(PROP_EMIT_VELOCITY, EmitVelocity, emitVelocity, glm::vec3); + DEFINE_PROPERTY_REF(PROP_VELOCITY_SPREAD, VelocitySpread, velocitySpread, glm::vec3); DEFINE_PROPERTY(PROP_LOCAL_GRAVITY, LocalGravity, localGravity, float); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); @@ -311,7 +311,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, MaxParticles, maxParticles, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Lifespan, lifespan, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRate, emitRate, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitDirection, emitDirection, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitVelocity, emitVelocity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, LocalGravity, localGravity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 6c32b39700..66a3fcb2f6 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -96,7 +96,7 @@ enum EntityPropertyList { PROP_MAX_PARTICLES, PROP_LIFESPAN, PROP_EMIT_RATE, - PROP_EMIT_DIRECTION, + PROP_EMIT_VELOCITY, PROP_EMIT_STRENGTH, PROP_LOCAL_GRAVITY, PROP_PARTICLE_RADIUS, @@ -136,7 +136,7 @@ enum EntityPropertyList { PROP_STROKE_WIDTHS, // used by particles - PROP_DIRECTION_SPREAD, + PROP_VELOCITY_SPREAD, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line @@ -170,7 +170,7 @@ enum EntityPropertyList { PROP_ATMOSPHERE_CENTER = PROP_MAX_PARTICLES, PROP_ATMOSPHERE_INNER_RADIUS = PROP_LIFESPAN, PROP_ATMOSPHERE_OUTER_RADIUS = PROP_EMIT_RATE, - PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_DIRECTION, + PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_VELOCITY, PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH, PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_LOCAL_GRAVITY, PROP_ATMOSPHERE_HAS_STARS = PROP_PARTICLE_RADIUS, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 403d9e4df5..99a1e7d2ab 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -50,8 +50,8 @@ const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f; const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; -const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_DIRECTION(0.0f, 1.0f, 0.0f); -const glm::vec3 ParticleEffectEntityItem::DEFAULT_DIRECTION_SPREAD(0.0f, 0.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 0.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY = -9.8f; const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -67,7 +67,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _maxParticles(DEFAULT_MAX_PARTICLES), _lifespan(DEFAULT_LIFESPAN), _emitRate(DEFAULT_EMIT_RATE), - _emitDirection(DEFAULT_EMIT_DIRECTION), + _emitVelocity(DEFAULT_EMIT_VELOCITY), _localGravity(DEFAULT_LOCAL_GRAVITY), _particleRadius(DEFAULT_PARTICLE_RADIUS), _lastAnimated(usecTimestampNow()), @@ -98,12 +98,12 @@ void ParticleEffectEntityItem::setLifespan(float lifespan) { _lifespan = lifespan; } -void ParticleEffectEntityItem::setEmitDirection(glm::vec3 emitDirection) { - _emitDirection = glm::normalize(emitDirection); +void ParticleEffectEntityItem::setEmitVelocity(glm::vec3 emitVelocity) { + _emitVelocity = emitVelocity; } -void ParticleEffectEntityItem::setDirectionSpread(glm::vec3 directionSpread) { - _directionSpread = directionSpread; +void ParticleEffectEntityItem::setVelocitySpread(glm::vec3 velocitySpread) { + _velocitySpread = velocitySpread; } @@ -130,7 +130,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(maxParticles, getMaxParticles); COPY_ENTITY_PROPERTY_TO_PROPERTIES(lifespan, getLifespan); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRate, getEmitRate); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitDirection, getEmitDirection); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitVelocity, getEmitVelocity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(localGravity, getLocalGravity); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); @@ -152,11 +152,11 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(maxParticles, setMaxParticles); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifespan, setLifespan); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRate, setEmitRate); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitDirection, setEmitDirection); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitVelocity, setEmitVelocity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(localGravity, setLocalGravity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(directionSpread, setDirectionSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocitySpread, setVelocitySpread); if (somethingChanged) { bool wantDebug = false; @@ -207,11 +207,11 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); - READ_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, glm::vec3, setEmitDirection); + READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, float, setLocalGravity); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); - READ_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, glm::vec3, setDirectionSpread); + READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); return bytesRead; } @@ -230,11 +230,11 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_MAX_PARTICLES; requestedProperties += PROP_LIFESPAN; requestedProperties += PROP_EMIT_RATE; - requestedProperties += PROP_EMIT_DIRECTION; + requestedProperties += PROP_EMIT_VELOCITY; requestedProperties += PROP_LOCAL_GRAVITY; requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; - requestedProperties += PROP_DIRECTION_SPREAD; + requestedProperties += PROP_VELOCITY_SPREAD; return requestedProperties; } @@ -257,11 +257,11 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_MAX_PARTICLES, getMaxParticles()); APPEND_ENTITY_PROPERTY(PROP_LIFESPAN, getLifespan()); APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, getEmitRate()); - APPEND_ENTITY_PROPERTY(PROP_EMIT_DIRECTION, getEmitDirection()); + APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, getEmitVelocity()); APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, getLocalGravity()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); - APPEND_ENTITY_PROPERTY(PROP_DIRECTION_SPREAD, getDirectionSpread()); + APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, getVelocitySpread()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -480,16 +480,16 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { quint32 i = _particleTailIndex; _particleLifetimes[i] = _lifespan; - // jitter the _emitDirection by a random offset + // jitter the _emitVelocity by a random offset glm::vec3 randOffset; - randOffset.x = -_directionSpread.x + randFloat() * (_directionSpread.x * 2.0f); - randOffset.y = -_directionSpread.y + randFloat() * (_directionSpread.y * 2.0f); - randOffset.z = -_directionSpread.z + randFloat() * (_directionSpread.z * 2.0f); + randOffset.x = -_velocitySpread.x + randFloat() * (_velocitySpread.x * 2.0f); + randOffset.y = -_velocitySpread.y + randFloat() * (_velocitySpread.y * 2.0f); + randOffset.z = -_velocitySpread.z + randFloat() * (_velocitySpread.z * 2.0f); // set initial conditions _particlePositions[i] = glm::vec3(0.0f, 0.0f, 0.0f); - _particleVelocities[i] = _emitDirection + randOffset; + _particleVelocities[i] = _emitVelocity + randOffset; integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 584bc7beff..237f008f1f 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -98,14 +98,14 @@ public: void setEmitRate(float emitRate) { _emitRate = emitRate; } float getEmitRate() const { return _emitRate; } - static const glm::vec3 DEFAULT_EMIT_DIRECTION; - void setEmitDirection(glm::vec3 emitDirection); - const glm::vec3& getEmitDirection() const { return _emitDirection; } + static const glm::vec3 DEFAULT_EMIT_VELOCITY; + void setEmitVelocity(glm::vec3 emitVelocity); + const glm::vec3& getEmitVelocity() const { return _emitVelocity; } - static const glm::vec3 DEFAULT_DIRECTION_SPREAD; - void setDirectionSpread(glm::vec3 directionSpread); - const glm::vec3& getDirectionSpread() const { return _directionSpread; } + static const glm::vec3 DEFAULT_VELOCITY_SPREAD; + void setVelocitySpread(glm::vec3 velocitySpread); + const glm::vec3& getVelocitySpread() const { return _velocitySpread; } static const float DEFAULT_LOCAL_GRAVITY; @@ -144,8 +144,8 @@ protected: quint32 _maxParticles; float _lifespan; float _emitRate; - glm::vec3 _emitDirection; - glm::vec3 _directionSpread; + glm::vec3 _emitVelocity; + glm::vec3 _velocitySpread; float _localGravity; float _particleRadius; quint64 _lastAnimated; From 0031c2a39a37e975a9aa091e0488b64375f6e205 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 11 Aug 2015 16:05:18 -0700 Subject: [PATCH 07/45] changed localGravity prop to acceleration, which can be along any arbitrary direction --- .../entities/src/EntityItemProperties.cpp | 14 ++++++------ libraries/entities/src/EntityItemProperties.h | 4 ++-- libraries/entities/src/EntityPropertyFlags.h | 4 ++-- .../entities/src/ParticleEffectEntityItem.cpp | 22 +++++++++---------- .../entities/src/ParticleEffectEntityItem.h | 8 +++---- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ddf7257775..612f6da900 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -86,7 +86,7 @@ CONSTRUCT_PROPERTY(lifespan, ParticleEffectEntityItem::DEFAULT_LIFESPAN), CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE), CONSTRUCT_PROPERTY(emitVelocity, ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY), CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD), -CONSTRUCT_PROPERTY(localGravity, ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY), +CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), @@ -351,7 +351,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_RATE, emitRate); CHECK_PROPERTY_CHANGE(PROP_EMIT_VELOCITY, emitVelocity); CHECK_PROPERTY_CHANGE(PROP_VELOCITY_SPREAD, velocitySpread); - CHECK_PROPERTY_CHANGE(PROP_LOCAL_GRAVITY, localGravity); + CHECK_PROPERTY_CHANGE(PROP_EMIT_ACCELERATION, emitAcceleration); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); @@ -453,7 +453,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitRate); COPY_PROPERTY_TO_QSCRIPTVALUE(emitVelocity); COPY_PROPERTY_TO_QSCRIPTVALUE(velocitySpread); - COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); + COPY_PROPERTY_TO_QSCRIPTVALUE(emitAcceleration); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); @@ -573,7 +573,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitRate, float, setEmitRate); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitVelocity, glmVec3, setEmitVelocity); COPY_PROPERTY_FROM_QSCRIPTVALUE(velocitySpread, glmVec3, setVelocitySpread); - COPY_PROPERTY_FROM_QSCRIPTVALUE(localGravity, float, setLocalGravity); + COPY_PROPERTY_FROM_QSCRIPTVALUE(emitAcceleration, glmVec3, setEmitAcceleration); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); @@ -814,7 +814,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, properties.getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, properties.getEmitVelocity()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, properties.getVelocitySpread()); - APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, properties.getLocalGravity()); + APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, properties.getEmitAcceleration()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); } @@ -1083,7 +1083,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LOCAL_GRAVITY, float, setLocalGravity); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); } @@ -1214,7 +1214,7 @@ void EntityItemProperties::markAllChanged() { _emitRateChanged = true; _emitVelocityChanged = true; _velocitySpreadChanged = true; - _localGravityChanged = true; + _emitAccelerationChanged = true; _particleRadiusChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index db4ebb9229..9001483358 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -133,7 +133,7 @@ public: DEFINE_PROPERTY(PROP_EMIT_RATE, EmitRate, emitRate, float); DEFINE_PROPERTY_REF(PROP_EMIT_VELOCITY, EmitVelocity, emitVelocity, glm::vec3); DEFINE_PROPERTY_REF(PROP_VELOCITY_SPREAD, VelocitySpread, velocitySpread, glm::vec3); - DEFINE_PROPERTY(PROP_LOCAL_GRAVITY, LocalGravity, localGravity, float); + DEFINE_PROPERTY(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); @@ -312,7 +312,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, Lifespan, lifespan, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRate, emitRate, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitVelocity, emitVelocity, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, LocalGravity, localGravity, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitAcceleration, emitAcceleration, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 66a3fcb2f6..42b5a46e0a 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -98,7 +98,7 @@ enum EntityPropertyList { PROP_EMIT_RATE, PROP_EMIT_VELOCITY, PROP_EMIT_STRENGTH, - PROP_LOCAL_GRAVITY, + PROP_EMIT_ACCELERATION, PROP_PARTICLE_RADIUS, PROP_COMPOUND_SHAPE_URL, // used by Model + zones entities @@ -172,7 +172,7 @@ enum EntityPropertyList { PROP_ATMOSPHERE_OUTER_RADIUS = PROP_EMIT_RATE, PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_VELOCITY, PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH, - PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_LOCAL_GRAVITY, + PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_EMIT_ACCELERATION, PROP_ATMOSPHERE_HAS_STARS = PROP_PARTICLE_RADIUS, PROP_BACKGROUND_MODE = PROP_MODEL_URL, PROP_SKYBOX_COLOR = PROP_ANIMATION_URL, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 99a1e7d2ab..8e26bac210 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -52,7 +52,7 @@ const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 0.0f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); -const float ParticleEffectEntityItem::DEFAULT_LOCAL_GRAVITY = -9.8f; +const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -68,7 +68,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _lifespan(DEFAULT_LIFESPAN), _emitRate(DEFAULT_EMIT_RATE), _emitVelocity(DEFAULT_EMIT_VELOCITY), - _localGravity(DEFAULT_LOCAL_GRAVITY), + _emitAcceleration(DEFAULT_EMIT_ACCELERATION), _particleRadius(DEFAULT_PARTICLE_RADIUS), _lastAnimated(usecTimestampNow()), _animationLoop(), @@ -107,8 +107,8 @@ void ParticleEffectEntityItem::setVelocitySpread(glm::vec3 velocitySpread) { } -void ParticleEffectEntityItem::setLocalGravity(float localGravity) { - _localGravity = localGravity; +void ParticleEffectEntityItem::setEmitAcceleration(glm::vec3 emitAcceleration) { + _emitAcceleration = emitAcceleration; } void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { @@ -132,7 +132,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRate, getEmitRate); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitVelocity, getEmitVelocity); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(localGravity, getLocalGravity); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitAcceleration, getEmitAcceleration); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); @@ -153,7 +153,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifespan, setLifespan); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRate, setEmitRate); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitVelocity, setEmitVelocity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(localGravity, setLocalGravity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitAcceleration, setEmitAcceleration); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocitySpread, setVelocitySpread); @@ -208,7 +208,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); - READ_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, float, setLocalGravity); + READ_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); @@ -231,7 +231,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_LIFESPAN; requestedProperties += PROP_EMIT_RATE; requestedProperties += PROP_EMIT_VELOCITY; - requestedProperties += PROP_LOCAL_GRAVITY; + requestedProperties += PROP_EMIT_ACCELERATION; requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; requestedProperties += PROP_VELOCITY_SPREAD; @@ -258,7 +258,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_LIFESPAN, getLifespan()); APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, getEmitVelocity()); - APPEND_ENTITY_PROPERTY(PROP_LOCAL_GRAVITY, getLocalGravity()); + APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, getEmitAcceleration()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, getVelocitySpread()); @@ -441,8 +441,8 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - glm::vec3 atSquared(0.0f, 0.5f * _localGravity * deltaTime * deltaTime, 0.0f); - glm::vec3 at(0.0f, _localGravity * deltaTime, 0.0f); + glm::vec3 atSquared(0.5f * _emitAcceleration.x * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); + glm::vec3 at(0.0f, _emitAcceleration.y * deltaTime, 0.0f); _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; _particleVelocities[index] += at; } diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 237f008f1f..f25da2bbec 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -108,9 +108,9 @@ public: const glm::vec3& getVelocitySpread() const { return _velocitySpread; } - static const float DEFAULT_LOCAL_GRAVITY; - void setLocalGravity(float localGravity); - float getLocalGravity() const { return _localGravity; } + static const glm::vec3 DEFAULT_EMIT_ACCELERATION; + void setEmitAcceleration(glm::vec3 emitAcceleration); + const glm::vec3& getEmitAcceleration() const { return _emitAcceleration; } static const float DEFAULT_PARTICLE_RADIUS; void setParticleRadius(float particleRadius); @@ -146,7 +146,7 @@ protected: float _emitRate; glm::vec3 _emitVelocity; glm::vec3 _velocitySpread; - float _localGravity; + glm::vec3 _emitAcceleration; float _particleRadius; quint64 _lastAnimated; AnimationLoop _animationLoop; From 2db053e56a23f7fce224e3e7951d81cf3cf052f3 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 11 Aug 2015 17:09:48 -0700 Subject: [PATCH 08/45] adding acceleration spread property --- .../entities/src/EntityItemProperties.cpp | 7 +++++ libraries/entities/src/EntityItemProperties.h | 2 ++ libraries/entities/src/EntityPropertyFlags.h | 1 + .../entities/src/ParticleEffectEntityItem.cpp | 27 ++++++++++++++----- .../entities/src/ParticleEffectEntityItem.h | 5 ++++ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 612f6da900..c6c02f248c 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -87,6 +87,7 @@ CONSTRUCT_PROPERTY(emitRate, ParticleEffectEntityItem::DEFAULT_EMIT_RATE), CONSTRUCT_PROPERTY(emitVelocity, ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY), CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD), CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), +CONSTRUCT_PROPERTY(accelerationSpread, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), @@ -352,6 +353,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_VELOCITY, emitVelocity); CHECK_PROPERTY_CHANGE(PROP_VELOCITY_SPREAD, velocitySpread); CHECK_PROPERTY_CHANGE(PROP_EMIT_ACCELERATION, emitAcceleration); + CHECK_PROPERTY_CHANGE(PROP_ACCELERATION_SPREAD, accelerationSpread); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); @@ -454,6 +456,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitVelocity); COPY_PROPERTY_TO_QSCRIPTVALUE(velocitySpread); COPY_PROPERTY_TO_QSCRIPTVALUE(emitAcceleration); + COPY_PROPERTY_TO_QSCRIPTVALUE(accelerationSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); @@ -574,6 +577,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitVelocity, glmVec3, setEmitVelocity); COPY_PROPERTY_FROM_QSCRIPTVALUE(velocitySpread, glmVec3, setVelocitySpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(emitAcceleration, glmVec3, setEmitAcceleration); + COPY_PROPERTY_FROM_QSCRIPTVALUE(accelerationSpread, glmVec3, setAccelerationSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); @@ -815,6 +819,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, properties.getEmitVelocity()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, properties.getVelocitySpread()); APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, properties.getEmitAcceleration()); + APPEND_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, properties.getAccelerationSpread()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); } @@ -1084,6 +1089,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); } @@ -1215,6 +1221,7 @@ void EntityItemProperties::markAllChanged() { _emitVelocityChanged = true; _velocitySpreadChanged = true; _emitAccelerationChanged = true; + _accelerationSpreadChanged = true; _particleRadiusChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 9001483358..a657efe788 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -134,6 +134,7 @@ public: DEFINE_PROPERTY_REF(PROP_EMIT_VELOCITY, EmitVelocity, emitVelocity, glm::vec3); DEFINE_PROPERTY_REF(PROP_VELOCITY_SPREAD, VelocitySpread, velocitySpread, glm::vec3); DEFINE_PROPERTY(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); + DEFINE_PROPERTY(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); @@ -313,6 +314,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitRate, emitRate, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitVelocity, emitVelocity, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitAcceleration, emitAcceleration, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, AccelerationSpread, accelerationSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 42b5a46e0a..abb8241d8f 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -137,6 +137,7 @@ enum EntityPropertyList { // used by particles PROP_VELOCITY_SPREAD, + PROP_ACCELERATION_SPREAD, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 8e26bac210..91314afc96 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -53,6 +53,7 @@ const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 0.0f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, 0.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -111,6 +112,10 @@ void ParticleEffectEntityItem::setEmitAcceleration(glm::vec3 emitAcceleration) { _emitAcceleration = emitAcceleration; } +void ParticleEffectEntityItem::setAccelerationSpread(glm::vec3 accelerationSpread){ + _accelerationSpread = accelerationSpread; +} + void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { _particleRadius = particleRadius; } @@ -154,6 +159,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRate, setEmitRate); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitVelocity, setEmitVelocity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitAcceleration, setEmitAcceleration); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(accelerationSpread, setAccelerationSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocitySpread, setVelocitySpread); @@ -209,6 +215,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); + READ_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); @@ -232,6 +239,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_EMIT_RATE; requestedProperties += PROP_EMIT_VELOCITY; requestedProperties += PROP_EMIT_ACCELERATION; + requestedProperties += PROP_ACCELERATION_SPREAD; requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; requestedProperties += PROP_VELOCITY_SPREAD; @@ -259,6 +267,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_EMIT_RATE, getEmitRate()); APPEND_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, getEmitVelocity()); APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, getEmitAcceleration()); + APPEND_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, getAccelerationSpread()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, getVelocitySpread()); @@ -441,7 +450,11 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - glm::vec3 atSquared(0.5f * _emitAcceleration.x * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); + glm::vec3 spreadOffset; + spreadOffset.x = -_accelerationSpread.x + randFloat() * (_accelerationSpread.x * 2.0f); + spreadOffset.y = -_accelerationSpread.y + randFloat() * (_accelerationSpread.y * 2.0f); + spreadOffset.z = -_accelerationSpread.z + randFloat() * (_accelerationSpread.z * 2.0f); + glm::vec3 atSquared(0.5f * (_emitAcceleration.x + spreadOffset.x) * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); glm::vec3 at(0.0f, _emitAcceleration.y * deltaTime, 0.0f); _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; _particleVelocities[index] += at; @@ -480,16 +493,16 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { quint32 i = _particleTailIndex; _particleLifetimes[i] = _lifespan; - // jitter the _emitVelocity by a random offset - glm::vec3 randOffset; - randOffset.x = -_velocitySpread.x + randFloat() * (_velocitySpread.x * 2.0f); - randOffset.y = -_velocitySpread.y + randFloat() * (_velocitySpread.y * 2.0f); - randOffset.z = -_velocitySpread.z + randFloat() * (_velocitySpread.z * 2.0f); + + glm::vec3 spreadOffset; + spreadOffset.x = -_velocitySpread.x + randFloat() * (_velocitySpread.x * 2.0f); + spreadOffset.y = -_velocitySpread.y + randFloat() * (_velocitySpread.y * 2.0f); + spreadOffset.z = -_velocitySpread.z + randFloat() * (_velocitySpread.z * 2.0f); // set initial conditions _particlePositions[i] = glm::vec3(0.0f, 0.0f, 0.0f); - _particleVelocities[i] = _emitVelocity + randOffset; + _particleVelocities[i] = _emitVelocity + spreadOffset; integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index f25da2bbec..f116b3d3c3 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -111,6 +111,10 @@ public: static const glm::vec3 DEFAULT_EMIT_ACCELERATION; void setEmitAcceleration(glm::vec3 emitAcceleration); const glm::vec3& getEmitAcceleration() const { return _emitAcceleration; } + + static const glm::vec3 DEFAULT_ACCELERATION_SPREAD; + void setAccelerationSpread(glm::vec3 accelerationSpread); + const glm::vec3& getAccelerationSpread() const { return _accelerationSpread; } static const float DEFAULT_PARTICLE_RADIUS; void setParticleRadius(float particleRadius); @@ -147,6 +151,7 @@ protected: glm::vec3 _emitVelocity; glm::vec3 _velocitySpread; glm::vec3 _emitAcceleration; + glm::vec3 _accelerationSpread; float _particleRadius; quint64 _lastAnimated; AnimationLoop _animationLoop; From 528d662c5890775b3863889869a48cf21bf2e592 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 12 Aug 2015 09:50:01 -0700 Subject: [PATCH 09/45] getting acceleration spread hooked up --- libraries/entities/src/ParticleEffectEntityItem.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 91314afc96..c08b3e9015 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -450,11 +450,7 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - glm::vec3 spreadOffset; - spreadOffset.x = -_accelerationSpread.x + randFloat() * (_accelerationSpread.x * 2.0f); - spreadOffset.y = -_accelerationSpread.y + randFloat() * (_accelerationSpread.y * 2.0f); - spreadOffset.z = -_accelerationSpread.z + randFloat() * (_accelerationSpread.z * 2.0f); - glm::vec3 atSquared(0.5f * (_emitAcceleration.x + spreadOffset.x) * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); + glm::vec3 atSquared(0.5f * _emitAcceleration.x * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); glm::vec3 at(0.0f, _emitAcceleration.y * deltaTime, 0.0f); _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; _particleVelocities[index] += at; From 16279bd41564df61751042ff3ce56ca4bbafa22c Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 12 Aug 2015 14:01:42 -0700 Subject: [PATCH 10/45] emitters trail particles now --- .../src/RenderableParticleEffectEntityItem.cpp | 2 +- libraries/entities/src/ParticleEffectEntityItem.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 2b4626c2c3..a91b17e0ee 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -245,7 +245,7 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { glm::vec3 pos = _transform.getTranslation(); Transform t; t.setRotation(rot); - t.setTranslation(pos); +// t.setTranslation(pos); payload.setModelTransform(t); // transform _particleMinBound and _particleMaxBound corners into world coords diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index c08b3e9015..89db8add5b 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -497,7 +497,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // set initial conditions - _particlePositions[i] = glm::vec3(0.0f, 0.0f, 0.0f); + _particlePositions[i] = getPosition(); _particleVelocities[i] = _emitVelocity + spreadOffset; integrateParticle(i, timeLeftInFrame); From 36ca0c54fcc5e125599ab42f08de0b37a3937307 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 12 Aug 2015 16:13:00 -0700 Subject: [PATCH 11/45] acceleration spread working properly --- .../src/RenderableParticleEffectEntityItem.cpp | 2 +- libraries/entities/src/ParticleEffectEntityItem.cpp | 12 ++++++++++-- libraries/entities/src/ParticleEffectEntityItem.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index a91b17e0ee..4c8f8721c6 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -283,8 +283,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { payload.setPipeline(_untexturedPipeline); } }); - _scene->enqueuePendingChanges(pendingChanges); + } void RenderableParticleEffectEntityItem::createPipelines() { diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 89db8add5b..1ac2372e90 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -80,6 +80,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), + _particleAccelerations(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -450,8 +451,9 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - glm::vec3 atSquared(0.5f * _emitAcceleration.x * deltaTime * deltaTime, 0.5f * _emitAcceleration.y * deltaTime * deltaTime, 0.5f * _emitAcceleration.z * deltaTime * deltaTime); - glm::vec3 at(0.0f, _emitAcceleration.y * deltaTime, 0.0f); + glm::vec3 accel = _particleAccelerations[index]; + glm::vec3 atSquared(0.5f * accel.x * deltaTime * deltaTime, 0.5f * accel.y * deltaTime * deltaTime, 0.5f * accel.z * deltaTime * deltaTime); + glm::vec3 at(accel.x * deltaTime, accel.y * deltaTime, accel.z * deltaTime ); _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; _particleVelocities[index] += at; } @@ -499,6 +501,12 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // set initial conditions _particlePositions[i] = getPosition(); _particleVelocities[i] = _emitVelocity + spreadOffset; + + spreadOffset.x = -_accelerationSpread.x + randFloat() * (_accelerationSpread.x * 2.0f); + spreadOffset.y = -_accelerationSpread.y + randFloat() * (_accelerationSpread.y * 2.0f); + spreadOffset.z = -_accelerationSpread.z + randFloat() * (_accelerationSpread.z * 2.0f); + + _particleAccelerations[i] = _emitAcceleration + spreadOffset; integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index f116b3d3c3..6d60570a06 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -164,6 +164,7 @@ protected: QVector _particleLifetimes; QVector _particlePositions; QVector _particleVelocities; + QVector _particleAccelerations; float _timeUntilNextEmit; // particle arrays are a ring buffer, use these indicies From 81844a82e819753526a98576c940fda5ec6e307d Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 12 Aug 2015 16:25:56 -0700 Subject: [PATCH 12/45] fixed spacing issues and removed dead line --- .../src/RenderableParticleEffectEntityItem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 4c8f8721c6..2bde880ead 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -245,7 +245,6 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { glm::vec3 pos = _transform.getTranslation(); Transform t; t.setRotation(rot); -// t.setTranslation(pos); payload.setModelTransform(t); // transform _particleMinBound and _particleMaxBound corners into world coords @@ -283,8 +282,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { payload.setPipeline(_untexturedPipeline); } }); + _scene->enqueuePendingChanges(pendingChanges); - } void RenderableParticleEffectEntityItem::createPipelines() { From f3d6992dd29e3181481ec306a49e847467ca7569 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 12 Aug 2015 17:28:07 -0700 Subject: [PATCH 13/45] remove outdated comment --- libraries/entities/src/ParticleEffectEntityItem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 1ac2372e90..9ac620821b 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -16,7 +16,6 @@ // - Just to get this out the door, I just did forward Euler integration. There are better ways. // - Gravity always points along the Y axis. Support an actual gravity vector. // - Add the ability to add arbitrary forces to the simulation. -// - Add controls for spread (which is currently hard-coded) and varying emission strength (not currently implemented). // - Add drag. // - Add some kind of support for collisions. // - There's no synchronization of the simulation across clients at all. In fact, it's using rand() under the hood, so From d38d29e0f581bd751e1c19aad5129b573fc20cef Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 10:35:32 -0700 Subject: [PATCH 14/45] fixed argument signatues and optimized particle position calculations --- .../entities/src/ParticleEffectEntityItem.cpp | 14 +++++--------- libraries/entities/src/ParticleEffectEntityItem.h | 8 ++++---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 9ac620821b..21f414a97c 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -99,20 +99,20 @@ void ParticleEffectEntityItem::setLifespan(float lifespan) { _lifespan = lifespan; } -void ParticleEffectEntityItem::setEmitVelocity(glm::vec3 emitVelocity) { +void ParticleEffectEntityItem::setEmitVelocity(const glm::vec3& emitVelocity) { _emitVelocity = emitVelocity; } -void ParticleEffectEntityItem::setVelocitySpread(glm::vec3 velocitySpread) { +void ParticleEffectEntityItem::setVelocitySpread(const glm::vec3& velocitySpread) { _velocitySpread = velocitySpread; } -void ParticleEffectEntityItem::setEmitAcceleration(glm::vec3 emitAcceleration) { +void ParticleEffectEntityItem::setEmitAcceleration(const glm::vec3& emitAcceleration) { _emitAcceleration = emitAcceleration; } -void ParticleEffectEntityItem::setAccelerationSpread(glm::vec3 accelerationSpread){ +void ParticleEffectEntityItem::setAccelerationSpread(const glm::vec3& accelerationSpread){ _accelerationSpread = accelerationSpread; } @@ -450,11 +450,7 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - glm::vec3 accel = _particleAccelerations[index]; - glm::vec3 atSquared(0.5f * accel.x * deltaTime * deltaTime, 0.5f * accel.y * deltaTime * deltaTime, 0.5f * accel.z * deltaTime * deltaTime); - glm::vec3 at(accel.x * deltaTime, accel.y * deltaTime, accel.z * deltaTime ); - _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; - _particleVelocities[index] += at; + _particlePositions[index] += deltaTime * (_particleVelocities[index] + (0.5f * deltaTime) * _particleAccelerations[index]); } void ParticleEffectEntityItem::stepSimulation(float deltaTime) { diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 6d60570a06..bbc14561d4 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -99,21 +99,21 @@ public: float getEmitRate() const { return _emitRate; } static const glm::vec3 DEFAULT_EMIT_VELOCITY; - void setEmitVelocity(glm::vec3 emitVelocity); + void setEmitVelocity(const glm::vec3& emitVelocity); const glm::vec3& getEmitVelocity() const { return _emitVelocity; } static const glm::vec3 DEFAULT_VELOCITY_SPREAD; - void setVelocitySpread(glm::vec3 velocitySpread); + void setVelocitySpread(const glm::vec3& velocitySpread); const glm::vec3& getVelocitySpread() const { return _velocitySpread; } static const glm::vec3 DEFAULT_EMIT_ACCELERATION; - void setEmitAcceleration(glm::vec3 emitAcceleration); + void setEmitAcceleration(const glm::vec3& emitAcceleration); const glm::vec3& getEmitAcceleration() const { return _emitAcceleration; } static const glm::vec3 DEFAULT_ACCELERATION_SPREAD; - void setAccelerationSpread(glm::vec3 accelerationSpread); + void setAccelerationSpread(const glm::vec3& accelerationSpread); const glm::vec3& getAccelerationSpread() const { return _accelerationSpread; } static const float DEFAULT_PARTICLE_RADIUS; From 5b2e966ca571bc0d369c62723581e952209db1be Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 10:55:21 -0700 Subject: [PATCH 15/45] fixing accel issues --- libraries/entities/src/ParticleEffectEntityItem.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 21f414a97c..cc5c698dab 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -450,7 +450,11 @@ void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { } void ParticleEffectEntityItem::integrateParticle(quint32 index, float deltaTime) { - _particlePositions[index] += deltaTime * (_particleVelocities[index] + (0.5f * deltaTime) * _particleAccelerations[index]); + glm::vec3 accel = _particleAccelerations[index]; + glm::vec3 atSquared = (0.5f * deltaTime * deltaTime) * accel; + glm::vec3 at = accel * deltaTime; + _particlePositions[index] += _particleVelocities[index] * deltaTime + atSquared; + _particleVelocities[index] += at; } void ParticleEffectEntityItem::stepSimulation(float deltaTime) { From 9322960c63b7361d2b6bb1020fe576d0df5baa3b Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 15:36:13 -0700 Subject: [PATCH 16/45] updated particle example for new properties --- examples/particles.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/particles.js b/examples/particles.js index deb6228fff..fc1a936a72 100644 --- a/examples/particles.js +++ b/examples/particles.js @@ -39,10 +39,11 @@ this.entity = Entities.addEntity({ type: "ParticleEffect", animationSettings: animationSettings, position: spawnPoint, - textures: "http://www.hyperlogic.org/images/particle.png", - emitRate: emitRate, - emitStrength: emitStrength, - emitDirection: emitDirection, + dimensions: {x: 2, y: 2, z: 2}, + emitVelocity: {x: 0, y: 5, z: 0}, + velocitySpread: {x: 2, y: 0, z: 2}, + emitAcceleration: {x: 0, y: -9.8, z: 0}, + textures: "https://raw.githubusercontent.com/ericrius1/SantasLair/santa/assets/smokeparticle.png", color: color, lifespan: 1.0, visible: true, From 6fe8703492ae9d0663faccf404b05555fd8aa0a4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 15:50:00 -0700 Subject: [PATCH 17/45] added defaults to particle effect for velocity and acceleration --- libraries/entities/src/ParticleEffectEntityItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index cc5c698dab..b5fad9a1e6 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -50,8 +50,8 @@ const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 0.0f, 0.0f); -const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); -const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, 0.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 10.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; From bb84e0e40380fdc697c972ba69e280314b317582 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 15:57:45 -0700 Subject: [PATCH 18/45] fixed defaults --- libraries/entities/src/ParticleEffectEntityItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index b5fad9a1e6..d9b97385b6 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -49,8 +49,8 @@ const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f; const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; -const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 0.0f, 0.0f); -const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 10.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 10.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; From e191a301d80fcc7d207e093d143c3c2895626853 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 13 Aug 2015 16:08:38 -0700 Subject: [PATCH 19/45] added a spread to defaults to create a default fountain effect --- libraries/entities/src/ParticleEffectEntityItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index d9b97385b6..f8420a3323 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -49,8 +49,8 @@ const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f; const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; -const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 10.0f, 0.0f); -const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(0.0f, 0.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_VELOCITY(0.0f, 5.0f, 0.0f); +const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(3.0f, 0.0f, 3.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; From ec25d7994c9dc304b3a6b729cd8297dfdaab6d21 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 14 Aug 2015 21:58:22 -0700 Subject: [PATCH 20/45] bumped protocol number for new particle properties --- libraries/networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 5562490344..7e73b4c660 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityAdd: case EntityEdit: case EntityData: - return VERSION_ENTITIES_POLYLINE; + return VERSION_ENTITIES_PARTICLE_MODIFICATIONS; case AvatarData: return 12; default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 1aeadb1af9..d60fc105e5 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -142,5 +142,6 @@ const PacketVersion VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE const PacketVersion VERSION_ENTITIES_NEW_PROTOCOL_LAYER = 35; const PacketVersion VERSION_POLYVOX_TEXTURES = 36; const PacketVersion VERSION_ENTITIES_POLYLINE = 37; +const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 38; #endif // hifi_PacketHeaders_h \ No newline at end of file From 07c9a0e2bb303f1ffafdd9415b0fd36b687de6e3 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 10:48:58 -0700 Subject: [PATCH 21/45] Add Developer > Crash Interface menu item --- interface/src/Application.cpp | 6 ++++++ interface/src/Application.h | 2 ++ interface/src/Menu.cpp | 2 ++ interface/src/Menu.h | 1 + 4 files changed, 11 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0f3282582f..6bb12d4d06 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5137,3 +5137,9 @@ void Application::emulateMouse(Hand* hand, float click, float shift, int index) _oldHandLeftClick[index] = false; } } + +void Application::crashApplication() { + QObject* object = nullptr; + bool value = object->isWindowType(); + qCDebug(interfaceapp) << "Intentionally crashed Interface"; +} diff --git a/interface/src/Application.h b/interface/src/Application.h index 6394aa12d0..2297ff157e 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -438,6 +438,8 @@ public slots: void reloadResourceCaches(); + void crashApplication(); + private slots: void clearDomainOctreeDetails(); void checkFPS(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f99b3ba579..d08970a693 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -575,6 +575,8 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowOwned); addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowHulls); + addActionToQMenuAndActionHash(developerMenu, MenuOption::CrashInterface, 0, qApp, SLOT(crashApplication())); + MenuWrapper* helpMenu = addMenu("Help"); addActionToQMenuAndActionHash(helpMenu, MenuOption::EditEntitiesHelp, 0, qApp, SLOT(showEditEntitiesHelp())); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 278da363d1..e9ce8bcaba 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -164,6 +164,7 @@ namespace MenuOption { const QString CopyAddress = "Copy Address to Clipboard"; const QString CopyPath = "Copy Path to Clipboard"; const QString CoupleEyelids = "Couple Eyelids"; + const QString CrashInterface = "Crash Interface"; const QString DebugAmbientOcclusion = "Debug Ambient Occlusion"; const QString DecreaseAvatarSize = "Decrease Avatar Size"; const QString DeleteBookmark = "Delete Bookmark..."; From 5fa27a7cf1b9aba48c61691e5d49d80367f25c4b Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 24 Aug 2015 10:59:38 -0700 Subject: [PATCH 22/45] added back computeAndUpdate mmethod for particles, and now handling parsing old streams --- .../RenderableParticleEffectEntityItem.cpp | 2 +- libraries/entities/src/EntityItem.cpp | 1 + .../entities/src/ParticleEffectEntityItem.cpp | 62 +++++++++++++++---- .../entities/src/ParticleEffectEntityItem.h | 2 + 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 59bad7a130..c053a552bd 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -290,7 +290,7 @@ void RenderableParticleEffectEntityItem::createPipelines() { state->setCullMode(gpu::State::CULL_BACK); state->setDepthTest(true, true, gpu::LESS_EQUAL); state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, - gpu::State::INV_SRC_ALPHA, gpu::State::FACTOR_ALPHA, + gpu::State::ONE, gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); auto vertShader = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(untextured_particle_vert))); auto fragShader = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(untextured_particle_frag))); diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 0ffcc00ead..9fa6ccac65 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -610,6 +610,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef auto nodeList = DependencyManager::get(); const QUuid& myNodeID = nodeList->getSessionUUID(); bool weOwnSimulation = _simulationOwner.matchesValidID(myNodeID); + if (args.bitstreamVersion >= VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE) { // pack SimulationOwner and terse update properties near each other diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index f8420a3323..3b95f415aa 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -101,25 +101,51 @@ void ParticleEffectEntityItem::setLifespan(float lifespan) { void ParticleEffectEntityItem::setEmitVelocity(const glm::vec3& emitVelocity) { _emitVelocity = emitVelocity; + computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setVelocitySpread(const glm::vec3& velocitySpread) { _velocitySpread = velocitySpread; + computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setEmitAcceleration(const glm::vec3& emitAcceleration) { _emitAcceleration = emitAcceleration; + computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setAccelerationSpread(const glm::vec3& accelerationSpread){ _accelerationSpread = accelerationSpread; + computeAndUpdateDimensions(); } void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { _particleRadius = particleRadius; } +void ParticleEffectEntityItem::computeAndUpdateDimensions() { + const float time = _lifespan * 1.1f; // add 10% extra time to account for incremental timer accumulation error + + float maxVelocityX = fabsf(_velocity.x) + _velocitySpread.x; + float maxAccelerationX = fabsf(_acceleration.x) + _accelerationSpread.x; + float maxXDistance = (maxVelocityX * time) + (0.5 * maxAccelerationX * time * time); + + float maxVelocityY = fabs(_velocity.y) + _velocitySpread.y; + float maxAccelerationY = fabsf(_acceleration.y) + _accelerationSpread.y; + float maxYDistance = (maxVelocityY * time) + (0.5 * maxAccelerationY * time * time); + + float maxVelocityZ = fabsf(_velocity.z) + _velocitySpread.z; + float maxAccelerationZ = fabsf(_acceleration.z) + _accelerationSpread.z; + float maxZDistance = (maxVelocityZ * time) + (0.5 * maxAccelerationZ * time * time); + + float maxDistance = std::max(maxXDistance, std::max(maxYDistance, maxZDistance)); + + //times 2 because dimensions are diameters not radii + glm::vec3 dims(2.0 * maxDistance); + qDebug() << "max Distance: ***** : " << maxDistance; + EntityItem::setDimensions(dims); +} EntityItemProperties ParticleEffectEntityItem::getProperties() const { @@ -207,18 +233,30 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch if (propertyFlags.getHasProperty(PROP_ANIMATION_FRAME_INDEX)) { setAnimationFrameIndex(animationFrameIndex); } - - READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); - READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); - READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); - READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); - READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); - READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); - READ_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); - READ_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); - READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); - READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); - READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_MODIFICATIONS) { + READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); + READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); + READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); + READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); + READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); + READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); + READ_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); + READ_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); + READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); + READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); + } else { + READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); + READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); + READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); + READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); + READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); + READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); + READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration); + READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); + } return bytesRead; } diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index bbc14561d4..4ed9216e85 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -119,6 +119,8 @@ public: static const float DEFAULT_PARTICLE_RADIUS; void setParticleRadius(float particleRadius); float getParticleRadius() const { return _particleRadius; } + + void computeAndUpdateDimensions(); bool getAnimationIsPlaying() const { return _animationLoop.isRunning(); } From 63ad972576d4dbf4569cb20d2f6f7d86ad4c2b78 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 11:09:41 -0700 Subject: [PATCH 23/45] Write and delete "application is running" marker file --- interface/src/Application.cpp | 4 ++++ interface/src/CrashHandler.cpp | 42 ++++++++++++++++++++++++++++++++++ interface/src/CrashHandler.h | 27 ++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 interface/src/CrashHandler.cpp create mode 100644 interface/src/CrashHandler.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6bb12d4d06..8b59fd16d4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -104,6 +104,7 @@ #include #include "AudioClient.h" +#include "CrashHandler.h" #include "DiscoverabilityManager.h" #include "GLCanvas.h" #include "LODManager.h" @@ -256,6 +257,9 @@ bool setupEssentials(int& argc, char** argv) { // Set build version QCoreApplication::setApplicationVersion(BUILD_VERSION); + CrashHandler::writeRunningMarkerFiler(); + qAddPostRoutine(CrashHandler::deleteRunningMarkerFile); + DependencyManager::registerInheritance(); DependencyManager::registerInheritance(); DependencyManager::registerInheritance(); diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp new file mode 100644 index 0000000000..c95e513898 --- /dev/null +++ b/interface/src/CrashHandler.cpp @@ -0,0 +1,42 @@ +// +// CrashHandler.cpp +// interface/src +// +// Created by David Rowe on 24 Aug 2015. +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "CrashHandler.h" + +#include +#include +#include +#include +#include + +static const QString RUNNING_MARKER_FILENAME = "Interface.running"; + +void CrashHandler::writeRunningMarkerFiler() { + QFile runningMarkerFile(runningMarkerFilePath()); + if (!runningMarkerFile.exists()) { + runningMarkerFile.open(QIODevice::WriteOnly); + runningMarkerFile.close(); + } +} +void CrashHandler::deleteRunningMarkerFile() { + QFile runningMarkerFile(runningMarkerFilePath()); + if (runningMarkerFile.exists()) { + runningMarkerFile.remove(); + } +} + +const QString CrashHandler::runningMarkerFilePath() { + QSettings::setDefaultFormat(QSettings::IniFormat); + QSettings applicationInfo(PathUtils::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); + applicationInfo.beginGroup("INFO"); + QCoreApplication::setOrganizationName(applicationInfo.value("organizationName").toString()); + return QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + RUNNING_MARKER_FILENAME; +} diff --git a/interface/src/CrashHandler.h b/interface/src/CrashHandler.h new file mode 100644 index 0000000000..d354c49d07 --- /dev/null +++ b/interface/src/CrashHandler.h @@ -0,0 +1,27 @@ +// +// CrashHandler.h +// interface/src +// +// Created by David Rowe on 24 Aug 2015. +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_CrashHandler_h +#define hifi_CrashHandler_h + +#include + +class CrashHandler { + +public: + static void writeRunningMarkerFiler(); + static void deleteRunningMarkerFile(); + +private: + static const QString runningMarkerFilePath(); +}; + +#endif // hifi_CrashHandler_h From 9c782f6a6d59f6c3ed1f2207daa7283de68cc967 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 12:45:35 -0700 Subject: [PATCH 24/45] Display dialog of crash handling options at startup if Interface crashed Default option and Esc continue without taking any action. --- interface/src/Application.cpp | 1 + interface/src/CrashHandler.cpp | 59 ++++++++++++++++++++++++++++++++++ interface/src/CrashHandler.h | 11 +++++++ 3 files changed, 71 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8b59fd16d4..ca09960abd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -257,6 +257,7 @@ bool setupEssentials(int& argc, char** argv) { // Set build version QCoreApplication::setApplicationVersion(BUILD_VERSION); + CrashHandler::checkForAndHandleCrash(); CrashHandler::writeRunningMarkerFiler(); qAddPostRoutine(CrashHandler::deleteRunningMarkerFile); diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index c95e513898..b58e739176 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -12,13 +12,72 @@ #include "CrashHandler.h" #include +#include +#include #include +#include #include +#include #include #include +#include static const QString RUNNING_MARKER_FILENAME = "Interface.running"; +void CrashHandler::checkForAndHandleCrash() { + QFile runningMarkerFile(runningMarkerFilePath()); + if (runningMarkerFile.exists()) { + Action action = promptUserForAction(); + if (action != DO_NOTHING) { + handleCrash(action); + } + } +} + +CrashHandler::Action CrashHandler::promptUserForAction() { + QDialog crashDialog; + crashDialog.setWindowTitle("Interface Crashed Last Run"); + + QVBoxLayout* layout = new QVBoxLayout; + + QLabel* label = new QLabel("What would you like to do?"); + layout->addWidget(label); + + QRadioButton* option1 = new QRadioButton("Delete Interface.ini"); + QRadioButton* option2 = new QRadioButton("Delete Interface.ini but retain login and avatar info."); + QRadioButton* option3 = new QRadioButton("Continue with my current Interface.ini"); + option3->setChecked(true); + layout->addWidget(option1); + layout->addWidget(option2); + layout->addWidget(option3); + layout->addSpacing(12); + layout->addStretch(); + + QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok); + layout->addWidget(buttons); + crashDialog.connect(buttons, SIGNAL(accepted()), SLOT(accept())); + + crashDialog.setLayout(layout); + + int result = crashDialog.exec(); + + if (result == QDialog::Accepted) { + if (option1->isChecked()) { + return CrashHandler::DELETE_INTERFACE; + } + if (option2->isChecked()) { + return CrashHandler::RETAIN_LOGIN_AND_AVATAR_INFO; + } + } + + // Dialog cancelled or "do nothing" option chosen + return CrashHandler::DO_NOTHING; +} + +void CrashHandler::handleCrash(CrashHandler::Action action) { + // TODO +} + void CrashHandler::writeRunningMarkerFiler() { QFile runningMarkerFile(runningMarkerFilePath()); if (!runningMarkerFile.exists()) { diff --git a/interface/src/CrashHandler.h b/interface/src/CrashHandler.h index d354c49d07..2b3b78c1f2 100644 --- a/interface/src/CrashHandler.h +++ b/interface/src/CrashHandler.h @@ -17,10 +17,21 @@ class CrashHandler { public: + static void checkForAndHandleCrash(); + static void writeRunningMarkerFiler(); static void deleteRunningMarkerFile(); private: + enum Action { + DELETE_INTERFACE, + RETAIN_LOGIN_AND_AVATAR_INFO, + DO_NOTHING + }; + + static Action promptUserForAction(); + static void handleCrash(Action action); + static const QString runningMarkerFilePath(); }; From f6cf77ae689434964ea7b60a5f04494ccead53a4 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 13:24:31 -0700 Subject: [PATCH 25/45] Add Developer > Display Crash Options menu item Is enabled by default. Disabling it stops the display of the crash handling options dialog at start-up. --- interface/src/Application.cpp | 2 ++ interface/src/CrashHandler.cpp | 16 +++++++++------- interface/src/Menu.cpp | 1 + interface/src/Menu.h | 1 + libraries/shared/src/SettingInterface.cpp | 11 +++++++---- libraries/shared/src/SettingInterface.h | 1 + 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ca09960abd..6e8c1065c9 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -257,6 +257,8 @@ bool setupEssentials(int& argc, char** argv) { // Set build version QCoreApplication::setApplicationVersion(BUILD_VERSION); + Setting::preInit(); + CrashHandler::checkForAndHandleCrash(); CrashHandler::writeRunningMarkerFiler(); qAddPostRoutine(CrashHandler::deleteRunningMarkerFile); diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index b58e739176..c64aa3d201 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -22,14 +22,20 @@ #include #include +#include "Menu.h" + static const QString RUNNING_MARKER_FILENAME = "Interface.running"; void CrashHandler::checkForAndHandleCrash() { QFile runningMarkerFile(runningMarkerFilePath()); if (runningMarkerFile.exists()) { - Action action = promptUserForAction(); - if (action != DO_NOTHING) { - handleCrash(action); + QSettings settings; + settings.beginGroup("Developer"); + if (settings.value(MenuOption::DisplayCrashOptions).toBool()) { + Action action = promptUserForAction(); + if (action != DO_NOTHING) { + handleCrash(action); + } } } } @@ -93,9 +99,5 @@ void CrashHandler::deleteRunningMarkerFile() { } const QString CrashHandler::runningMarkerFilePath() { - QSettings::setDefaultFormat(QSettings::IniFormat); - QSettings applicationInfo(PathUtils::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); - applicationInfo.beginGroup("INFO"); - QCoreApplication::setOrganizationName(applicationInfo.value("organizationName").toString()); return QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + RUNNING_MARKER_FILENAME; } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index d08970a693..8c86d47710 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -575,6 +575,7 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowOwned); addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowHulls); + addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::DisplayCrashOptions, 0, true); addActionToQMenuAndActionHash(developerMenu, MenuOption::CrashInterface, 0, qApp, SLOT(crashApplication())); MenuWrapper* helpMenu = addMenu("Help"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index e9ce8bcaba..f81a38872e 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -173,6 +173,7 @@ namespace MenuOption { const QString DisableLightEntities = "Disable Light Entities"; const QString DisableNackPackets = "Disable Entity NACK Packets"; const QString DiskCacheEditor = "Disk Cache Editor"; + const QString DisplayCrashOptions = "Display Crash Options"; const QString DisplayHands = "Show Hand Info"; const QString DisplayHandTargets = "Show Hand Targets"; const QString DisplayModelBounds = "Display Model Bounds"; diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index b60ffc0891..b3b9ce32f9 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -35,9 +35,9 @@ namespace Setting { settingsManagerThread->quit(); settingsManagerThread->wait(); } - - // Sets up the settings private instance. Should only be run once at startup - void init() { + + // Set up application settings. Should only be run once at startup. + void preInit() { // read the ApplicationInfo.ini file for Name/Version/Domain information QSettings::setDefaultFormat(QSettings::IniFormat); QSettings applicationInfo(PathUtils::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); @@ -46,7 +46,10 @@ namespace Setting { QCoreApplication::setApplicationName(applicationInfo.value("name").toString()); QCoreApplication::setOrganizationName(applicationInfo.value("organizationName").toString()); QCoreApplication::setOrganizationDomain(applicationInfo.value("organizationDomain").toString()); - + } + + // Sets up the settings private instance. Should only be run once at startup. preInit() must be run beforehand, + void init() { // Let's set up the settings Private instance on its own thread QThread* thread = new QThread(); Q_CHECK_PTR(thread); diff --git a/libraries/shared/src/SettingInterface.h b/libraries/shared/src/SettingInterface.h index 5092fd09c8..c8b1595a75 100644 --- a/libraries/shared/src/SettingInterface.h +++ b/libraries/shared/src/SettingInterface.h @@ -16,6 +16,7 @@ #include namespace Setting { + void preInit(); void init(); void cleanupSettings(); From 110e7a773b196ffe2589c2a5d57d485a372cc84e Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 13:36:03 -0700 Subject: [PATCH 26/45] Implement crash option that deletes Interface.ini --- interface/src/CrashHandler.cpp | 14 +++++++++++++- interface/src/CrashHandler.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index c64aa3d201..6e9897fb82 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -69,7 +69,7 @@ CrashHandler::Action CrashHandler::promptUserForAction() { if (result == QDialog::Accepted) { if (option1->isChecked()) { - return CrashHandler::DELETE_INTERFACE; + return CrashHandler::DELETE_INTERFACE_INI; } if (option2->isChecked()) { return CrashHandler::RETAIN_LOGIN_AND_AVATAR_INFO; @@ -81,7 +81,19 @@ CrashHandler::Action CrashHandler::promptUserForAction() { } void CrashHandler::handleCrash(CrashHandler::Action action) { + if (action == CrashHandler::DELETE_INTERFACE_INI) { + QSettings settings; + QFile settingsFile(settings.fileName()); + if (settingsFile.exists()) { + settingsFile.remove(); + } + return; + } + // TODO + + // CrashHandler::DO_NOTHING or unexpected value + return; } void CrashHandler::writeRunningMarkerFiler() { diff --git a/interface/src/CrashHandler.h b/interface/src/CrashHandler.h index 2b3b78c1f2..fc754cf1ac 100644 --- a/interface/src/CrashHandler.h +++ b/interface/src/CrashHandler.h @@ -24,7 +24,7 @@ public: private: enum Action { - DELETE_INTERFACE, + DELETE_INTERFACE_INI, RETAIN_LOGIN_AND_AVATAR_INFO, DO_NOTHING }; From 110ba131a614729d2d9ec6bfb73496fb58140512 Mon Sep 17 00:00:00 2001 From: Lars Christensen Date: Tue, 25 Aug 2015 01:36:19 +0200 Subject: [PATCH 27/45] moved translation efforts into subdir --- interface/{ => i18n}/interface_da.ts | 0 interface/{ => i18n}/interface_en.ts | 0 interface/src/main.cpp | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename interface/{ => i18n}/interface_da.ts (100%) rename interface/{ => i18n}/interface_en.ts (100%) diff --git a/interface/interface_da.ts b/interface/i18n/interface_da.ts similarity index 100% rename from interface/interface_da.ts rename to interface/i18n/interface_da.ts diff --git a/interface/interface_en.ts b/interface/i18n/interface_en.ts similarity index 100% rename from interface/interface_en.ts rename to interface/i18n/interface_en.ts diff --git a/interface/src/main.cpp b/interface/src/main.cpp index e591034fb5..1de8f9224c 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -103,7 +103,7 @@ int main(int argc, const char* argv[]) { Application app(argc, const_cast(argv), startupTime); QTranslator translator; - translator.load("interface_en"); + translator.load("i18n/interface_en"); app.installTranslator(&translator); qCDebug(interfaceapp, "Created QT Application."); From b27d25b46edc0f0dd1b047f1d7eda8f5604718c8 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 24 Aug 2015 16:41:25 -0700 Subject: [PATCH 28/45] Implement crash option that retains only login and avatar information --- interface/src/CrashHandler.cpp | 87 ++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index 6e9897fb82..b6d28ef161 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -22,16 +22,22 @@ #include #include +#include "DataServerAccountInfo.h" #include "Menu.h" +Q_DECLARE_METATYPE(DataServerAccountInfo) + static const QString RUNNING_MARKER_FILENAME = "Interface.running"; void CrashHandler::checkForAndHandleCrash() { QFile runningMarkerFile(runningMarkerFilePath()); if (runningMarkerFile.exists()) { + QSettings::setDefaultFormat(QSettings::IniFormat); QSettings settings; settings.beginGroup("Developer"); - if (settings.value(MenuOption::DisplayCrashOptions).toBool()) { + bool displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions).toBool(); + settings.endGroup(); + if (displayCrashOptions) { Action action = promptUserForAction(); if (action != DO_NOTHING) { handleCrash(action); @@ -81,19 +87,80 @@ CrashHandler::Action CrashHandler::promptUserForAction() { } void CrashHandler::handleCrash(CrashHandler::Action action) { - if (action == CrashHandler::DELETE_INTERFACE_INI) { - QSettings settings; - QFile settingsFile(settings.fileName()); - if (settingsFile.exists()) { - settingsFile.remove(); - } + if (action != CrashHandler::DELETE_INTERFACE_INI && action != CrashHandler::RETAIN_LOGIN_AND_AVATAR_INFO) { + // CrashHandler::DO_NOTHING or unexpected value return; } - // TODO + QSettings::setDefaultFormat(QSettings::IniFormat); + QSettings settings; + const QString ADDRESS_MANAGER_GROUP = "AddressManager"; + const QString ADDRESS_KEY = "address"; + const QString AVATAR_GROUP = "Avatar"; + const QString DISPLAY_NAME_KEY = "displayName"; + const QString FULL_AVATAR_URL_KEY = "fullAvatarURL"; + const QString FULL_AVATAR_MODEL_NAME_KEY = "fullAvatarModelName"; + const QString ACCOUNTS_GROUP = "accounts"; + QString displayName; + QUrl fullAvatarURL; + QString fullAvatarModelName; + QUrl address; + QMap accounts; - // CrashHandler::DO_NOTHING or unexpected value - return; + if (action == CrashHandler::RETAIN_LOGIN_AND_AVATAR_INFO) { + // Read login and avatar info + + qRegisterMetaType("DataServerAccountInfo"); + qRegisterMetaTypeStreamOperators("DataServerAccountInfo"); + + // Location and orientation + settings.beginGroup(ADDRESS_MANAGER_GROUP); + address = settings.value(ADDRESS_KEY).toUrl(); + settings.endGroup(); + + // Display name and avatar + settings.beginGroup(AVATAR_GROUP); + displayName = settings.value(DISPLAY_NAME_KEY).toString(); + fullAvatarURL = settings.value(FULL_AVATAR_URL_KEY).toUrl(); + fullAvatarModelName = settings.value(FULL_AVATAR_MODEL_NAME_KEY).toString(); + settings.endGroup(); + + // Accounts + settings.beginGroup(ACCOUNTS_GROUP); + foreach(const QString& key, settings.allKeys()) { + accounts.insert(key, settings.value(key).value()); + } + settings.endGroup(); + } + + // Delete Interface.ini + QFile settingsFile(settings.fileName()); + if (settingsFile.exists()) { + settingsFile.remove(); + } + + if (action == CrashHandler::RETAIN_LOGIN_AND_AVATAR_INFO) { + // Write login and avatar info + + // Location and orientation + settings.beginGroup(ADDRESS_MANAGER_GROUP); + settings.setValue(ADDRESS_KEY, address); + settings.endGroup(); + + // Display name and avatar + settings.beginGroup(AVATAR_GROUP); + settings.setValue(DISPLAY_NAME_KEY, displayName); + settings.setValue(FULL_AVATAR_URL_KEY, fullAvatarURL); + settings.setValue(FULL_AVATAR_MODEL_NAME_KEY, fullAvatarModelName); + settings.endGroup(); + + // Accounts + settings.beginGroup(ACCOUNTS_GROUP); + foreach(const QString& key, accounts.keys()) { + settings.setValue(key, QVariant::fromValue(accounts.value(key))); + } + settings.endGroup(); + } } void CrashHandler::writeRunningMarkerFiler() { From 324f592719a8a33e6d6bfb918e73faacfdb202bf Mon Sep 17 00:00:00 2001 From: Lars Christensen Date: Tue, 25 Aug 2015 01:55:52 +0200 Subject: [PATCH 29/45] updated FontAwesome to v4.4 --- .../resources/fonts/fontawesome-webfont.ttf | Bin 122092 -> 138204 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/resources/fonts/fontawesome-webfont.ttf b/interface/resources/fonts/fontawesome-webfont.ttf index ed9372f8ea0fbaa04f42630a48887e4b38945345..d7994e13086b1ac1a216bd754c93e1bccd65f237 100644 GIT binary patch delta 19019 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 JJK@Cu{|~g|*opuE From a98a867b06bb10b097bf057ff784b0aa8288358c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 25 Aug 2015 11:07:20 -0700 Subject: [PATCH 30/45] Delete Interface.ini.lock before accessing to check crash option --- libraries/shared/src/SettingInterface.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index b3b9ce32f9..11ed64cac4 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -46,6 +46,15 @@ namespace Setting { QCoreApplication::setApplicationName(applicationInfo.value("name").toString()); QCoreApplication::setOrganizationName(applicationInfo.value("organizationName").toString()); QCoreApplication::setOrganizationDomain(applicationInfo.value("organizationDomain").toString()); + + // Delete Interface.ini.lock file if it exists, otherwise Interface freezes. + QSettings settings; + QString settingsLockFilename = settings.fileName() + ".lock"; + QFile settingsLockFile(settingsLockFilename); + if (settingsLockFile.exists()) { + bool deleted = settingsLockFile.remove(); + qCDebug(shared) << (deleted ? "Deleted" : "Failed to delete") << "settings lock file" << settingsLockFilename; + } } // Sets up the settings private instance. Should only be run once at startup. preInit() must be run beforehand, @@ -58,14 +67,6 @@ namespace Setting { privateInstance = new Manager(); Q_CHECK_PTR(privateInstance); - // Delete Interface.ini.lock file if it exists, otherwise Interface freezes. - QString settingsLockFilename = privateInstance->fileName() + ".lock"; - QFile settingsLockFile(settingsLockFilename); - if (settingsLockFile.exists()) { - bool deleted = settingsLockFile.remove(); - qCDebug(shared) << (deleted ? "Deleted" : "Failed to delete") << "settings lock file" << settingsLockFilename; - } - QObject::connect(privateInstance, SIGNAL(destroyed()), thread, SLOT(quit())); QObject::connect(thread, SIGNAL(started()), privateInstance, SLOT(startTimer())); QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); From 7c8ff4dcbdce6cb676f2ed341f32d2b64b63533c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 25 Aug 2015 11:07:55 -0700 Subject: [PATCH 31/45] If Interface.ini doesn't contain crash option value assume default --- interface/src/CrashHandler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index b6d28ef161..349b48da37 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -35,9 +35,10 @@ void CrashHandler::checkForAndHandleCrash() { QSettings::setDefaultFormat(QSettings::IniFormat); QSettings settings; settings.beginGroup("Developer"); - bool displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions).toBool(); + QVariant displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions); settings.endGroup(); - if (displayCrashOptions) { + if (!displayCrashOptions.isValid() // Option does not exist in Interface.ini so assume default behavior. + || displayCrashOptions.toBool()) { Action action = promptUserForAction(); if (action != DO_NOTHING) { handleCrash(action); From 1f541832b69f26bdd223e2fe19b098a52e0d5d2a Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 25 Aug 2015 14:24:15 -0700 Subject: [PATCH 32/45] Reword dialog --- interface/src/CrashHandler.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index 349b48da37..ce5facb580 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -53,12 +53,12 @@ CrashHandler::Action CrashHandler::promptUserForAction() { QVBoxLayout* layout = new QVBoxLayout; - QLabel* label = new QLabel("What would you like to do?"); + QLabel* label = new QLabel("If you are having trouble starting would you like to reset your settings?"); layout->addWidget(label); - QRadioButton* option1 = new QRadioButton("Delete Interface.ini"); - QRadioButton* option2 = new QRadioButton("Delete Interface.ini but retain login and avatar info."); - QRadioButton* option3 = new QRadioButton("Continue with my current Interface.ini"); + QRadioButton* option1 = new QRadioButton("Reset all my settings"); + QRadioButton* option2 = new QRadioButton("Reset my settings but retain login and avatar info."); + QRadioButton* option3 = new QRadioButton("Continue with my current settings"); option3->setChecked(true); layout->addWidget(option1); layout->addWidget(option2); From f25b75093c8230dd446f6d37b27fd997a76bc37a Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 26 Aug 2015 09:44:29 -0700 Subject: [PATCH 33/45] cleaned up conditional bitstream parsing --- .../entities/src/ParticleEffectEntityItem.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index f2b3953b70..bb91e44aa6 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -234,25 +234,20 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch if (propertyFlags.getHasProperty(PROP_ANIMATION_FRAME_INDEX)) { setAnimationFrameIndex(animationFrameIndex); } + READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); + READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); + READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); + READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); + READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); + READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_MODIFICATIONS) { - READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); - READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); - READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); - READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); - READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); - READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); } else { - READ_ENTITY_PROPERTY(PROP_ANIMATION_SETTINGS, QString, setAnimationSettings); - READ_ENTITY_PROPERTY(PROP_SHAPE_TYPE, ShapeType, updateShapeType); - READ_ENTITY_PROPERTY(PROP_MAX_PARTICLES, quint32, setMaxParticles); - READ_ENTITY_PROPERTY(PROP_LIFESPAN, float, setLifespan); - READ_ENTITY_PROPERTY(PROP_EMIT_RATE, float, setEmitRate); - READ_ENTITY_PROPERTY(PROP_EMIT_VELOCITY, glm::vec3, setEmitVelocity); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration); READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); From 5586c2ff17ecc6df952d606bf8357e15c340ded7 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 26 Aug 2015 11:45:19 -0700 Subject: [PATCH 34/45] fixed ordering of bitsream reading for old svo files with particle entities --- libraries/entities/src/ParticleEffectEntityItem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index bb91e44aa6..9e45efe88d 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -248,8 +248,11 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); READ_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, glm::vec3, setVelocitySpread); } else { + // EMIT_STRENGTH FAKEOUT READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); - READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration); + // LOCAL_GRAVITY FAKEOUT + READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); + // ACTUALLY PARTICLE RADIUS READ_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, float, setParticleRadius); READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); } From 0fc2713be1578aa8cc3b11f96f03b46abf6c24c8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 26 Aug 2015 12:40:09 -0700 Subject: [PATCH 35/45] don't request a cert from peer in HTTPSManager --- libraries/embedded-webserver/src/HTTPSManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/embedded-webserver/src/HTTPSManager.cpp b/libraries/embedded-webserver/src/HTTPSManager.cpp index 94e1a35e20..a745d7605e 100644 --- a/libraries/embedded-webserver/src/HTTPSManager.cpp +++ b/libraries/embedded-webserver/src/HTTPSManager.cpp @@ -30,6 +30,7 @@ void HTTPSManager::incomingConnection(qintptr socketDescriptor) { sslSocket->setLocalCertificate(_certificate); sslSocket->setPrivateKey(_privateKey); + sslSocket->setPeerVerifyMode(QSslSocket::VerifyNone); if (sslSocket->setSocketDescriptor(socketDescriptor)) { new HTTPSConnection(sslSocket, this); @@ -48,4 +49,4 @@ bool HTTPSManager::handleHTTPSRequest(HTTPSConnection* connection, const QUrl& u bool HTTPSManager::requestHandledByRequestHandler(HTTPConnection* connection, const QUrl& url) { return _sslRequestHandler && _sslRequestHandler->handleHTTPSRequest(reinterpret_cast(connection), url); -} \ No newline at end of file +} From 96c74ebbd5f697bdfcc29470ac9db79b3d3ac31b Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Thu, 27 Aug 2015 12:25:40 -0700 Subject: [PATCH 36/45] Enable Rig Animations is now a developer menu item (rather than requiring javascript to set). Also turning it off resets you to bind pose and deliberately throws away old animations. Default animations are the new ones for our standard T-pose. (Had been for the double-A pose fightbot.) Rig state machine now does "backup", and doesn't apply strafe while turning. --- interface/src/Menu.cpp | 2 ++ interface/src/Menu.h | 1 + interface/src/avatar/MyAvatar.cpp | 7 ++++--- interface/src/avatar/MyAvatar.h | 2 +- libraries/animation/src/Rig.cpp | 26 ++++++++++++-------------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 17e64b5765..1d90e2c771 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -431,6 +431,8 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderFocusIndicator, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ShowWhosLookingAtMe, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::FixGaze, 0, false); + addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableRigAnimations, 0, false, + avatar, SLOT(setEnableRigAnimations(bool))); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::DisableEyelidAdjustment, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::Connexion, diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 9bcfd1f7aa..94e49abcc7 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -188,6 +188,7 @@ namespace MenuOption { const QString EditEntitiesHelp = "Edit Entities Help..."; const QString Enable3DTVMode = "Enable 3DTV Mode"; const QString EnableCharacterController = "Enable avatar collisions"; + const QString EnableRigAnimations = "Enable Rig Animations"; const QString ExpandMyAvatarSimulateTiming = "Expand /myAvatar/simulation"; const QString ExpandMyAvatarTiming = "Expand /myAvatar"; const QString ExpandOtherAvatarTiming = "Expand /otherAvatar"; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index eb72ddd2fd..bf42cfa7e1 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -705,9 +705,10 @@ float loadSetting(QSettings& settings, const char* name, float defaultValue) { } void MyAvatar::setEnableRigAnimations(bool isEnabled) { - Settings settings; - settings.setValue("enableRig", isEnabled); _rig->setEnableRig(isEnabled); + if (!isEnabled) { + _rig->deleteAnimations(); + } } void MyAvatar::loadData() { @@ -769,7 +770,7 @@ void MyAvatar::loadData() { setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString()); settings.endGroup(); - _rig->setEnableRig(settings.value("enableRig").toBool()); + _rig->setEnableRig(Menu::getInstance()->isOptionChecked(MenuOption::EnableRigAnimations)); } void MyAvatar::saveAttachmentData(const AttachmentData& attachment) const { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 8ff9211101..9e7ab11aa6 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -87,7 +87,6 @@ public: Q_INVOKABLE AnimationDetails getAnimationDetailsByRole(const QString& role); Q_INVOKABLE AnimationDetails getAnimationDetails(const QString& url); void clearJointAnimationPriorities(); - Q_INVOKABLE void setEnableRigAnimations(bool isEnabled); // get/set avatar data void saveData(); @@ -190,6 +189,7 @@ public slots: void loadLastRecording(); virtual void rebuildSkeletonBody(); + void setEnableRigAnimations(bool isEnabled); signals: void transformChanged(); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 2212e06e31..3e466b94d6 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -100,24 +100,21 @@ AnimationHandlePointer Rig::addAnimationByRole(const QString& role, const QStrin AnimationHandlePointer handle = createAnimationHandle(); QString standard = ""; if (url.isEmpty()) { // Default animations for fight club - const QString& base = "https://hifi-public.s3.amazonaws.com/ozan/"; + const QString& base = "https://hifi-public.s3.amazonaws.com/ozan/anim/standard_anims/"; if (role == "walk") { - standard = base + "support/FightClubBotTest1/Animations/standard_walk.fbx"; - lastFrame = 60; + standard = base + "walk_fwd.fbx"; + } else if (role == "backup") { + standard = base + "walk_bwd.fbx"; } else if (role == "leftTurn") { - standard = base + "support/FightClubBotTest1/Animations/left_turn_noHipRotation.fbx"; - lastFrame = 29; + standard = base + "turn_left.fbx"; } else if (role == "rightTurn") { - standard = base + "support/FightClubBotTest1/Animations/right_turn_noHipRotation.fbx"; - lastFrame = 31; + standard = base + "turn_right.fbx"; } else if (role == "leftStrafe") { - standard = base + "animations/fightclub_bot_anims/side_step_left_inPlace.fbx"; - lastFrame = 31; + standard = base + "strafe_left.fbx"; } else if (role == "rightStrafe") { - standard = base + "animations/fightclub_bot_anims/side_step_right_inPlace.fbx"; - lastFrame = 31; + standard = base + "strafe_right.fbx"; } else if (role == "idle") { - standard = base + "support/FightClubBotTest1/Animations/standard_idle.fbx"; + standard = base + "idle.fbx"; fps = 25.0f; } if (!standard.isEmpty()) { @@ -438,11 +435,12 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos } } }; - updateRole("walk", std::abs(forwardSpeed) > 0.01f); + updateRole("walk", forwardSpeed > 0.01f); + updateRole("backup", forwardSpeed < -0.01f); bool isTurning = std::abs(rightTurningSpeed) > 0.5f; updateRole("rightTurn", isTurning && (rightTurningSpeed > 0)); updateRole("leftTurn", isTurning && (rightTurningSpeed < 0)); - bool isStrafing = std::abs(rightLateralSpeed) > 0.01f; + bool isStrafing = !isTurning && (std::abs(rightLateralSpeed) > 0.01f); updateRole("rightStrafe", isStrafing && (rightLateralSpeed > 0.0f)); updateRole("leftStrafe", isStrafing && (rightLateralSpeed < 0.0f)); updateRole("idle", !isMoving); // Must be last, as it makes isMoving bogus. From c9d799f5e06e6edebc31c3433c78147091ba5781 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 27 Aug 2015 13:32:00 -0700 Subject: [PATCH 37/45] Auto refresh entities list upon display of Entities tab --- examples/libraries/entityList.js | 6 ++++++ interface/src/scripting/WebWindowClass.cpp | 1 + interface/src/scripting/WebWindowClass.h | 1 + 3 files changed, 8 insertions(+) diff --git a/examples/libraries/entityList.js b/examples/libraries/entityList.js index 241ffb2766..0fd1cd5a06 100644 --- a/examples/libraries/entityList.js +++ b/examples/libraries/entityList.js @@ -83,5 +83,11 @@ EntityListTool = function(opts) { } }); + webView.visibilityChanged.connect(function (visible) { + if (visible) { + that.sendUpdate(); + } + }); + return that; }; diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index f0fd937a7d..a549410305 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -45,6 +45,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid auto dockWidget = new QDockWidget(title, toolWindow); dockWidget->setFeatures(QDockWidget::DockWidgetMovable); + connect(dockWidget, &QDockWidget::visibilityChanged, this, &WebWindowClass::visibilityChanged); _webView = new QWebView(dockWidget); addEventBridgeToWindowObject(); diff --git a/interface/src/scripting/WebWindowClass.h b/interface/src/scripting/WebWindowClass.h index 3659c08ac2..cc6506b059 100644 --- a/interface/src/scripting/WebWindowClass.h +++ b/interface/src/scripting/WebWindowClass.h @@ -60,6 +60,7 @@ public slots: void setTitle(const QString& title); signals: + void visibilityChanged(bool visible); // Tool window void moved(glm::vec2 position); void resized(QSizeF size); void closed(); From b4e624a64d369e8c37c2cc18f27cb4633c5f4698 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 27 Aug 2015 15:34:53 -0700 Subject: [PATCH 38/45] don't read packets that are too small --- ice-server/src/IceServer.cpp | 78 +++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index fb2c88f75e..03b06b0aef 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -55,46 +55,50 @@ void IceServer::processDatagrams() { _serverSocket.readDatagram(buffer.get(), packetSizeWithHeader, sendingSockAddr.getAddressPointer(), sendingSockAddr.getPortPointer()); - auto packet = Packet::fromReceivedPacket(std::move(buffer), packetSizeWithHeader, sendingSockAddr); - - PacketType::Value packetType = packet->getType(); - - if (packetType == PacketType::ICEServerHeartbeat) { - SharedNetworkPeer peer = addOrUpdateHeartbeatingPeer(*packet); - - // so that we can send packets to the heartbeating peer when we need, we need to activate a socket now - peer->activateMatchingOrNewSymmetricSocket(sendingSockAddr); - } else if (packetType == PacketType::ICEServerQuery) { - QDataStream heartbeatStream(packet.get()); - - // this is a node hoping to connect to a heartbeating peer - do we have the heartbeating peer? - QUuid senderUUID; - heartbeatStream >> senderUUID; - - // pull the public and private sock addrs for this peer - HifiSockAddr publicSocket, localSocket; - heartbeatStream >> publicSocket >> localSocket; - - // check if this node also included a UUID that they would like to connect to - QUuid connectRequestID; - heartbeatStream >> connectRequestID; + // make sure that this packet at least looks like something we can read + if (packetSizeWithHeader >= Packet::localHeaderSize(PacketType::ICEServerHeartbeat)) { - SharedNetworkPeer matchingPeer = _activePeers.value(connectRequestID); - - if (matchingPeer) { + auto packet = Packet::fromReceivedPacket(std::move(buffer), packetSizeWithHeader, sendingSockAddr); + + PacketType::Value packetType = packet->getType(); + + if (packetType == PacketType::ICEServerHeartbeat) { + SharedNetworkPeer peer = addOrUpdateHeartbeatingPeer(*packet); - qDebug() << "Sending information for peer" << connectRequestID << "to peer" << senderUUID; + // so that we can send packets to the heartbeating peer when we need, we need to activate a socket now + peer->activateMatchingOrNewSymmetricSocket(sendingSockAddr); + } else if (packetType == PacketType::ICEServerQuery) { + QDataStream heartbeatStream(packet.get()); - // we have the peer they want to connect to - send them pack the information for that peer - sendPeerInformationPacket(*(matchingPeer.data()), &sendingSockAddr); - - // we also need to send them to the active peer they are hoping to connect to - // create a dummy peer object we can pass to sendPeerInformationPacket - - NetworkPeer dummyPeer(senderUUID, publicSocket, localSocket); - sendPeerInformationPacket(dummyPeer, matchingPeer->getActiveSocket()); - } else { - qDebug() << "Peer" << senderUUID << "asked for" << connectRequestID << "but no matching peer found"; + // this is a node hoping to connect to a heartbeating peer - do we have the heartbeating peer? + QUuid senderUUID; + heartbeatStream >> senderUUID; + + // pull the public and private sock addrs for this peer + HifiSockAddr publicSocket, localSocket; + heartbeatStream >> publicSocket >> localSocket; + + // check if this node also included a UUID that they would like to connect to + QUuid connectRequestID; + heartbeatStream >> connectRequestID; + + SharedNetworkPeer matchingPeer = _activePeers.value(connectRequestID); + + if (matchingPeer) { + + qDebug() << "Sending information for peer" << connectRequestID << "to peer" << senderUUID; + + // we have the peer they want to connect to - send them pack the information for that peer + sendPeerInformationPacket(*(matchingPeer.data()), &sendingSockAddr); + + // we also need to send them to the active peer they are hoping to connect to + // create a dummy peer object we can pass to sendPeerInformationPacket + + NetworkPeer dummyPeer(senderUUID, publicSocket, localSocket); + sendPeerInformationPacket(dummyPeer, matchingPeer->getActiveSocket()); + } else { + qDebug() << "Peer" << senderUUID << "asked for" << connectRequestID << "but no matching peer found"; + } } } } From 542b1241461628724f4d5edce6dc24ebb70e3a73 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 27 Aug 2015 15:12:23 -0700 Subject: [PATCH 39/45] first cut at breakdance toy --- examples/controllers/breakdanceToy.js | 582 ++++++++++++++++++++++++++ 1 file changed, 582 insertions(+) create mode 100644 examples/controllers/breakdanceToy.js diff --git a/examples/controllers/breakdanceToy.js b/examples/controllers/breakdanceToy.js new file mode 100644 index 0000000000..db3b418c01 --- /dev/null +++ b/examples/controllers/breakdanceToy.js @@ -0,0 +1,582 @@ +// +// breakdanceToy.js +// examples +// +// Created by Brad Hefta-Gaub on August 24, 2015 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; + +// helpers +// Computes the penetration between a point and a sphere (centered at the origin) +// if point is inside sphere: returns true and stores the result in 'penetration' +// (the vector that would move the point outside the sphere) +// otherwise returns false +function findSphereHit(point, sphereRadius) { + var EPSILON = 0.000001; //smallish positive number - used as margin of error for some computations + var vectorLength = Vec3.length(point); + if (vectorLength < EPSILON) { + return true; + } + var distance = vectorLength - sphereRadius; + if (distance < 0.0) { + return true; + } + return false; +} + +function findSpherePointHit(sphereCenter, sphereRadius, point) { + return findSphereHit(Vec3.subtract(point,sphereCenter), sphereRadius); +} + +function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadius) { + return findSpherePointHit(firstCenter, firstRadius + secondRadius, secondCenter); +} + + +function getPositionPuppet() { + var DISTANCE_IN_FRONT = 2; + var DISTANCE_UP = 0.4; + var DISTANCE_TO_SIDE = 0.0; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + + + +function getPositionLeftFront() { + var DISTANCE_IN_FRONT = 0.6; + var DISTANCE_UP = 0.4; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionLeftSide() { + var DISTANCE_IN_FRONT = 0.0; + var DISTANCE_UP = 0.5; + var DISTANCE_TO_SIDE = 0.9; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionLeftOverhead() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_UP = 1; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionLeftLowered() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_DOWN = 0.1; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var downOffset = Vec3.multiply(up, DISTANCE_DOWN); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), downOffset ); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionLeftOnBase() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_DOWN = -0.4; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + var left = Vec3.multiply(right, -1); + + var downOffset = Vec3.multiply(up, DISTANCE_DOWN); + var leftOffset = Vec3.multiply(left, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(leftOffset, frontOffset), downOffset ); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionRightFront() { + var DISTANCE_IN_FRONT = 0.6; + var DISTANCE_UP = 0.4; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionRightSide() { + var DISTANCE_IN_FRONT = 0.0; + var DISTANCE_UP = 0.5; + var DISTANCE_TO_SIDE = 0.9; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionRightOverhead() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_UP = 1; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionRightLowered() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_DOWN = 0.1; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var downOffset = Vec3.multiply(up, DISTANCE_DOWN); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), downOffset ); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + +function getPositionRightOnBase() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_DOWN = -0.4; + var DISTANCE_TO_SIDE = 0.3; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var downOffset = Vec3.multiply(up, DISTANCE_DOWN); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), downOffset ); + var position = Vec3.sum(MyAvatar.position, offset); + return position; +} + + +// We will also demonstrate some 3D overlays. We will create a couple of cubes, spheres, and lines +// our 3D cube that moves around... +var handSize = 0.25; +var leftCubePosition = MyAvatar.getLeftPalmPosition(); +var rightCubePosition = MyAvatar.getRightPalmPosition(); + +var text = Overlays.addOverlay("text", { + x: 100, + y: 300, + width: 900, + height: 50, + backgroundColor: { red: 0, green: 0, blue: 0}, + color: { red: 255, green: 255, blue: 255}, + topMargin: 4, + leftMargin: 4, + text: "POSE...", + alpha: 1, + backgroundAlpha: 0.5 + }); + +var leftHand= Overlays.addOverlay("cube", { + position: leftCubePosition, + size: handSize, + color: { red: 0, green: 0, blue: 255}, + alpha: 1, + solid: false + }); + +var rightHand= Overlays.addOverlay("cube", { + position: rightCubePosition, + size: handSize, + color: { red: 255, green: 0, blue: 0}, + alpha: 1, + solid: false + }); + + +var targetSize = 0.3; +var targetColor = { red: 128, green: 128, blue: 128}; +var targetColorHit = { red: 0, green: 255, blue: 0}; +var moveCycleColor = { red: 255, green: 255, blue: 0}; + +var TEMPORARY_LIFETIME = 60; + +var animationSettings = JSON.stringify({ + fps: 30, + running: true, + loop: true, + firstFrame: 1, + lastFrame: 10000 +}); + +var naturalDimensions = { x: 1.63, y: 1.67, z: 0.31 }; +var dimensions = Vec3.multiply(naturalDimensions, 0.3); + +var puppetEntityID = Entities.addEntity({ + type: "Model", + modelURL: "https://hifi-public.s3.amazonaws.com/models/Bboys/bboy1/bboy1.fbx", + animationURL: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx", + animationSettings: animationSettings, + position: getPositionPuppet(), + ignoreForCollisions: true, + dimensions: dimensions, + lifetime: TEMPORARY_LIFETIME + }); + +var leftOnBase = Overlays.addOverlay("cube", { + position: getPositionLeftOnBase(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + +var leftLowered = Overlays.addOverlay("cube", { + position: getPositionLeftLowered(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + +var leftOverhead = Overlays.addOverlay("cube", { + position: getPositionLeftOverhead(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + +var leftSide= Overlays.addOverlay("cube", { + position: getPositionLeftSide(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + +var leftFront= Overlays.addOverlay("cube", { + position: getPositionLeftFront(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + +var rightOnBase = Overlays.addOverlay("cube", { + position: getPositionRightOnBase(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + +var rightLowered = Overlays.addOverlay("cube", { + position: getPositionRightLowered(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + +var rightOverhead = Overlays.addOverlay("cube", { + position: getPositionRightOverhead(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + +var rightSide= Overlays.addOverlay("cube", { + position: getPositionRightSide(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + +var rightFront= Overlays.addOverlay("cube", { + position: getPositionRightFront(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + +var startDate = new Date(); +var lastTime = startDate.getTime(); + +var NO_POSE = 0; +var LEFT_ON_BASE = 1; +var LEFT_OVERHEAD = 2; +var LEFT_LOWERED = 4; +var LEFT_SIDE = 8; +var LEFT_FRONT = 16; +var RIGHT_ON_BASE = 32; +var RIGHT_OVERHEAD = 64; +var RIGHT_LOWERED = 128; +var RIGHT_SIDE = 256; +var RIGHT_FRONT = 512; + +var lastPoseValue = NO_POSE; + +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/bboy_pose_to_idle.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/bboy_uprock.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/bboy_uprock_start.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_1.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_2.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_3.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_to_freeze.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_to_idle.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_1.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_2.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_3.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_4.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freezes.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_swipes.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1_end.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1_start.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_2.fbx +//http://s3.amazonaws.com/hifi-public/animations/Breakdancing/flair.fbx + + +var poses = Array(); +/* +poses[0 ] = { name: "no pose", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_OVERHEAD ] = { name: "Left Overhead" , animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_LOWERED ] = { name: "Left Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_SIDE ] = { name: "Left Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_FRONT ] = { name: "Left Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[RIGHT_OVERHEAD ] = { name: "Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[RIGHT_LOWERED ] = { name: "Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[RIGHT_SIDE ] = { name: "Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[RIGHT_FRONT ] = { name: "Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +*/ + +poses[LEFT_ON_BASE + RIGHT_ON_BASE ] = { name: "Left On Base + Right On Base", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; + +poses[LEFT_OVERHEAD + RIGHT_ON_BASE ] = { name: "Left Overhead + Right On Base", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_LOWERED + RIGHT_ON_BASE ] = { name: "Left Lowered + Right On Base", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_SIDE + RIGHT_ON_BASE ] = { name: "Left Side + Right On Base", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_FRONT + RIGHT_ON_BASE ] = { name: "Left Front + Right On Base", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; + +poses[LEFT_ON_BASE + RIGHT_OVERHEAD ] = { name: "Left On Base + Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_ON_BASE + RIGHT_LOWERED ] = { name: "Left On Base + Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_ON_BASE + RIGHT_SIDE ] = { name: "Left On Base + Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; +poses[LEFT_ON_BASE + RIGHT_FRONT ] = { name: "Left On Base + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx" }; + + + +poses[LEFT_OVERHEAD + RIGHT_OVERHEAD ] = { name: "Left Overhead + Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/bboy_uprock.fbx" }; +poses[LEFT_LOWERED + RIGHT_OVERHEAD ] = { name: "Left Lowered + Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_1.fbx" }; +poses[LEFT_SIDE + RIGHT_OVERHEAD ] = { name: "Left Side + Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_2.fbx" }; +poses[LEFT_FRONT + RIGHT_OVERHEAD ] = { name: "Left Front + Right Overhead", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_3.fbx" }; + +poses[LEFT_OVERHEAD + RIGHT_LOWERED ] = { name: "Left Overhead + Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_to_freeze.fbx" }; +poses[LEFT_LOWERED + RIGHT_LOWERED ] = { name: "Left Lowered + Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_footwork_to_idle.fbx" }; +poses[LEFT_SIDE + RIGHT_LOWERED ] = { name: "Left Side + Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_1.fbx" }; +poses[LEFT_FRONT + RIGHT_LOWERED ] = { name: "Left Front + Right Lowered", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_2.fbx" }; + +poses[LEFT_OVERHEAD + RIGHT_SIDE ] = { name: "Left Overhead + Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_3.fbx" }; +poses[LEFT_LOWERED + RIGHT_SIDE ] = { name: "Left Lowered + Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freeze_var_4.fbx" }; +poses[LEFT_SIDE + RIGHT_SIDE ] = { name: "Left Side + Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_freezes.fbx" }; +poses[LEFT_FRONT + RIGHT_SIDE ] = { name: "Left Front + Right Side", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_swipes.fbx" }; + +poses[LEFT_OVERHEAD + RIGHT_FRONT ] = { name: "Left Overhead + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock.fbx" }; +poses[LEFT_LOWERED + RIGHT_FRONT ] = { name: "Left Lowered + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1.fbx" }; +poses[LEFT_SIDE + RIGHT_FRONT ] = { name: "Left Side + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_2.fbx" }; +poses[LEFT_FRONT + RIGHT_FRONT ] = { name: "Left Front + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1_end.fbx" }; + + +Script.update.connect(function(deltaTime) { + var date= new Date(); + var now= date.getTime(); + var elapsed = now - lastTime; + var inMoveCycle = false; + + var leftHandPos = MyAvatar.getLeftPalmPosition(); + var rightHandPos = MyAvatar.getRightPalmPosition(); + + Overlays.editOverlay(leftHand, { position: leftHandPos } ); + Overlays.editOverlay(rightHand, { position: rightHandPos } ); + + var hitTargetLeftOnBase = findSphereSphereHit(leftHandPos, handSize/2, getPositionLeftOnBase(), targetSize/2); + var hitTargetLeftOverhead = findSphereSphereHit(leftHandPos, handSize/2, getPositionLeftOverhead(), targetSize/2); + var hitTargetLeftLowered = findSphereSphereHit(leftHandPos, handSize/2, getPositionLeftLowered(), targetSize/2); + var hitTargetLeftSide = findSphereSphereHit(leftHandPos, handSize/2, getPositionLeftSide(), targetSize/2); + var hitTargetLeftFront = findSphereSphereHit(leftHandPos, handSize/2, getPositionLeftFront(), targetSize/2); + + var hitTargetRightOnBase = findSphereSphereHit(rightHandPos, handSize/2, getPositionRightOnBase(), targetSize/2); + var hitTargetRightOverhead = findSphereSphereHit(rightHandPos, handSize/2, getPositionRightOverhead(), targetSize/2); + var hitTargetRightLowered = findSphereSphereHit(rightHandPos, handSize/2, getPositionRightLowered(), targetSize/2); + var hitTargetRightSide = findSphereSphereHit(rightHandPos, handSize/2, getPositionRightSide(), targetSize/2); + var hitTargetRightFront = findSphereSphereHit(rightHandPos, handSize/2, getPositionRightFront(), targetSize/2); + + + // determine target colors + var targetColorLeftOnBase = hitTargetLeftOnBase ? targetColorHit : targetColor; + var targetColorLeftOverhead = hitTargetLeftOverhead ? targetColorHit : targetColor; + var targetColorLeftLowered = hitTargetLeftLowered ? targetColorHit : targetColor; + var targetColorLeftSide = hitTargetLeftSide ? targetColorHit : targetColor; + var targetColorLeftFront = hitTargetLeftFront ? targetColorHit : targetColor; + + var targetColorRightOnBase = hitTargetRightOnBase ? targetColorHit : targetColor; + var targetColorRightOverhead = hitTargetRightOverhead ? targetColorHit : targetColor; + var targetColorRightLowered = hitTargetRightLowered ? targetColorHit : targetColor; + var targetColorRightSide = hitTargetRightSide ? targetColorHit : targetColor; + var targetColorRightFront = hitTargetRightFront ? targetColorHit : targetColor; + + // calculate a combined arm pose based on left and right hits + var poseValue = NO_POSE; + poseValue += hitTargetLeftOnBase ? LEFT_ON_BASE : 0; + poseValue += hitTargetLeftOverhead ? LEFT_OVERHEAD : 0; + poseValue += hitTargetLeftLowered ? LEFT_LOWERED : 0; + poseValue += hitTargetLeftSide ? LEFT_SIDE : 0; + poseValue += hitTargetLeftFront ? LEFT_FRONT : 0; + poseValue += hitTargetRightOnBase ? RIGHT_ON_BASE : 0; + poseValue += hitTargetRightOverhead ? RIGHT_OVERHEAD : 0; + poseValue += hitTargetRightLowered ? RIGHT_LOWERED : 0; + poseValue += hitTargetRightSide ? RIGHT_SIDE : 0; + poseValue += hitTargetRightFront ? RIGHT_FRONT : 0; + + if (poses[poseValue] == undefined) { + Overlays.editOverlay(text, { text: "no pose -- value:" + poseValue }); + } else { + Overlays.editOverlay(text, { text: "pose:" + poses[poseValue].name + "\n" + "animation:" + poses[poseValue].animation }); + var props = Entities.getEntityProperties(puppetEntityID); + Entities.editEntity(puppetEntityID, { + animationURL: poses[poseValue].animation, + lifetime: TEMPORARY_LIFETIME + props.age // renew lifetime + }); + } + + lastPoseValue = poseValue; + + Overlays.editOverlay(leftOnBase, { position: getPositionLeftOnBase(), color: targetColorLeftOnBase } ); + Overlays.editOverlay(leftOverhead, { position: getPositionLeftOverhead(), color: targetColorLeftOverhead } ); + Overlays.editOverlay(leftLowered, { position: getPositionLeftLowered(), color: targetColorLeftLowered } ); + Overlays.editOverlay(leftSide, { position: getPositionLeftSide() , color: targetColorLeftSide } ); + Overlays.editOverlay(leftFront, { position: getPositionLeftFront() , color: targetColorLeftFront } ); + + Overlays.editOverlay(rightOnBase, { position: getPositionRightOnBase(), color: targetColorRightOnBase } ); + Overlays.editOverlay(rightOverhead, { position: getPositionRightOverhead(), color: targetColorRightOverhead } ); + Overlays.editOverlay(rightLowered, { position: getPositionRightLowered(), color: targetColorRightLowered } ); + Overlays.editOverlay(rightSide, { position: getPositionRightSide() , color: targetColorRightSide } ); + Overlays.editOverlay(rightFront, { position: getPositionRightFront() , color: targetColorRightFront } ); + }); + +Script.scriptEnding.connect(function() { + Overlays.deleteOverlay(leftHand); + Overlays.deleteOverlay(rightHand); + + Overlays.deleteOverlay(text); + Overlays.deleteOverlay(leftOnBase); + Overlays.deleteOverlay(leftOverhead); + Overlays.deleteOverlay(leftLowered); + Overlays.deleteOverlay(leftSide); + Overlays.deleteOverlay(leftFront); + Overlays.deleteOverlay(rightOnBase); + Overlays.deleteOverlay(rightOverhead); + Overlays.deleteOverlay(rightLowered); + Overlays.deleteOverlay(rightSide); + Overlays.deleteOverlay(rightFront); + + print("puppetEntityID:"+puppetEntityID); + Entities.deleteEntity(puppetEntityID); +}); \ No newline at end of file From 1d6f43e0d0177a30b835ccae4399b8651e6539c6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 27 Aug 2015 18:18:32 -0700 Subject: [PATCH 40/45] cleaned up some warnings --- interface/src/Application.cpp | 2 + interface/src/Menu.cpp | 2 +- interface/src/avatar/MyAvatar.cpp | 1 - interface/src/ui/ApplicationCompositor.cpp | 2 - .../display-plugins/OpenGLDisplayPlugin.cpp | 44 ++++++++++--------- .../stereo/StereoDisplayPlugin.cpp | 2 +- libraries/gpu/src/gpu/GLBackendTransform.cpp | 1 - .../script-engine/src/WebSocketClass.cpp | 8 ++-- .../src/WebSocketServerClass.cpp | 4 +- libraries/shared/src/GLMHelpers.cpp | 4 -- 10 files changed, 33 insertions(+), 37 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 74307ea673..c227e5e1c9 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5047,5 +5047,7 @@ void Application::emulateMouse(Hand* hand, float click, float shift, int index) void Application::crashApplication() { QObject* object = nullptr; bool value = object->isWindowType(); + Q_UNUSED(value); + qCDebug(interfaceapp) << "Intentionally crashed Interface"; } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 17e64b5765..0ed2effb55 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -222,7 +222,7 @@ Menu::Menu() { addActionToQMenuAndActionHash(toolsMenu, MenuOption::PackageModel, 0, qApp, SLOT(packageModel())); - MenuWrapper* displayMenu = addMenu(DisplayPlugin::MENU_PATH()); + addMenu(DisplayPlugin::MENU_PATH()); { MenuWrapper* displayModeMenu = addMenu(MenuOption::OutputMenu); QActionGroup* displayModeGroup = new QActionGroup(displayModeMenu); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index eb72ddd2fd..ba9c1194a5 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -843,7 +843,6 @@ void MyAvatar::sendKillAvatar() { DependencyManager::get()->broadcastToNodes(std::move(killPacket), NodeSet() << NodeType::AvatarMixer); } -static int counter = 0; void MyAvatar::updateLookAtTargetAvatar() { // // Look at the avatar whose eyes are closest to the ray in direction of my avatar's head diff --git a/interface/src/ui/ApplicationCompositor.cpp b/interface/src/ui/ApplicationCompositor.cpp index 98634d7aed..da7a934008 100644 --- a/interface/src/ui/ApplicationCompositor.cpp +++ b/interface/src/ui/ApplicationCompositor.cpp @@ -206,8 +206,6 @@ void ApplicationCompositor::displayOverlayTexture(RenderArgs* renderArgs) { updateTooltips(); - auto deviceSize = qApp->getDeviceSize(); - //Handle fading and deactivation/activation of UI gpu::Batch batch; diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index eb38e1bf4f..f99d1f2a3b 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -80,32 +80,34 @@ void OpenGLDisplayPlugin::deactivate() { // Pass input events on to the application bool OpenGLDisplayPlugin::eventFilter(QObject* receiver, QEvent* event) { switch (event->type()) { - case QEvent::MouseButtonPress: - case QEvent::MouseButtonRelease: - case QEvent::MouseButtonDblClick: - case QEvent::MouseMove: - case QEvent::Wheel: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::MouseMove: + case QEvent::Wheel: - case QEvent::TouchBegin: - case QEvent::TouchEnd: - case QEvent::TouchUpdate: + case QEvent::TouchBegin: + case QEvent::TouchEnd: + case QEvent::TouchUpdate: - case QEvent::FocusIn: - case QEvent::FocusOut: + case QEvent::FocusIn: + case QEvent::FocusOut: - case QEvent::KeyPress: - case QEvent::KeyRelease: - case QEvent::ShortcutOverride: + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::ShortcutOverride: - case QEvent::DragEnter: - case QEvent::Drop: + case QEvent::DragEnter: + case QEvent::Drop: - case QEvent::Resize: - if (QCoreApplication::sendEvent(QCoreApplication::instance(), event)) { - return true; - } - break; + case QEvent::Resize: + if (QCoreApplication::sendEvent(QCoreApplication::instance(), event)) { + return true; + } + default: + break; } + return false; } @@ -141,4 +143,4 @@ bool OpenGLDisplayPlugin::isVsyncEnabled() { #else return true; #endif -} \ No newline at end of file +} diff --git a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp index 017977bf69..de34451c83 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp @@ -78,7 +78,7 @@ void StereoDisplayPlugin::activate() { } void StereoDisplayPlugin::updateScreen() { - for (int i = 0; i < _screenActions.size(); ++i) { + for (int i = 0; i < (int) _screenActions.size(); ++i) { if (_screenActions[i]->isChecked()) { CONTAINER->setFullscreen(qApp->screens().at(i)); break; diff --git a/libraries/gpu/src/gpu/GLBackendTransform.cpp b/libraries/gpu/src/gpu/GLBackendTransform.cpp index e33a8f8cde..99db7b38e8 100755 --- a/libraries/gpu/src/gpu/GLBackendTransform.cpp +++ b/libraries/gpu/src/gpu/GLBackendTransform.cpp @@ -41,7 +41,6 @@ void GLBackend::do_setViewportTransform(Batch& batch, uint32 paramOffset) { if (_stereo._pass) { vp.x += vp.z; } - int i = 0; } glViewport(vp.x, vp.y, vp.z, vp.w); diff --git a/libraries/script-engine/src/WebSocketClass.cpp b/libraries/script-engine/src/WebSocketClass.cpp index c844dc3582..19148b26e9 100644 --- a/libraries/script-engine/src/WebSocketClass.cpp +++ b/libraries/script-engine/src/WebSocketClass.cpp @@ -16,16 +16,16 @@ #include "WebSocketClass.h" WebSocketClass::WebSocketClass(QScriptEngine* engine, QString url) : - _engine(engine), - _webSocket(new QWebSocket()) + _webSocket(new QWebSocket()), + _engine(engine) { initialize(); _webSocket->open(url); } WebSocketClass::WebSocketClass(QScriptEngine* engine, QWebSocket* qWebSocket) : - _engine(engine), - _webSocket(qWebSocket) + _webSocket(qWebSocket), + _engine(engine) { initialize(); } diff --git a/libraries/script-engine/src/WebSocketServerClass.cpp b/libraries/script-engine/src/WebSocketServerClass.cpp index 3b3a02a7c9..3b723d5b3f 100644 --- a/libraries/script-engine/src/WebSocketServerClass.cpp +++ b/libraries/script-engine/src/WebSocketServerClass.cpp @@ -15,8 +15,8 @@ #include "WebSocketServerClass.h" WebSocketServerClass::WebSocketServerClass(QScriptEngine* engine, const QString& serverName, const quint16 port) : - _engine(engine), - _webSocketServer(serverName, QWebSocketServer::SslMode::NonSecureMode) + _webSocketServer(serverName, QWebSocketServer::SslMode::NonSecureMode), + _engine(engine) { if (_webSocketServer.listen(QHostAddress::Any, port)) { connect(&_webSocketServer, &QWebSocketServer::newConnection, this, &WebSocketServerClass::onNewConnection); diff --git a/libraries/shared/src/GLMHelpers.cpp b/libraries/shared/src/GLMHelpers.cpp index c1d168557d..86707d9dcd 100644 --- a/libraries/shared/src/GLMHelpers.cpp +++ b/libraries/shared/src/GLMHelpers.cpp @@ -378,8 +378,6 @@ glm::mat4 createMatFromQuatAndPos(const glm::quat& q, const glm::vec3& p) { // cancel out roll and pitch glm::quat cancelOutRollAndPitch(const glm::quat& q) { - glm::vec3 xAxis = q * glm::vec3(1, 0, 0); - glm::vec3 yAxis = q * glm::vec3(0, 1, 0); glm::vec3 zAxis = q * glm::vec3(0, 0, 1); // cancel out the roll and pitch @@ -393,8 +391,6 @@ glm::quat cancelOutRollAndPitch(const glm::quat& q) { // cancel out roll and pitch glm::mat4 cancelOutRollAndPitch(const glm::mat4& m) { - glm::vec3 xAxis = glm::vec3(m[0]); - glm::vec3 yAxis = glm::vec3(m[1]); glm::vec3 zAxis = glm::vec3(m[2]); // cancel out the roll and pitch From f7d32add0c43501d11711c47359fbf2fce9e435b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 27 Aug 2015 18:21:47 -0700 Subject: [PATCH 41/45] wrap OVR variables in ifdef for MAJOR_VERSION >= 6 --- .../display-plugins/oculus/OculusDisplayPlugin.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h index 75173fd2bd..42f8d5763f 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h @@ -51,20 +51,22 @@ protected: private: static const QString NAME; - - ovrHmd _hmd; - float _ipd{ OVR_DEFAULT_IPD }; - unsigned int _frameIndex; - ovrEyeRenderDesc _eyeRenderDescs[2]; + ovrPosef _eyePoses[2]; - ovrVector3f _eyeOffsets[2]; - ovrFovPort _eyeFovs[2]; + mat4 _eyeProjections[3]; mat4 _compositeEyeProjections[2]; uvec2 _desiredFramebufferSize; ovrTrackingState _trackingState; #if (OVR_MAJOR_VERSION >= 6) + ovrHmd _hmd; + float _ipd{ OVR_DEFAULT_IPD }; + unsigned int _frameIndex; + ovrEyeRenderDesc _eyeRenderDescs[2]; + ovrVector3f _eyeOffsets[2]; + ovrFovPort _eyeFovs[2]; + ovrLayerEyeFov& getSceneLayer(); ovrHmdDesc _hmdDesc; SwapFboPtr _sceneFbo; From 8ea20b5e5e061daf55b1331680eb8f3f68593d96 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 27 Aug 2015 18:23:31 -0700 Subject: [PATCH 42/45] fix warning on string literal call to qFatal --- libraries/render-utils/src/OglplusHelpers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/render-utils/src/OglplusHelpers.cpp b/libraries/render-utils/src/OglplusHelpers.cpp index 86769436e6..619ef656d2 100644 --- a/libraries/render-utils/src/OglplusHelpers.cpp +++ b/libraries/render-utils/src/OglplusHelpers.cpp @@ -65,11 +65,11 @@ void compileProgram(ProgramPtr & result, const std::string& vs, const std::strin .Compile() ); result->Link(); - } catch (ProgramBuildError & err) { + } catch (ProgramBuildError& err) { Q_UNUSED(err); qWarning() << err.Log().c_str(); Q_ASSERT_X(false, "compileProgram", "Failed to build shader program"); - qFatal((const char*)err.Message); + qFatal("%s", (const char*) err.Message); result.reset(); } } From c5c73b7809d3eec6e9c73094eedd6307c8227fb3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 27 Aug 2015 18:24:40 -0700 Subject: [PATCH 43/45] remove _ipd variable from OculusLegacyDisplayPlugin --- .../src/display-plugins/oculus/OculusLegacyDisplayPlugin.cpp | 2 +- .../src/display-plugins/oculus/OculusLegacyDisplayPlugin.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.cpp index c94268b336..05072e0210 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.cpp @@ -34,7 +34,7 @@ const QString & OculusLegacyDisplayPlugin::getName() const { return NAME; } -OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() : _ipd(OVR_DEFAULT_IPD) { +OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() { } uvec2 OculusLegacyDisplayPlugin::getRecommendedRenderSize() const { diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.h index 219b6c54b3..5bce032948 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusLegacyDisplayPlugin.h @@ -44,7 +44,6 @@ protected: private: static const QString NAME; - float _ipd{ OVR_DEFAULT_IPD }; ovrHmd _hmd; unsigned int _frameIndex; ovrTrackingState _trackingState; From 2aa1976b5d470e38129bdb1d329dd1a5d0b7b9b5 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 27 Aug 2015 17:15:02 -0700 Subject: [PATCH 44/45] Add common vector constants to JS, add some missing quaternionin functionality --- libraries/script-engine/src/Quat.cpp | 20 +++++++++ libraries/script-engine/src/Quat.h | 4 ++ libraries/script-engine/src/Vec3.cpp | 67 ++++++++++++++++++++++++++++ libraries/script-engine/src/Vec3.h | 60 ++++++++++++++++--------- libraries/shared/src/GLMHelpers.h | 1 - 5 files changed, 129 insertions(+), 23 deletions(-) diff --git a/libraries/script-engine/src/Quat.cpp b/libraries/script-engine/src/Quat.cpp index 9cd659dd5d..14a6573415 100644 --- a/libraries/script-engine/src/Quat.cpp +++ b/libraries/script-engine/src/Quat.cpp @@ -18,6 +18,26 @@ #include "ScriptEngineLogging.h" #include "Quat.h" +quat Quat::normalize(const glm::quat& q) { + return glm::normalize(q); +} + +glm::quat Quat::rotationBetween(const glm::vec3& v1, const glm::vec3& v2) { + return ::rotationBetween(v1, v2); +} + +glm::quat Quat::lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3& up) { + return glm::quat_cast(glm::lookAt(eye, center, up)); +} + +glm::quat Quat::lookAtSimple(const glm::vec3& eye, const glm::vec3& center) { + auto dir = glm::normalize(center - eye); + // if the direction is nearly aligned with the Y axis, then use the X axis for 'up' + if (dir.x < 0.001f && dir.z < 0.001f) { + return lookAt(eye, center, Vectors::UNIT_X); + } + return lookAt(eye, center, Vectors::UNIT_Y); +} glm::quat Quat::multiply(const glm::quat& q1, const glm::quat& q2) { return q1 * q2; diff --git a/libraries/script-engine/src/Quat.h b/libraries/script-engine/src/Quat.h index 1f130c57c7..543c93401f 100644 --- a/libraries/script-engine/src/Quat.h +++ b/libraries/script-engine/src/Quat.h @@ -25,6 +25,10 @@ class Quat : public QObject { public slots: glm::quat multiply(const glm::quat& q1, const glm::quat& q2); + glm::quat normalize(const glm::quat& q); + glm::quat lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3& up); + glm::quat lookAtSimple(const glm::vec3& eye, const glm::vec3& center); + glm::quat rotationBetween(const glm::vec3& v1, const glm::vec3& v2); glm::quat fromVec3Degrees(const glm::vec3& vec3); // degrees glm::quat fromVec3Radians(const glm::vec3& vec3); // radians glm::quat fromPitchYawRollDegrees(float pitch, float yaw, float roll); // degrees diff --git a/libraries/script-engine/src/Vec3.cpp b/libraries/script-engine/src/Vec3.cpp index 4ed16b2ef0..012663073c 100644 --- a/libraries/script-engine/src/Vec3.cpp +++ b/libraries/script-engine/src/Vec3.cpp @@ -123,3 +123,70 @@ glm::vec3 Vec3::fromPolar(float elevation, float azimuth) { return fromPolar(v); } +const vec3& Vec3::UNIT_X() { + return Vectors::UNIT_X; +} + +const vec3& Vec3::UNIT_Y() { + return Vectors::UNIT_Y; +} + +const vec3& Vec3::UNIT_Z() { + return Vectors::UNIT_Z; +} + +const vec3& Vec3::UNIT_NEG_X() { + return Vectors::UNIT_NEG_X; +} + +const vec3& Vec3::UNIT_NEG_Y() { + return Vectors::UNIT_NEG_Y; +} + +const vec3& Vec3::UNIT_NEG_Z() { + return Vectors::UNIT_NEG_Z; +} + +const vec3& Vec3::UNIT_XY() { + return Vectors::UNIT_XY; +} + +const vec3& Vec3::UNIT_XZ() { + return Vectors::UNIT_XZ; +} + +const vec3& Vec3::UNIT_YZ() { + return Vectors::UNIT_YZ; +} + +const vec3& Vec3::UNIT_XYZ() { + return Vectors::UNIT_XYZ; +} + +const vec3& Vec3::FLOAT_MAX() { + return Vectors::MAX; +} + +const vec3& Vec3::FLOAT_MIN() { + return Vectors::MIN; +} + +const vec3& Vec3::ZERO() { + return Vectors::ZERO; +} + +const vec3& Vec3::ONE() { + return Vectors::ONE; +} + +const vec3& Vec3::RIGHT() { + return Vectors::RIGHT; +} + +const vec3& Vec3::UP() { + return Vectors::UNIT_X; +} + +const vec3& Vec3::FRONT() { + return Vectors::FRONT; +} diff --git a/libraries/script-engine/src/Vec3.h b/libraries/script-engine/src/Vec3.h index 82062ca80d..492345b7fe 100644 --- a/libraries/script-engine/src/Vec3.h +++ b/libraries/script-engine/src/Vec3.h @@ -13,36 +13,52 @@ #ifndef hifi_Vec3_h #define hifi_Vec3_h - -#include -#include - + #include #include +#include "GLMHelpers.h" + /// Scriptable interface a Vec3ernion helper class object. Used exclusively in the JavaScript API class Vec3 : public QObject { Q_OBJECT public slots: - glm::vec3 reflect(const glm::vec3& v1, const glm::vec3& v2); - glm::vec3 cross(const glm::vec3& v1, const glm::vec3& v2); - float dot(const glm::vec3& v1, const glm::vec3& v2); - glm::vec3 multiply(const glm::vec3& v1, float f); - glm::vec3 multiply(float, const glm::vec3& v1); - glm::vec3 multiplyQbyV(const glm::quat& q, const glm::vec3& v); - glm::vec3 sum(const glm::vec3& v1, const glm::vec3& v2); - glm::vec3 subtract(const glm::vec3& v1, const glm::vec3& v2); - float length(const glm::vec3& v); - float distance(const glm::vec3& v1, const glm::vec3& v2); - float orientedAngle(const glm::vec3& v1, const glm::vec3& v2, const glm::vec3& v3); - glm::vec3 normalize(const glm::vec3& v); - glm::vec3 mix(const glm::vec3& v1, const glm::vec3& v2, float m); - void print(const QString& lable, const glm::vec3& v); - bool equal(const glm::vec3& v1, const glm::vec3& v2); - glm::vec3 toPolar(const glm::vec3& v); - glm::vec3 fromPolar(const glm::vec3& polar); - glm::vec3 fromPolar(float elevation, float azimuth); + vec3 reflect(const vec3& v1, const vec3& v2); + vec3 cross(const vec3& v1, const vec3& v2); + float dot(const vec3& v1, const vec3& v2); + vec3 multiply(const vec3& v1, float f); + vec3 multiply(float, const vec3& v1); + vec3 multiplyQbyV(const glm::quat& q, const vec3& v); + vec3 sum(const vec3& v1, const vec3& v2); + vec3 subtract(const vec3& v1, const vec3& v2); + float length(const vec3& v); + float distance(const vec3& v1, const vec3& v2); + float orientedAngle(const vec3& v1, const vec3& v2, const vec3& v3); + vec3 normalize(const vec3& v); + vec3 mix(const vec3& v1, const vec3& v2, float m); + void print(const QString& lable, const vec3& v); + bool equal(const vec3& v1, const vec3& v2); + vec3 toPolar(const vec3& v); + vec3 fromPolar(const vec3& polar); + vec3 fromPolar(float elevation, float azimuth); + const vec3& UNIT_X(); + const vec3& UNIT_Y(); + const vec3& UNIT_Z(); + const vec3& UNIT_NEG_X(); + const vec3& UNIT_NEG_Y(); + const vec3& UNIT_NEG_Z(); + const vec3& UNIT_XY(); + const vec3& UNIT_XZ(); + const vec3& UNIT_YZ(); + const vec3& UNIT_XYZ(); + const vec3& FLOAT_MAX(); + const vec3& FLOAT_MIN(); + const vec3& ZERO(); + const vec3& ONE(); + const vec3& RIGHT(); + const vec3& UP(); + const vec3& FRONT(); }; diff --git a/libraries/shared/src/GLMHelpers.h b/libraries/shared/src/GLMHelpers.h index 4b03ed2525..8e3cadac74 100644 --- a/libraries/shared/src/GLMHelpers.h +++ b/libraries/shared/src/GLMHelpers.h @@ -64,7 +64,6 @@ public: static const vec3 UNIT_XY; static const vec3 UNIT_XZ; static const vec3 UNIT_YZ; - static const vec3 UNIT_ZX; static const vec3 UNIT_XYZ; static const vec3 MAX; static const vec3 MIN; From 08e4fe2dc2df5b6b6c4c15debb37feffaa5a690e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 28 Aug 2015 16:26:56 -0700 Subject: [PATCH 45/45] Revert "Add common vector constants to JS" --- libraries/script-engine/src/Quat.cpp | 20 --------- libraries/script-engine/src/Quat.h | 4 -- libraries/script-engine/src/Vec3.cpp | 67 ---------------------------- libraries/script-engine/src/Vec3.h | 60 +++++++++---------------- libraries/shared/src/GLMHelpers.h | 1 + 5 files changed, 23 insertions(+), 129 deletions(-) diff --git a/libraries/script-engine/src/Quat.cpp b/libraries/script-engine/src/Quat.cpp index 14a6573415..9cd659dd5d 100644 --- a/libraries/script-engine/src/Quat.cpp +++ b/libraries/script-engine/src/Quat.cpp @@ -18,26 +18,6 @@ #include "ScriptEngineLogging.h" #include "Quat.h" -quat Quat::normalize(const glm::quat& q) { - return glm::normalize(q); -} - -glm::quat Quat::rotationBetween(const glm::vec3& v1, const glm::vec3& v2) { - return ::rotationBetween(v1, v2); -} - -glm::quat Quat::lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3& up) { - return glm::quat_cast(glm::lookAt(eye, center, up)); -} - -glm::quat Quat::lookAtSimple(const glm::vec3& eye, const glm::vec3& center) { - auto dir = glm::normalize(center - eye); - // if the direction is nearly aligned with the Y axis, then use the X axis for 'up' - if (dir.x < 0.001f && dir.z < 0.001f) { - return lookAt(eye, center, Vectors::UNIT_X); - } - return lookAt(eye, center, Vectors::UNIT_Y); -} glm::quat Quat::multiply(const glm::quat& q1, const glm::quat& q2) { return q1 * q2; diff --git a/libraries/script-engine/src/Quat.h b/libraries/script-engine/src/Quat.h index 543c93401f..1f130c57c7 100644 --- a/libraries/script-engine/src/Quat.h +++ b/libraries/script-engine/src/Quat.h @@ -25,10 +25,6 @@ class Quat : public QObject { public slots: glm::quat multiply(const glm::quat& q1, const glm::quat& q2); - glm::quat normalize(const glm::quat& q); - glm::quat lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3& up); - glm::quat lookAtSimple(const glm::vec3& eye, const glm::vec3& center); - glm::quat rotationBetween(const glm::vec3& v1, const glm::vec3& v2); glm::quat fromVec3Degrees(const glm::vec3& vec3); // degrees glm::quat fromVec3Radians(const glm::vec3& vec3); // radians glm::quat fromPitchYawRollDegrees(float pitch, float yaw, float roll); // degrees diff --git a/libraries/script-engine/src/Vec3.cpp b/libraries/script-engine/src/Vec3.cpp index 012663073c..4ed16b2ef0 100644 --- a/libraries/script-engine/src/Vec3.cpp +++ b/libraries/script-engine/src/Vec3.cpp @@ -123,70 +123,3 @@ glm::vec3 Vec3::fromPolar(float elevation, float azimuth) { return fromPolar(v); } -const vec3& Vec3::UNIT_X() { - return Vectors::UNIT_X; -} - -const vec3& Vec3::UNIT_Y() { - return Vectors::UNIT_Y; -} - -const vec3& Vec3::UNIT_Z() { - return Vectors::UNIT_Z; -} - -const vec3& Vec3::UNIT_NEG_X() { - return Vectors::UNIT_NEG_X; -} - -const vec3& Vec3::UNIT_NEG_Y() { - return Vectors::UNIT_NEG_Y; -} - -const vec3& Vec3::UNIT_NEG_Z() { - return Vectors::UNIT_NEG_Z; -} - -const vec3& Vec3::UNIT_XY() { - return Vectors::UNIT_XY; -} - -const vec3& Vec3::UNIT_XZ() { - return Vectors::UNIT_XZ; -} - -const vec3& Vec3::UNIT_YZ() { - return Vectors::UNIT_YZ; -} - -const vec3& Vec3::UNIT_XYZ() { - return Vectors::UNIT_XYZ; -} - -const vec3& Vec3::FLOAT_MAX() { - return Vectors::MAX; -} - -const vec3& Vec3::FLOAT_MIN() { - return Vectors::MIN; -} - -const vec3& Vec3::ZERO() { - return Vectors::ZERO; -} - -const vec3& Vec3::ONE() { - return Vectors::ONE; -} - -const vec3& Vec3::RIGHT() { - return Vectors::RIGHT; -} - -const vec3& Vec3::UP() { - return Vectors::UNIT_X; -} - -const vec3& Vec3::FRONT() { - return Vectors::FRONT; -} diff --git a/libraries/script-engine/src/Vec3.h b/libraries/script-engine/src/Vec3.h index 492345b7fe..82062ca80d 100644 --- a/libraries/script-engine/src/Vec3.h +++ b/libraries/script-engine/src/Vec3.h @@ -13,52 +13,36 @@ #ifndef hifi_Vec3_h #define hifi_Vec3_h - + +#include +#include + #include #include -#include "GLMHelpers.h" - /// Scriptable interface a Vec3ernion helper class object. Used exclusively in the JavaScript API class Vec3 : public QObject { Q_OBJECT public slots: - vec3 reflect(const vec3& v1, const vec3& v2); - vec3 cross(const vec3& v1, const vec3& v2); - float dot(const vec3& v1, const vec3& v2); - vec3 multiply(const vec3& v1, float f); - vec3 multiply(float, const vec3& v1); - vec3 multiplyQbyV(const glm::quat& q, const vec3& v); - vec3 sum(const vec3& v1, const vec3& v2); - vec3 subtract(const vec3& v1, const vec3& v2); - float length(const vec3& v); - float distance(const vec3& v1, const vec3& v2); - float orientedAngle(const vec3& v1, const vec3& v2, const vec3& v3); - vec3 normalize(const vec3& v); - vec3 mix(const vec3& v1, const vec3& v2, float m); - void print(const QString& lable, const vec3& v); - bool equal(const vec3& v1, const vec3& v2); - vec3 toPolar(const vec3& v); - vec3 fromPolar(const vec3& polar); - vec3 fromPolar(float elevation, float azimuth); - const vec3& UNIT_X(); - const vec3& UNIT_Y(); - const vec3& UNIT_Z(); - const vec3& UNIT_NEG_X(); - const vec3& UNIT_NEG_Y(); - const vec3& UNIT_NEG_Z(); - const vec3& UNIT_XY(); - const vec3& UNIT_XZ(); - const vec3& UNIT_YZ(); - const vec3& UNIT_XYZ(); - const vec3& FLOAT_MAX(); - const vec3& FLOAT_MIN(); - const vec3& ZERO(); - const vec3& ONE(); - const vec3& RIGHT(); - const vec3& UP(); - const vec3& FRONT(); + glm::vec3 reflect(const glm::vec3& v1, const glm::vec3& v2); + glm::vec3 cross(const glm::vec3& v1, const glm::vec3& v2); + float dot(const glm::vec3& v1, const glm::vec3& v2); + glm::vec3 multiply(const glm::vec3& v1, float f); + glm::vec3 multiply(float, const glm::vec3& v1); + glm::vec3 multiplyQbyV(const glm::quat& q, const glm::vec3& v); + glm::vec3 sum(const glm::vec3& v1, const glm::vec3& v2); + glm::vec3 subtract(const glm::vec3& v1, const glm::vec3& v2); + float length(const glm::vec3& v); + float distance(const glm::vec3& v1, const glm::vec3& v2); + float orientedAngle(const glm::vec3& v1, const glm::vec3& v2, const glm::vec3& v3); + glm::vec3 normalize(const glm::vec3& v); + glm::vec3 mix(const glm::vec3& v1, const glm::vec3& v2, float m); + void print(const QString& lable, const glm::vec3& v); + bool equal(const glm::vec3& v1, const glm::vec3& v2); + glm::vec3 toPolar(const glm::vec3& v); + glm::vec3 fromPolar(const glm::vec3& polar); + glm::vec3 fromPolar(float elevation, float azimuth); }; diff --git a/libraries/shared/src/GLMHelpers.h b/libraries/shared/src/GLMHelpers.h index 8e3cadac74..4b03ed2525 100644 --- a/libraries/shared/src/GLMHelpers.h +++ b/libraries/shared/src/GLMHelpers.h @@ -64,6 +64,7 @@ public: static const vec3 UNIT_XY; static const vec3 UNIT_XZ; static const vec3 UNIT_YZ; + static const vec3 UNIT_ZX; static const vec3 UNIT_XYZ; static const vec3 MAX; static const vec3 MIN;