diff --git a/examples/drumStick.js b/examples/drumStick.js index 5224900414..955fddbdee 100644 --- a/examples/drumStick.js +++ b/examples/drumStick.js @@ -18,8 +18,8 @@ function vMinus(a, b) { // First, load two percussion sounds to be used on the sticks -var drum1 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/MusicalInstruments/drums/snare.raw"); -var drum2 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/MusicalInstruments/drums/snare.raw"); +var drum1 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Drums/RackTomHi.raw"); +var drum2 = new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Drums/RackTomLo.raw"); // State Machine: // 0 = not triggered diff --git a/examples/fountain.js b/examples/fountain.js index 86c125a834..a095f91ed3 100644 --- a/examples/fountain.js +++ b/examples/fountain.js @@ -42,7 +42,7 @@ Voxels.setVoxel(position.x, 0, position.z, 0.5, 0, 0, 255); var totalParticles = 0; function makeFountain() { - if (Math.random() < 0.06) { + if (Math.random() < 0.10) { //print("Made particle!\n"); var properties = { position: position, @@ -51,9 +51,9 @@ function makeFountain() { velocity: { x: (Math.random() * 1.0 - 0.5), y: (1.0 + (Math.random() * 2.0)), z: (Math.random() * 1.0 - 0.5) }, - gravity: { x: 0, y: -0.5, z: 0 }, + gravity: { x: 0, y: -0.1, z: 0 }, damping: 0.25, - lifetime: 2 + lifetime: 1 } Particles.addParticle(properties); diff --git a/examples/toyball.js b/examples/toyball.js index 1682cbe3d4..6c40fc2932 100644 --- a/examples/toyball.js +++ b/examples/toyball.js @@ -134,8 +134,10 @@ function checkControllerSide(whichSide) { gravity: { x: 0, y: 0, z: 0}, inHand: true, radius: 0.05, + damping: 0.999, color: { red: 255, green: 0, blue: 0 }, - lifetime: 10 // 10 seconds + + lifetime: 10 // 10 seconds - same as default, not needed but here as an example }; newParticle = Particles.addParticle(properties); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 111e95acb7..fc58d2f169 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2859,10 +2859,10 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) { if (!selfAvatarOnly) { // draw a red sphere - float sphereRadius = 0.25f; + float originSphereRadius = 0.05f; glColor3f(1,0,0); glPushMatrix(); - glutSolidSphere(sphereRadius, 15, 15); + glutSolidSphere(originSphereRadius, 15, 15); glPopMatrix(); // disable specular lighting for ground and voxels diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index d557eb67b3..ffee4c7879 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -332,27 +332,29 @@ void renderWorldBox() { glVertex3f(TREE_SCALE, 0, TREE_SCALE); glVertex3f(TREE_SCALE, 0, 0); glEnd(); - // Draw marker dots at very end + // Draw meter markers along the 3 axis to help with measuring things + const float MARKER_DISTANCE = 1.f; + const float MARKER_RADIUS = 0.05f; glEnable(GL_LIGHTING); glPushMatrix(); - glTranslatef(TREE_SCALE, 0, 0); + glTranslatef(MARKER_DISTANCE, 0, 0); glColor3fv(red); - glutSolidSphere(0.125, 10, 10); + glutSolidSphere(MARKER_RADIUS, 10, 10); glPopMatrix(); glPushMatrix(); - glTranslatef(0, TREE_SCALE, 0); + glTranslatef(0, MARKER_DISTANCE, 0); glColor3fv(green); - glutSolidSphere(0.125, 10, 10); + glutSolidSphere(MARKER_RADIUS, 10, 10); glPopMatrix(); glPushMatrix(); - glTranslatef(0, 0, TREE_SCALE); + glTranslatef(0, 0, MARKER_DISTANCE); glColor3fv(blue); - glutSolidSphere(0.125, 10, 10); + glutSolidSphere(MARKER_RADIUS, 10, 10); glPopMatrix(); glPushMatrix(); glColor3fv(gray); - glTranslatef(TREE_SCALE, 0, TREE_SCALE); - glutSolidSphere(0.125, 10, 10); + glTranslatef(MARKER_DISTANCE, 0, MARKER_DISTANCE); + glutSolidSphere(MARKER_RADIUS, 10, 10); glPopMatrix(); } diff --git a/libraries/particles/src/Particle.cpp b/libraries/particles/src/Particle.cpp index 5570797ab4..5cf5e9248d 100644 --- a/libraries/particles/src/Particle.cpp +++ b/libraries/particles/src/Particle.cpp @@ -682,7 +682,7 @@ void Particle::update(const uint64_t& now) { const uint64_t REALLY_OLD = 30 * USECS_PER_SECOND; // 30 seconds bool isReallyOld = ((now - _created) > REALLY_OLD); bool isInHand = getInHand(); - bool shouldDie = getShouldDie() || (!isInHand && isStopped && isReallyOld); + bool shouldDie = (getAge() > getLifetime()) || getShouldDie() || (!isInHand && isStopped && isReallyOld); setShouldDie(shouldDie); runUpdateScript(); // allow the javascript to alter our state diff --git a/libraries/particles/src/Particle.h b/libraries/particles/src/Particle.h index 9c93423c08..e534c7b418 100644 --- a/libraries/particles/src/Particle.h +++ b/libraries/particles/src/Particle.h @@ -42,7 +42,7 @@ const uint16_t PACKET_CONTAINS_INHAND = 128; const uint16_t PACKET_CONTAINS_SCRIPT = 256; const uint16_t PACKET_CONTAINS_SHOULDDIE = 512; -const float DEFAULT_LIFETIME = 60.0f * 60.0f * 24.0f; // particles live for 1 day by default +const float DEFAULT_LIFETIME = 10.0f; // particles live for 10 seconds by default const float DEFAULT_DAMPING = 0.99f; const float DEFAULT_RADIUS = 0.1f / TREE_SCALE; const float MINIMUM_PARTICLE_ELEMENT_SIZE = (1.0f / 100000.0f) / TREE_SCALE; // smallest size container diff --git a/libraries/particles/src/ParticleCollisionSystem.cpp b/libraries/particles/src/ParticleCollisionSystem.cpp index ff65bc4298..def6768e46 100644 --- a/libraries/particles/src/ParticleCollisionSystem.cpp +++ b/libraries/particles/src/ParticleCollisionSystem.cpp @@ -276,7 +276,7 @@ void ParticleCollisionSystem::applyHardCollision(Particle* particle, float elast void ParticleCollisionSystem::updateCollisionSound(Particle* particle, const glm::vec3 &penetration, float frequency) { // consider whether to have the collision make a sound - const float AUDIBLE_COLLISION_THRESHOLD = 0.1f; + const float AUDIBLE_COLLISION_THRESHOLD = 0.3f; const float COLLISION_LOUDNESS = 1.f; const float DURATION_SCALING = 0.004f; const float NOISE_SCALING = 0.1f; diff --git a/libraries/particles/src/ParticleTree.cpp b/libraries/particles/src/ParticleTree.cpp index 31f5216462..73e8dd6711 100644 --- a/libraries/particles/src/ParticleTree.cpp +++ b/libraries/particles/src/ParticleTree.cpp @@ -391,17 +391,26 @@ bool ParticleTree::encodeParticlesDeletedSince(uint64_t& sinceTime, unsigned cha // called by the server when it knows all nodes have been sent deleted packets void ParticleTree::forgetParticlesDeletedBefore(uint64_t sinceTime) { //qDebug() << "forgetParticlesDeletedBefore()"; + QSet keysToRemove; + _recentlyDeletedParticlesLock.lockForWrite(); QMultiMap::iterator iterator = _recentlyDeletedParticleIDs.begin(); + // First find all the keys in the map that are older and need to be deleted while (iterator != _recentlyDeletedParticleIDs.end()) { //qDebug() << "considering... time/key:" << iterator.key(); if (iterator.key() <= sinceTime) { //qDebug() << "YES older... time/key:" << iterator.key(); - _recentlyDeletedParticleIDs.remove(iterator.key()); + keysToRemove << iterator.key(); } - //qDebug() << "about to ++iterator"; ++iterator; } + + // Now run through the keysToRemove and remove them + foreach (uint64_t value, keysToRemove) { + //qDebug() << "removing the key, _recentlyDeletedParticleIDs.remove(value); time/key:" << value; + _recentlyDeletedParticleIDs.remove(value); + } + _recentlyDeletedParticlesLock.unlock(); //qDebug() << "DONE forgetParticlesDeletedBefore()"; }