From 7da4bc04d3a9eb4db5ffbd9a30a7e20f97dce57a Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 18 Aug 2017 13:36:07 -0700 Subject: [PATCH 1/6] Add DodgeBall. --- .../marketplace/dodgeBall/dodgeBall.js | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 unpublishedScripts/marketplace/dodgeBall/dodgeBall.js diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js new file mode 100644 index 0000000000..9bd1032821 --- /dev/null +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -0,0 +1,164 @@ +(function () { + + var FORCE_DROP_CHANNEL = "Hifi-Hand-Drop"; + + var proxInterval, + proxTimeout; + + var _entityID; + this.preload = function (entityID) { + _entityID = entityID; + + Entities.editEntity(_entityID, { + userData: '{"grabbableKey": {"grabbable": true}' + }); + }; + + var particleTrailEntity = null; + + function particleTrail() { + + var props = { + type: 'ParticleEffect', + name: 'Particle', + parentID: _entityID, + isEmitting: true, + lifespan: 2.0, + maxParticles: 100, + textures: 'https://content.highfidelity.com/DomainContent/production/Particles/wispy-smoke.png', + emitRate: 50, + emitSpeed: 0, + emitterShouldTrail: true, + particleRadius: 0, + radiusSpread: 0, + radiusStart: .2, + radiusFinish: 0.1, + color: { + red: 201, + blue: 201, + green: 34 + }, + + accelerationSpread: { + x: 0, + y: 0, + z: 0 + }, + alpha: 0, + alphaSpread: 0, + alphaStart: 1, + alphaFinish: 0, + polarStart: 0, + polarFinish: 0, + azimuthStart: -180, + azimuthFinish: 180 + }; + + if (particleTrailEntity === null) { + particleTrailEntity = Entities.addEntity(props); + } else { + Entities.editEntity(particleTrailEntity, {}) + } + } + + function particleExplode() { + Entities.deleteEntity(particleTrailEntity); + particleTrailEntity = null; + var entPos = Entities.getEntityProperties(_entityID, 'position').position; + var props = { + type: 'ParticleEffect', + name: 'Particle', + parentID: _entityID, + isEmitting: true, + lifespan: 2, + maxParticles: 10, + position: entPos, + textures: 'https://content.highfidelity.com/DomainContent/production/Particles/wispy-smoke.png', + emitRate: 1, + emitSpeed: 0, + + emitterShouldTrail: false, + particleRadius: 1, + radiusSpread: 0, + radiusStart: 0, + radiusFinish: 1, + color: { + red: 232, + blue: 232, + green: 26 + }, + + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + + alpha: 0, + alphaSpread: 0, + alphaStart: 1, + alphaFinish: .5, + polarStart: 0, + polarFinish: 0, + azimuthStart: -180, + azimuthFinish: 180 + }; + var exposionParticles = Entities.addEntity(props); + Entities.editEntity(_entityID, { + velocity: Vec3.ZERO, + dynamic: false + }); + Script.setTimeout(function () { + Entities.deleteEntity(exposionParticles); + Entities.editEntity(_entityID, { + dynamic: true + }) + }, 500); + } + + + function clearProxCheck() { + if (proxInterval) Script.clearInterval(proxInterval); + if (proxTimeout) Script.clearTimeout(proxTimeout); + } + + function proxCheck() { + var avList = AvatarList.getAvatarIdentifiers(); + var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; + var isAnyAvatarInRange = AvatarList.isAvatarInRange(ballPos, 1); + + particleTrail(); + if (isAnyAvatarInRange) { + clearProxCheck(); + particleExplode(); + } + } + + this.startDistanceGrab = function (thisEntityID, triggerHandAndAvatarUUIDArray) { + clearProxCheck(); + var triggerHand = triggerHandAndAvatarUUIDArray[0]; + var avatarUUID = triggerHandAndAvatarUUIDArray[1]; + + var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; + if (Vec3.distance(ballPos, AvatarList.getAvatar(avatarUUID).position) > 2) { + Messages.sendMessage(FORCE_DROP_CHANNEL, triggerHand, true); + } + + }; + this.startNearGrab = function (thisEntityID, triggerHandAndAvatarUUIDArray) { + clearProxCheck(); + }; + + this.releaseGrab = function (thisEntityID) { + + Script.setTimeout(function () { + proxInterval = Script.setInterval(proxCheck, 50); + }, 150); // Setting a delay to give it time to leave initial avatar without proc. + + proxTimeout = Script.setTimeout(function () { + Script.clearInterval(proxInterval); + Entities.deleteEntity(particleTrailEntity); + }, 10000) + } + +}); From 397d2a68534cea8d5c5e832571b676148d223fc9 Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 18 Aug 2017 16:12:56 -0700 Subject: [PATCH 2/6] Minor Code Cleanup. --- unpublishedScripts/marketplace/dodgeBall/dodgeBall.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js index 9bd1032821..05d7935757 100644 --- a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -38,7 +38,6 @@ blue: 201, green: 34 }, - accelerationSpread: { x: 0, y: 0, @@ -76,7 +75,6 @@ textures: 'https://content.highfidelity.com/DomainContent/production/Particles/wispy-smoke.png', emitRate: 1, emitSpeed: 0, - emitterShouldTrail: false, particleRadius: 1, radiusSpread: 0, @@ -87,13 +85,11 @@ blue: 232, green: 26 }, - emitAcceleration: { x: 0, y: 0, z: 0 }, - alpha: 0, alphaSpread: 0, alphaStart: 1, @@ -123,7 +119,6 @@ } function proxCheck() { - var avList = AvatarList.getAvatarIdentifiers(); var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; var isAnyAvatarInRange = AvatarList.isAvatarInRange(ballPos, 1); From 37ee2a31d4a7dcb0e8b76a4764a53b06b9cba4f9 Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 18 Aug 2017 18:50:03 -0700 Subject: [PATCH 3/6] Remove particleTrailEntity from every prox check, the trail no longer needs to be updated each check. --- unpublishedScripts/marketplace/dodgeBall/dodgeBall.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js index 05d7935757..4ccc41b3b7 100644 --- a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -53,11 +53,7 @@ azimuthFinish: 180 }; - if (particleTrailEntity === null) { particleTrailEntity = Entities.addEntity(props); - } else { - Entities.editEntity(particleTrailEntity, {}) - } } function particleExplode() { @@ -122,7 +118,8 @@ var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; var isAnyAvatarInRange = AvatarList.isAvatarInRange(ballPos, 1); - particleTrail(); + if (particleTrailEntity) particleTrail(); + if (isAnyAvatarInRange) { clearProxCheck(); particleExplode(); From 9ff68ce10c47c2831d8207b58ec1dc4d4cedf7d1 Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 18 Aug 2017 18:51:44 -0700 Subject: [PATCH 4/6] Remove particleTrailEntity from every prox check, the trail no longer needs to be updated each check. --- unpublishedScripts/marketplace/dodgeBall/dodgeBall.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js index 4ccc41b3b7..6330b1c9b5 100644 --- a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -118,7 +118,7 @@ var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; var isAnyAvatarInRange = AvatarList.isAvatarInRange(ballPos, 1); - if (particleTrailEntity) particleTrail(); + if (particleTrailEntity === null) particleTrail(); if (isAnyAvatarInRange) { clearProxCheck(); From 6892cdb57de04c936a73f890119951a5e258c781 Mon Sep 17 00:00:00 2001 From: Midnight Date: Fri, 18 Aug 2017 19:20:34 -0700 Subject: [PATCH 5/6] Consolidate Clear Prox Code, Add Clear Prox to collisionWithEntity. --- .../marketplace/dodgeBall/dodgeBall.js | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js index 6330b1c9b5..737db9770c 100644 --- a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -57,8 +57,6 @@ } function particleExplode() { - Entities.deleteEntity(particleTrailEntity); - particleTrailEntity = null; var entPos = Entities.getEntityProperties(_entityID, 'position').position; var props = { type: 'ParticleEffect', @@ -110,7 +108,12 @@ function clearProxCheck() { - if (proxInterval) Script.clearInterval(proxInterval); + if (proxInterval) { + Script.clearInterval(proxInterval); + Entities.deleteEntity(particleTrailEntity); + particleTrailEntity = null; + } + if (proxTimeout) Script.clearTimeout(proxTimeout); } @@ -118,8 +121,6 @@ var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; var isAnyAvatarInRange = AvatarList.isAvatarInRange(ballPos, 1); - if (particleTrailEntity === null) particleTrail(); - if (isAnyAvatarInRange) { clearProxCheck(); particleExplode(); @@ -143,14 +144,19 @@ this.releaseGrab = function (thisEntityID) { + if (particleTrailEntity === null) particleTrail(); + Script.setTimeout(function () { proxInterval = Script.setInterval(proxCheck, 50); - }, 150); // Setting a delay to give it time to leave initial avatar without proc. + }, 200); // Setting a delay to give it time to leave initial avatar without proc. proxTimeout = Script.setTimeout(function () { - Script.clearInterval(proxInterval); - Entities.deleteEntity(particleTrailEntity); + clearProxCheck(); }, 10000) - } + }; + + this.collisionWithEntity = function(thisEntityID, collisionEntityID, collisionInfo) { + clearProxCheck(); + }; }); From 9185e1d80d23ea1fe4f0b70ca02df80f837c98b1 Mon Sep 17 00:00:00 2001 From: Midnight Date: Mon, 21 Aug 2017 14:48:10 -0700 Subject: [PATCH 6/6] code style. --- .../marketplace/dodgeBall/dodgeBall.js | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js index 737db9770c..6afb82770f 100644 --- a/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js +++ b/unpublishedScripts/marketplace/dodgeBall/dodgeBall.js @@ -53,7 +53,7 @@ azimuthFinish: 180 }; - particleTrailEntity = Entities.addEntity(props); + particleTrailEntity = Entities.addEntity(props); } function particleExplode() { @@ -93,13 +93,13 @@ azimuthStart: -180, azimuthFinish: 180 }; - var exposionParticles = Entities.addEntity(props); + var explosionParticles = Entities.addEntity(props); Entities.editEntity(_entityID, { velocity: Vec3.ZERO, dynamic: false }); Script.setTimeout(function () { - Entities.deleteEntity(exposionParticles); + Entities.deleteEntity(explosionParticles); Entities.editEntity(_entityID, { dynamic: true }) @@ -114,7 +114,9 @@ particleTrailEntity = null; } - if (proxTimeout) Script.clearTimeout(proxTimeout); + if (proxTimeout) { + Script.clearTimeout(proxTimeout); + } } function proxCheck() { @@ -133,7 +135,9 @@ var avatarUUID = triggerHandAndAvatarUUIDArray[1]; var ballPos = Entities.getEntityProperties(_entityID, ['position']).position; - if (Vec3.distance(ballPos, AvatarList.getAvatar(avatarUUID).position) > 2) { + var MAX_DISTANCE_GRAB = 2; //meter + + if (Vec3.distance(ballPos, AvatarList.getAvatar(avatarUUID).position) > MAX_DISTANCE_GRAB) { Messages.sendMessage(FORCE_DROP_CHANNEL, triggerHand, true); } @@ -144,7 +148,9 @@ this.releaseGrab = function (thisEntityID) { - if (particleTrailEntity === null) particleTrail(); + if (particleTrailEntity === null) { + particleTrail(); + } Script.setTimeout(function () { proxInterval = Script.setInterval(proxCheck, 50); @@ -155,7 +161,7 @@ }, 10000) }; - this.collisionWithEntity = function(thisEntityID, collisionEntityID, collisionInfo) { + this.collisionWithEntity = function (thisEntityID, collisionEntityID, collisionInfo) { clearProxCheck(); };