mirror of
https://github.com/overte-org/overte.git
synced 2025-08-07 18:10:37 +02:00
Merge pull request #4605 from ericrius1/light
Updated lightcontroller.js logic to find the nearest light when user cli...
This commit is contained in:
commit
fea7a58774
1 changed files with 100 additions and 0 deletions
100
examples/entityScripts/alternativeLightController.js
Normal file
100
examples/entityScripts/alternativeLightController.js
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
(function() {
|
||||||
|
this.preload = function(entityId) {
|
||||||
|
var soundURLs = ["https://hifi-public.s3.amazonaws.com/sounds/Switches%20and%20sliders/lamp_switch_1.wav",
|
||||||
|
"https://hifi-public.s3.amazonaws.com/sounds/Switches%20and%20sliders/lamp_switch_2.wav",
|
||||||
|
"https://hifi-public.s3.amazonaws.com/sounds/Switches%20and%20sliders/lamp_switch_3.wav"];
|
||||||
|
this.entityId = entityId;
|
||||||
|
this.properties = Entities.getEntityProperties(this.entityId);
|
||||||
|
this.previousPosition = this.properties.position;
|
||||||
|
this.previousRotation = this.properties.rotation;
|
||||||
|
this.getUserData()
|
||||||
|
if (!this.userData) {
|
||||||
|
this.userData = {};
|
||||||
|
this.userData.lightOn = false;
|
||||||
|
this.userData.soundIndex = Math.floor(Math.random() * soundURLs.length);
|
||||||
|
this.updateUserData();
|
||||||
|
}
|
||||||
|
this.sound = SoundCache.getSound(soundURLs[this.userData.soundIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.getUserData = function() {
|
||||||
|
if (this.properties.userData) {
|
||||||
|
this.userData = JSON.parse(this.properties.userData);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateUserData = function() {
|
||||||
|
Entities.editEntity(this.entityId, {
|
||||||
|
userData: JSON.stringify(this.userData)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.clickReleaseOnEntity = function(entityId, mouseEvent) {
|
||||||
|
if (!mouseEvent.isLeftButton) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//first find closest light
|
||||||
|
this.entityId = entityId
|
||||||
|
this.playSound();
|
||||||
|
this.properties = Entities.getEntityProperties(this.entityId)
|
||||||
|
this.light = this.findClosestLight();
|
||||||
|
if (this.light) {
|
||||||
|
this.lightProperties = Entities.getEntityProperties(this.light);
|
||||||
|
this.getUserData();
|
||||||
|
Entities.editEntity(this.light, {
|
||||||
|
visible: !this.userData.lightOn
|
||||||
|
});
|
||||||
|
|
||||||
|
this.userData.lightOn = !this.userData.lightOn;
|
||||||
|
this.updateUserData();
|
||||||
|
this.tryMoveLight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.playSound = function() {
|
||||||
|
if (this.sound && this.sound.downloaded) {
|
||||||
|
Audio.playSound(this.sound, {
|
||||||
|
position: this.properties.position,
|
||||||
|
volume: 0.3
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
print("Warning: Couldn't play sound.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.tryMoveLight = function() {
|
||||||
|
if (this.light) {
|
||||||
|
//compute offset position
|
||||||
|
var offsetPosition = Quat.multiply(Quat.inverse(this.previousRotation), Vec3.subtract(this.lightProperties.position, this.previousPosition));
|
||||||
|
var newPosition = Vec3.sum(this.properties.position, Vec3.multiplyQbyV(this.properties.rotation, offsetPosition));
|
||||||
|
if (!Vec3.equal(newPosition, this.lightProperties.position)) {
|
||||||
|
Entities.editEntity(this.light, {position: newPosition});
|
||||||
|
}
|
||||||
|
this.previousPosition = this.properties.position;
|
||||||
|
this.previousRotation = this.properties.rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this.findClosestLight = function() {
|
||||||
|
var entities = Entities.findEntities(this.properties.position, 10);
|
||||||
|
var lightEntities = [];
|
||||||
|
var closestLight = null;
|
||||||
|
var nearestDistance = 20
|
||||||
|
|
||||||
|
for (var i = 0; i < entities.length; i++) {
|
||||||
|
var props = Entities.getEntityProperties(entities[i]);
|
||||||
|
if (props.type === "Light") {
|
||||||
|
var distance = Vec3.distance(props.position, this.properties.position)
|
||||||
|
if (distance < nearestDistance) {
|
||||||
|
closestLight = entities[i];
|
||||||
|
nearestDistance = distance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return closestLight;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in a new issue