From 460eaa515bf0a4fbcd166206d456bb5d2c9506dc Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 10 Aug 2015 14:19:25 -0700 Subject: [PATCH 01/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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/34] 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); }