overte/unpublishedScripts/DomainContent/Home/switches/livingRoomFan.js

191 lines
No EOL
5.7 KiB
JavaScript

//
//
// Created by The Content Team 4/10/216
// Copyright 2016 High Fidelity, Inc.
//
// this switch finds a fan entity and changes its angular damping so that it spins or doesn't spin as appropriate.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
(function() {
var FAN_SOUND_ENTITY_NAME = "home_sfx_ceiling_fan"
var SEARCH_RADIUS = 100;
var _this;
var utilitiesScript = Script.resolvePath('../utils.js');
Script.include(utilitiesScript);
Switch = function() {
_this = this;
this.switchSound = SoundCache.getSound("atp:/switches/lamp_switch_2.wav");
_this.FAN_VOLUME = 0.1;
};
Switch.prototype = {
prefix: 'home_living_room',
clickReleaseOnEntity: function(entityID, mouseEvent) {
if (!mouseEvent.isLeftButton) {
return;
}
this.toggle();
},
startNearTrigger: function() {
this.toggle();
},
fanRotationOn: function() {
var success = Entities.editEntity(_this.fan, {
angularDamping: 0,
angularVelocity: {
x: 0,
y: 4,
z: 0
},
});
},
fanRotationOff: function() {
Entities.editEntity(_this.fan, {
angularDamping: 0.5,
})
},
fanSoundOn: function() {
if (!_this.fanSoundEntity) {
return;
}
var soundUserData = getEntityCustomData("soundKey", _this.fanSoundEntity);
if (!soundUserData) {
print("NO SOUND USER DATA! RETURNING.");
return;
}
soundUserData.volume = _this.FAN_VOLUME;
setEntityCustomData("soundKey", _this.fanSoundEntity, soundUserData);
},
fanSoundOff: function() {
print('HOME FAN OFF 1')
if (!_this.fanSoundEntity) {
return;
}
print('HOME FAN OFF 2')
var soundUserData = getEntityCustomData("soundKey", _this.fanSoundEntity);
if (!soundUserData) {
print("NO SOUND USER DATA! RETURNING.");
return;
}
print('HOME FAN OFF 3')
soundUserData.volume = 0.0;
setEntityCustomData("soundKey", _this.fanSoundEntity, soundUserData);
print('HOME FAN OFF 4')
},
findFan: function() {
var found = [];
var results = Entities.findEntities(this.position, SEARCH_RADIUS);
results.forEach(function(result) {
var properties = Entities.getEntityProperties(result);
if (properties.name === _this.prefix + "_model_ceiling_fan_blades") {
found.push(result);
}
});
return found[0];
},
findFanSoundEntity: function() {
var myProps = Entities.getEntityProperties(this.entityID);
var entities = Entities.findEntities(myProps.position, SEARCH_RADIUS);
var fan = null;
print('HOME LOOKING FOR A FAN')
print('HOME TOTAL ENTITIES:: ' + entities.length)
entities.forEach(function(entity) {
var props = Entities.getEntityProperties(entity);
if (props.name === FAN_SOUND_ENTITY_NAME) {
print('HOME FAN FOUND:: ' + props.id)
fan = entity;
}
});
return fan;
},
toggle: function() {
this.fan = this.findFan();
_this.fanSoundEntity = _this.findFanSoundEntity();
this._switch = getEntityCustomData('home-switch', this.entityID, {
state: 'off'
});
if (this._switch.state === 'off') {
this.fanRotationOn();
this.fanSoundOn();
setEntityCustomData('home-switch', this.entityID, {
state: 'on'
});
Entities.editEntity(this.entityID, {
"animation": {
"currentFrame": 1,
"firstFrame": 1,
"hold": 1,
"lastFrame": 2,
"url": "atp:/switches/fanswitch.fbx"
},
})
} else {
this.fanRotationOff();
this.fanSoundOff();
setEntityCustomData('home-switch', this.entityID, {
state: 'off'
});
Entities.editEntity(this.entityID, {
"animation": {
"currentFrame": 3,
"firstFrame": 3,
"hold": 1,
"lastFrame": 4,
"url": "atp:/switches/fanswitch.fbx"
},
})
}
Audio.playSound(this.switchSound, {
volume: 0.5,
position: this.position
});
},
preload: function(entityID) {
this.entityID = entityID;
setEntityCustomData('grabbableKey', this.entityID, {
wantsTrigger: true
});
var properties = Entities.getEntityProperties(this.entityID);
//The light switch is static, so just cache its position once
this.position = Entities.getEntityProperties(this.entityID, "position").position;
}
};
// entity scripts always need to return a newly constructed object of our type
return new Switch();
});