Merge pull request #6580 from imgntn/parented_flashlight

Update Flashlight to use Parenting
This commit is contained in:
Brad Hefta-Gaub 2015-12-10 07:43:10 -08:00
commit 27d28900a4

View file

@ -25,7 +25,7 @@
//we are creating lights that we don't want to get stranded so lets make sure that we can get rid of them //we are creating lights that we don't want to get stranded so lets make sure that we can get rid of them
var startTime = Date.now(); var startTime = Date.now();
//if you're going to be using this in a dungeon or something and holding it for a long time, increase this lifetime value. //if you're going to be using this in a dungeon or something and holding it for a long time, increase this lifetime value.
var LIFETIME = 25; var LIFETIME = 100;
var MSEC_PER_SEC = 1000.0; var MSEC_PER_SEC = 1000.0;
// this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
@ -85,9 +85,14 @@
this.hand = 'LEFT'; this.hand = 'LEFT';
}, },
startNearGrab: function() { startNearGrab: function(entityID) {
if (!this.hasSpotlight) { if (!this.hasSpotlight) {
var modelProperties = Entities.getEntityProperties(this.entityID, ['position', 'rotation']);
var lightTransform = evalLightWorldTransform(modelProperties.position, modelProperties.rotation);
var glowLightTransform = glowLightWorldTransform(modelProperties.position, modelProperties.rotation);
//this light casts the beam //this light casts the beam
this.spotlight = Entities.addEntity({ this.spotlight = Entities.addEntity({
type: "Light", type: "Light",
@ -97,6 +102,7 @@
y: 2, y: 2,
z: 20 z: 20
}, },
parentID: this.entityID,
color: { color: {
red: 255, red: 255,
green: 255, green: 255,
@ -105,7 +111,9 @@
intensity: 2, intensity: 2,
exponent: 0.3, exponent: 0.3,
cutoff: 20, cutoff: 20,
lifetime: LIFETIME lifetime: LIFETIME,
position: lightTransform.p,
rotation: lightTransform.q,
}); });
//this light creates the effect of a bulb at the end of the flashlight //this light creates the effect of a bulb at the end of the flashlight
@ -116,6 +124,7 @@
y: 0.25, y: 0.25,
z: 0.25 z: 0.25
}, },
parentID: this.entityID,
isSpotlight: false, isSpotlight: false,
color: { color: {
red: 255, red: 255,
@ -123,8 +132,11 @@
blue: 255 blue: 255
}, },
exponent: 0, exponent: 0,
lifetime: LIFETIME,
cutoff: 90, // in degrees cutoff: 90, // in degrees
lifetime: LIFETIME position: glowLightTransform.p,
rotation: glowLightTransform.q,
}); });
this.hasSpotlight = true; this.hasSpotlight = true;
@ -142,7 +154,6 @@
//only set the active hand once -- if we always read the current hand, our 'holding' hand will get overwritten //only set the active hand once -- if we always read the current hand, our 'holding' hand will get overwritten
this.setWhichHand(); this.setWhichHand();
} else { } else {
this.updateLightPositions();
this.changeLightWithTriggerPressure(this.whichHand); this.changeLightWithTriggerPressure(this.whichHand);
} }
}, },
@ -159,29 +170,7 @@
this.lightOn = false; this.lightOn = false;
} }
}, },
updateLightPositions: function() {
var modelProperties = Entities.getEntityProperties(this.entityID, ['position', 'rotation']);
//move the two lights along the vectors we set above
var lightTransform = evalLightWorldTransform(modelProperties.position, modelProperties.rotation);
var glowLightTransform = glowLightWorldTransform(modelProperties.position, modelProperties.rotation);
//move them with the entity model
Entities.editEntity(this.spotlight, {
position: lightTransform.p,
rotation: lightTransform.q,
lifetime: (Date.now() - startTime) / MSEC_PER_SEC + LIFETIME
});
Entities.editEntity(this.glowLight, {
position: glowLightTransform.p,
rotation: glowLightTransform.q,
lifetime: (Date.now() - startTime) / MSEC_PER_SEC + LIFETIME
});
},
changeLightWithTriggerPressure: function(flashLightHand) { changeLightWithTriggerPressure: function(flashLightHand) {
if (flashLightHand === 'LEFT') { if (flashLightHand === 'LEFT') {