diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index ac79390b6c..431322d8c2 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -134,12 +134,11 @@ var blacklist = []; //we've created various ways of visualizing looking for and moving distant objects var USE_ENTITY_LINES_FOR_SEARCHING = false; var USE_OVERLAY_LINES_FOR_SEARCHING = true; -var USE_PARTICLE_BEAM_FOR_SEARCHING = false; var USE_ENTITY_LINES_FOR_MOVING = false; var USE_OVERLAY_LINES_FOR_MOVING = false; var USE_PARTICLE_BEAM_FOR_MOVING = true; -var TEMPORARY_PARTICLE_BEAM_LIFETIME = 30; + var USE_SPOTLIGHT = false; var USE_POINTLIGHT = false; @@ -475,24 +474,6 @@ function MyController(hand) { } }; - this.handleParticleBeam = function(position, orientation, color) { - - var rotation = Quat.angleAxis(0, { - x: 1, - y: 0, - z: 0 - }); - - var finalRotation = Quat.multiply(orientation, rotation); - var lifespan = LINE_LENGTH / 10; - var speed = 5; - var spread = 2; - if (this.particleBeam === null) { - this.createParticleBeam(position, finalRotation, color, speed, spread, lifespan); - } else { - this.updateParticleBeam(position, finalRotation, color, speed, spread, lifespan); - } - }; this.handleDistantParticleBeam = function(handPosition, objectPosition, color) { @@ -505,7 +486,6 @@ function MyController(hand) { var lifespan = distance / speed; - if (this.particleBeam === null) { this.createParticleBeam(objectPosition, finalRotation, color, speed, spread, lifespan); } else { @@ -520,6 +500,7 @@ function MyController(hand) { isEmitting: true, position: position, visible: false, + lifetime: 60, "name": "Particle Beam", "color": color, "maxParticles": 2000, @@ -555,15 +536,6 @@ function MyController(hand) { }, "particleRadius": 0.015, "radiusSpread": 0.005, - // "radiusStart": 0.01, - // "radiusFinish": 0.01, - // "colorSpread": { - // "red": 0, - // "green": 0, - // "blue": 0 - // }, - // "colorStart": color, - // "colorFinish": color, "alpha": 1, "alphaSpread": 0, "alphaStart": 1, @@ -712,9 +684,8 @@ function MyController(hand) { this.particleBeamOff = function() { if (this.particleBeam !== null) { - Entities.editEntity(this.particleBeam, { - visible: false - }) + Entities.deleteEntity(this.particleBeam); + this.particleBeam = null; } } @@ -744,7 +715,7 @@ function MyController(hand) { this.overlayLineOff(); } - if (USE_PARTICLE_BEAM_FOR_SEARCHING === true || USE_PARTICLE_BEAM_FOR_MOVING === true) { + if (USE_PARTICLE_BEAM_FOR_MOVING === true) { this.particleBeamOff(); } this.searchSphereOff(); @@ -814,8 +785,7 @@ function MyController(hand) { var distantPickRay = { origin: PICK_WITH_HAND_RAY ? handPosition : Camera.position, - direction: PICK_WITH_HAND_RAY ? Quat.getUp(this.getHandRotation()) : - Vec3.mix(Quat.getUp(this.getHandRotation()), Quat.getFront(Camera.orientation), HAND_HEAD_MIX_RATIO), + direction: PICK_WITH_HAND_RAY ? Quat.getUp(this.getHandRotation()) : Vec3.mix(Quat.getUp(this.getHandRotation()), Quat.getFront(Camera.orientation), HAND_HEAD_MIX_RATIO), length: PICK_MAX_DISTANCE }; @@ -853,7 +823,7 @@ function MyController(hand) { intersection = Entities.findRayIntersection(pickRayBacked, true, [], blacklist); } else { intersection = Entities.findRayIntersection(pickRayBacked, true); - } + } if (intersection.intersects) { rayPickedCandidateEntities.push(intersection.entityID); @@ -925,11 +895,11 @@ function MyController(hand) { if (typeof grabbableData.spatialKey === 'undefined') { // We want to give a temporary position offset to this object so it is pulled close to hand var intersectionPointToCenterDistance = Vec3.length(Vec3.subtract(intersection.intersection, - intersection.properties.position)); + intersection.properties.position)); this.temporaryPositionOffset = Vec3.normalize(Vec3.subtract(intersection.properties.position, handPosition)); this.temporaryPositionOffset = Vec3.multiply(this.temporaryPositionOffset, - intersectionPointToCenterDistance * - FAR_TO_NEAR_GRAB_PADDING_FACTOR); + intersectionPointToCenterDistance * + FAR_TO_NEAR_GRAB_PADDING_FACTOR); } this.setState(this.state == STATE_SEARCHING ? STATE_DISTANCE_HOLDING : STATE_EQUIP); this.searchSphereOff(); @@ -946,10 +916,6 @@ function MyController(hand) { this.lineOn(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR); } - if (USE_PARTICLE_BEAM_FOR_SEARCHING === true) { - this.handleParticleBeam(distantPickRay.origin, this.getHandRotation(), NO_INTERSECT_COLOR); - } - var SEARCH_SPHERE_SIZE = 0.011; var SEARCH_SPHERE_FOLLOW_RATE = 0.50; @@ -957,7 +923,7 @@ function MyController(hand) { // If we hit something with our pick ray, move the search sphere toward that distance this.searchSphereDistance = this.searchSphereDistance * SEARCH_SPHERE_FOLLOW_RATE + this.intersectionDistance * (1.0 - SEARCH_SPHERE_FOLLOW_RATE); } - + var searchSphereLocation = Vec3.sum(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, this.searchSphereDistance)); this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance, (this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR); if ((USE_OVERLAY_LINES_FOR_SEARCHING === true) && PICK_WITH_HAND_RAY) { @@ -1160,7 +1126,6 @@ function MyController(hand) { } if (USE_PARTICLE_BEAM_FOR_MOVING === true) { this.handleDistantParticleBeam(handPosition, grabbedProperties.position, INTERSECT_COLOR) - // this.handleDistantParticleBeam(handPosition, this.currentObjectPosition, INTERSECT_COLOR) } if (USE_POINTLIGHT === true) { this.handlePointLight(this.grabbedEntity); @@ -1598,8 +1563,8 @@ function MyController(hand) { if (this.actionID !== null) { //sometimes we want things to stay right where they are when we let go. var releaseVelocityData = getEntityCustomData(GRABBABLE_DATA_KEY, - this.grabbedEntity, - DEFAULT_GRABBABLE_DATA); + this.grabbedEntity, + DEFAULT_GRABBABLE_DATA); if (releaseVelocityData.disableReleaseVelocity === true) { Entities.deleteAction(this.grabbedEntity, this.actionID); @@ -1702,12 +1667,6 @@ function MyController(hand) { var rightController = new MyController(RIGHT_HAND); var leftController = new MyController(LEFT_HAND); -//preload the particle beams so that they are full length when you start searching -if (USE_PARTICLE_BEAM_FOR_SEARCHING === true || USE_PARTICLE_BEAM_FOR_MOVING === true) { - rightController.createParticleBeam(); - leftController.createParticleBeam(); -} - var MAPPING_NAME = "com.highfidelity.handControllerGrab"; var mapping = Controller.newMapping(MAPPING_NAME); @@ -1784,31 +1743,7 @@ function cleanup() { rightController.cleanup(); leftController.cleanup(); Controller.disableMapping(MAPPING_NAME); - if (USE_PARTICLE_BEAM_FOR_SEARCHING === true || USE_PARTICLE_BEAM_FOR_MOVING === true) { - Script.update.disconnect(renewParticleBeamLifetimes); - } + } Script.scriptEnding.connect(cleanup); -Script.update.connect(update); - -// particle systems can end up hanging around if a user crashes or something else causes controller cleanup not to get called. -// we can't create the search system on-demand since it takes some time for the particles to reach their entire length. -// thus the system cannot have a fixed lifetime. this loop updates the lifetimes and will stop updating if a user crashes. - -if (USE_PARTICLE_BEAM_FOR_SEARCHING === true || USE_PARTICLE_BEAM_FOR_MOVING === true) { - Script.update.connect(renewParticleBeamLifetimes) -} - -var sinceLastParticleLifetimeUpdate = 0; - -function renewParticleBeamLifetimes(deltaTime) { - //debounce this call since we don't want it 60x a second - sinceLastParticleLifetimeUpdate = sinceLastParticleLifetimeUpdate + deltaTime; - if (sinceLastParticleLifetimeUpdate > TEMPORARY_PARTICLE_BEAM_LIFETIME - 2) { - sinceLastParticleLifetimeUpdate = 0; - } else { - return; - } - rightController.renewParticleBeamLifetime(); - leftController.renewParticleBeamLifetime(); -} +Script.update.connect(update); \ No newline at end of file