basics of virtual baton

This commit is contained in:
ericrius1 2016-03-21 13:52:26 -07:00
parent 6c5ad187a0
commit b7534fbd57
2 changed files with 101 additions and 0 deletions

View file

@ -0,0 +1,70 @@
(function() {
Script.include("../../libraries/virtualBaton.js");
var baton;
var iOwn = false;
var updateLoopConnected = false;
var _this;
BatonSoundEntity = function() {
_this = this;
_this.drumSound = SoundCache.getSound("https://s3.amazonaws.com/hifi-public/sounds/Drums/deepdrum1.wav");
_this.injectorOptions = {position: MyAvatar.position, loop: false, volume: 0.7};
};
function startUpdate() {
iOwn = true;
updateLoopConnected = true;
print("START UPDATE");
Script.update.connect(_this.update);
}
function stopUpdateAndReclaim() {
// when the baton is release
print("CLAIM BATON")
if (updateLoopConnected === true) {
updateLoopConnected = false;
Script.update.disconnect(_this.update);
}
iOwn = false;
// hook up callbacks to the baton
baton.claim(startUpdate, stopUpdateAndReclaim);
}
BatonSoundEntity.prototype = {
update: function() {
if (iOwn === false) {
return;
}
print("EBL I AM UPDATING");
},
preload: function(entityID) {
_this.entityID = entityID;
print("PRELOAD ENTITY SCRIPT!!!");
baton = virtualBaton({
// One winner for each entity
batonName: "io.highfidelity.soundEntityBatonTest:" + _this.entityID
});
Audio.playSound(_this.drumSound, _this.injectorOptions);
stopUpdateAndReclaim();
},
unload: function() {
if (updateLoopConnected === true) {
updateLoopConnected = false;
Script.update.disconnect(_this.update);
}
}
};
// entity scripts always need to return a newly constructed object of our type
return new BatonSoundEntity();
});

View file

@ -0,0 +1,31 @@
var orientation = Camera.getOrientation();
orientation = Quat.safeEulerAngles(orientation);
orientation.x = 0;
orientation = Quat.fromVec3Degrees(orientation);
var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation)));
// Math.random ensures no caching of script
var SCRIPT_URL = Script.resolvePath("batonSoundTestEntityScript.js?v1" + Math.random())
var soundEntity = Entities.addEntity({
type: "Box",
color: {
red: 200,
green: 10,
blue: 10
},
position: center,
dimensions: {
x: 0.1,
y: 0.1,
z: 0.1
},
script: SCRIPT_URL
});
function cleanup() {
Entities.deleteEntity(soundEntity);
}
Script.scriptEnding.connect(cleanup);