mirror of
https://github.com/overte-org/overte.git
synced 2025-08-07 16:50:43 +02:00
Merge pull request #6874 from imgntn/fixgrabparticlesystems
Remove Particle Search Beams from Grab Script and Create / Destroy Systems on Demand
This commit is contained in:
commit
5dc1eb986e
1 changed files with 15 additions and 80 deletions
|
@ -134,12 +134,11 @@ var blacklist = [];
|
||||||
//we've created various ways of visualizing looking for and moving distant objects
|
//we've created various ways of visualizing looking for and moving distant objects
|
||||||
var USE_ENTITY_LINES_FOR_SEARCHING = false;
|
var USE_ENTITY_LINES_FOR_SEARCHING = false;
|
||||||
var USE_OVERLAY_LINES_FOR_SEARCHING = true;
|
var USE_OVERLAY_LINES_FOR_SEARCHING = true;
|
||||||
var USE_PARTICLE_BEAM_FOR_SEARCHING = false;
|
|
||||||
|
|
||||||
var USE_ENTITY_LINES_FOR_MOVING = false;
|
var USE_ENTITY_LINES_FOR_MOVING = false;
|
||||||
var USE_OVERLAY_LINES_FOR_MOVING = false;
|
var USE_OVERLAY_LINES_FOR_MOVING = false;
|
||||||
var USE_PARTICLE_BEAM_FOR_MOVING = true;
|
var USE_PARTICLE_BEAM_FOR_MOVING = true;
|
||||||
var TEMPORARY_PARTICLE_BEAM_LIFETIME = 30;
|
|
||||||
|
|
||||||
var USE_SPOTLIGHT = false;
|
var USE_SPOTLIGHT = false;
|
||||||
var USE_POINTLIGHT = 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) {
|
this.handleDistantParticleBeam = function(handPosition, objectPosition, color) {
|
||||||
|
|
||||||
|
@ -505,7 +486,6 @@ function MyController(hand) {
|
||||||
|
|
||||||
var lifespan = distance / speed;
|
var lifespan = distance / speed;
|
||||||
|
|
||||||
|
|
||||||
if (this.particleBeam === null) {
|
if (this.particleBeam === null) {
|
||||||
this.createParticleBeam(objectPosition, finalRotation, color, speed, spread, lifespan);
|
this.createParticleBeam(objectPosition, finalRotation, color, speed, spread, lifespan);
|
||||||
} else {
|
} else {
|
||||||
|
@ -520,6 +500,7 @@ function MyController(hand) {
|
||||||
isEmitting: true,
|
isEmitting: true,
|
||||||
position: position,
|
position: position,
|
||||||
visible: false,
|
visible: false,
|
||||||
|
lifetime: 60,
|
||||||
"name": "Particle Beam",
|
"name": "Particle Beam",
|
||||||
"color": color,
|
"color": color,
|
||||||
"maxParticles": 2000,
|
"maxParticles": 2000,
|
||||||
|
@ -555,15 +536,6 @@ function MyController(hand) {
|
||||||
},
|
},
|
||||||
"particleRadius": 0.015,
|
"particleRadius": 0.015,
|
||||||
"radiusSpread": 0.005,
|
"radiusSpread": 0.005,
|
||||||
// "radiusStart": 0.01,
|
|
||||||
// "radiusFinish": 0.01,
|
|
||||||
// "colorSpread": {
|
|
||||||
// "red": 0,
|
|
||||||
// "green": 0,
|
|
||||||
// "blue": 0
|
|
||||||
// },
|
|
||||||
// "colorStart": color,
|
|
||||||
// "colorFinish": color,
|
|
||||||
"alpha": 1,
|
"alpha": 1,
|
||||||
"alphaSpread": 0,
|
"alphaSpread": 0,
|
||||||
"alphaStart": 1,
|
"alphaStart": 1,
|
||||||
|
@ -712,9 +684,8 @@ function MyController(hand) {
|
||||||
|
|
||||||
this.particleBeamOff = function() {
|
this.particleBeamOff = function() {
|
||||||
if (this.particleBeam !== null) {
|
if (this.particleBeam !== null) {
|
||||||
Entities.editEntity(this.particleBeam, {
|
Entities.deleteEntity(this.particleBeam);
|
||||||
visible: false
|
this.particleBeam = null;
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,7 +715,7 @@ function MyController(hand) {
|
||||||
this.overlayLineOff();
|
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.particleBeamOff();
|
||||||
}
|
}
|
||||||
this.searchSphereOff();
|
this.searchSphereOff();
|
||||||
|
@ -814,8 +785,7 @@ function MyController(hand) {
|
||||||
|
|
||||||
var distantPickRay = {
|
var distantPickRay = {
|
||||||
origin: PICK_WITH_HAND_RAY ? handPosition : Camera.position,
|
origin: PICK_WITH_HAND_RAY ? handPosition : Camera.position,
|
||||||
direction: PICK_WITH_HAND_RAY ? Quat.getUp(this.getHandRotation()) :
|
direction: PICK_WITH_HAND_RAY ? Quat.getUp(this.getHandRotation()) : Vec3.mix(Quat.getUp(this.getHandRotation()), Quat.getFront(Camera.orientation), HAND_HEAD_MIX_RATIO),
|
||||||
Vec3.mix(Quat.getUp(this.getHandRotation()), Quat.getFront(Camera.orientation), HAND_HEAD_MIX_RATIO),
|
|
||||||
length: PICK_MAX_DISTANCE
|
length: PICK_MAX_DISTANCE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -946,10 +916,6 @@ function MyController(hand) {
|
||||||
this.lineOn(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
|
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_SIZE = 0.011;
|
||||||
var SEARCH_SPHERE_FOLLOW_RATE = 0.50;
|
var SEARCH_SPHERE_FOLLOW_RATE = 0.50;
|
||||||
|
|
||||||
|
@ -1160,7 +1126,6 @@ function MyController(hand) {
|
||||||
}
|
}
|
||||||
if (USE_PARTICLE_BEAM_FOR_MOVING === true) {
|
if (USE_PARTICLE_BEAM_FOR_MOVING === true) {
|
||||||
this.handleDistantParticleBeam(handPosition, grabbedProperties.position, INTERSECT_COLOR)
|
this.handleDistantParticleBeam(handPosition, grabbedProperties.position, INTERSECT_COLOR)
|
||||||
// this.handleDistantParticleBeam(handPosition, this.currentObjectPosition, INTERSECT_COLOR)
|
|
||||||
}
|
}
|
||||||
if (USE_POINTLIGHT === true) {
|
if (USE_POINTLIGHT === true) {
|
||||||
this.handlePointLight(this.grabbedEntity);
|
this.handlePointLight(this.grabbedEntity);
|
||||||
|
@ -1702,12 +1667,6 @@ function MyController(hand) {
|
||||||
var rightController = new MyController(RIGHT_HAND);
|
var rightController = new MyController(RIGHT_HAND);
|
||||||
var leftController = new MyController(LEFT_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_NAME = "com.highfidelity.handControllerGrab";
|
||||||
|
|
||||||
var mapping = Controller.newMapping(MAPPING_NAME);
|
var mapping = Controller.newMapping(MAPPING_NAME);
|
||||||
|
@ -1784,31 +1743,7 @@ function cleanup() {
|
||||||
rightController.cleanup();
|
rightController.cleanup();
|
||||||
leftController.cleanup();
|
leftController.cleanup();
|
||||||
Controller.disableMapping(MAPPING_NAME);
|
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.scriptEnding.connect(cleanup);
|
||||||
Script.update.connect(update);
|
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();
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue