166 lines
No EOL
6.7 KiB
JavaScript
166 lines
No EOL
6.7 KiB
JavaScript
"use strict";
|
|
var _this = this;
|
|
var blockEntityIDs = [];
|
|
var origBlockPositions = [];
|
|
var blockGridFilePath = "https://hifi-content.s3.amazonaws.com/patrickmanalich/seek-laser-test/blocks-grid.json";
|
|
var blocksOn = false;
|
|
var blockProperties = {
|
|
angularDamping: 0.10000000149011612,
|
|
clientOnly: 0,
|
|
collisionsWillMove: 1,
|
|
dimensions: {
|
|
x: 0.05,
|
|
y: 0.15,
|
|
z: 0.05
|
|
},
|
|
dynamic: 1,
|
|
friction: 0.67,
|
|
gravity: {
|
|
x: 0,
|
|
y: -6,
|
|
z: 0
|
|
},
|
|
color: {
|
|
red: 247,
|
|
green: 45,
|
|
blue: 78
|
|
},
|
|
restitution: 0.1,
|
|
shape: "Cube",
|
|
type: "Box",
|
|
script: "https://hifi-content.s3.amazonaws.com/patrickmanalich/seek-laser-test/block-script.js"
|
|
}
|
|
var targetBlockIndex;
|
|
var edgeBlockIndices = [45, 57, 12, 52, 58, 14, 32, 54, 19, 48, 2, 11, 35, 27, 49];
|
|
var blocksChannel = "blocks-channel";
|
|
var successSound = SoundCache.getSound("https://hifi-content.s3.amazonaws.com/patrickmanalich/seek-laser-test/success.wav");
|
|
var failSound = SoundCache.getSound("https://hifi-content.s3.amazonaws.com/patrickmanalich/seek-laser-test/fail.wav");
|
|
var resetSound = SoundCache.getSound("https://hifi-content.s3.amazonaws.com/patrickmanalich/seek-laser-test/reset.wav");
|
|
|
|
function setRandomBlockDims() {
|
|
var origDims = Entities.getEntityProperties(blockEntityIDs[0], ["dimensions"]).dimensions;
|
|
for (var i = 0; i < blockEntityIDs.length; i++) {
|
|
var newDimY = origDims.y + getRandomArbitrary(-0.01,0.01);
|
|
Entities.editEntity(blockEntityIDs[i], { dimensions: {x: origDims.x, y: newDimY, z: origDims.z } });
|
|
}
|
|
}
|
|
|
|
function resetBlocks() {
|
|
var foundEntitiesArray = Entities.findEntities({x: 0, y: 0, z: 0}, 100);
|
|
foundEntitiesArray.forEach(function(foundEntityID) {
|
|
var name = Entities.getEntityProperties(foundEntityID, ["name"]).name;
|
|
if(name === "0" || name === "1" || name === "2" || name === "3" || name === "4" || name === "5" || name === "6" || name === "7" || name === "8" || name === "9" || name === "10"
|
|
|| name === "11" || name === "12" || name === "13" || name === "14" || name === "15" || name === "16" || name === "17" || name === "18" || name === "19" || name === "20"
|
|
|| name === "21" || name === "22" || name === "23" || name === "24" || name === "25" || name === "26" || name === "27" || name === "28" || name === "29" || name === "30"
|
|
|| name === "31" || name === "32" || name === "33" || name === "34" || name === "35" || name === "36" || name === "37" || name === "38" || name === "39" || name === "40"
|
|
|| name === "41" || name === "42" || name === "43" || name === "44" || name === "45" || name === "46" || name === "47" || name === "48" || name === "49" || name === "50"
|
|
|| name === "51" || name === "52" || name === "53" || name === "54" || name === "55" || name === "56" || name === "57" || name === "58" || name === "59" || name === "60"
|
|
|| name === "61" || name === "62" || name === "63" ) {
|
|
Entities.deleteEntity(foundEntityID);
|
|
}
|
|
})
|
|
Audio.playSound(resetSound, { loop: false, position: MyAvatar.position, volume: .3 });
|
|
for (var i = 0; i < blockEntityIDs.length; i++) {
|
|
Entities.deleteEntity(blockEntityIDs[i]);
|
|
}
|
|
Clipboard.importEntities(blockGridFilePath);
|
|
blockEntityIDs = Clipboard.pasteEntities({x: -.4, y: 1.35, z: .4 });
|
|
setTargetBlockIndex();
|
|
targetBlockIndex = getRandomIntInclusive(0,63);
|
|
for (var i = 0; i < blockEntityIDs.length; i++) {
|
|
Entities.editEntity(blockEntityIDs[i], blockProperties);
|
|
if(i === targetBlockIndex) {
|
|
Entities.editEntity(blockEntityIDs[i], { color: {red: 0, green: 129, blue: 235} });
|
|
}
|
|
}
|
|
setRandomBlockDims();
|
|
}
|
|
|
|
function setTargetBlockIndex() {
|
|
targetBlockIndex = getRandomIntInclusive(0,63);
|
|
while(checkIfEdgeIndex(targetBlockIndex)) {
|
|
targetBlockIndex = getRandomIntInclusive(0,63);
|
|
}
|
|
}
|
|
|
|
function checkIfEdgeIndex(indexArg) {
|
|
for(var i = 0; i < edgeBlockIndices.length; i++) {
|
|
if(indexArg === edgeBlockIndices[i]) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function getRandomArbitrary(min, max) {
|
|
return Math.random() * (max - min) + min;
|
|
}
|
|
|
|
function getRandomIntInclusive(min, max) {
|
|
min = Math.ceil(min);
|
|
max = Math.floor(max);
|
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
}
|
|
|
|
function startup () {
|
|
if(!blocksOn){
|
|
print("startup seek-laser-test-script.js");
|
|
resetBlocks();
|
|
blocksOn = true;
|
|
}
|
|
}
|
|
|
|
_this.onReceivedMessage = function(channel, message, senderID) {
|
|
if (channel === blocksChannel) {
|
|
if(message === "startup") {
|
|
startup();
|
|
} else if (message === "shutdown") {
|
|
shutdown();
|
|
} else if(message === JSON.stringify(targetBlockIndex)){
|
|
print("success");
|
|
Audio.playSound(successSound, { loop: false, position: MyAvatar.position, volume: .3 });
|
|
Script.setTimeout(function() {
|
|
resetBlocks();
|
|
}, 2000);
|
|
} else {
|
|
print("fail");
|
|
Audio.playSound(failSound, { loop: false, position: MyAvatar.position, volume: .4 });
|
|
Script.setTimeout(function() {
|
|
resetBlocks();
|
|
}, 2000);
|
|
}
|
|
}
|
|
}
|
|
|
|
function shutdown() {
|
|
if(blocksOn) {
|
|
print("shutdown seek-laser-test-script.js");
|
|
for (var i = 0; i < blockEntityIDs.length; i++) {
|
|
Entities.deleteEntity(blockEntityIDs[i]);
|
|
}
|
|
var foundEntitiesArray = Entities.findEntities({x: 0, y: 0, z: 0}, 100);
|
|
foundEntitiesArray.forEach(function(foundEntityID) {
|
|
var name = Entities.getEntityProperties(foundEntityID, ["name"]).name;
|
|
if(name === "0" || name === "1" || name === "2" || name === "3" || name === "4" || name === "5" || name === "6" || name === "7" || name === "8" || name === "9" || name === "10"
|
|
|| name === "11" || name === "12" || name === "13" || name === "14" || name === "15" || name === "16" || name === "17" || name === "18" || name === "19" || name === "20"
|
|
|| name === "21" || name === "22" || name === "23" || name === "24" || name === "25" || name === "26" || name === "27" || name === "28" || name === "29" || name === "30"
|
|
|| name === "31" || name === "32" || name === "33" || name === "34" || name === "35" || name === "36" || name === "37" || name === "38" || name === "39" || name === "40"
|
|
|| name === "41" || name === "42" || name === "43" || name === "44" || name === "45" || name === "46" || name === "47" || name === "48" || name === "49" || name === "50"
|
|
|| name === "51" || name === "52" || name === "53" || name === "54" || name === "55" || name === "56" || name === "57" || name === "58" || name === "59" || name === "60"
|
|
|| name === "61" || name === "62" || name === "63" ) {
|
|
Entities.deleteEntity(foundEntityID);
|
|
}
|
|
})
|
|
blocksOn = false;
|
|
}
|
|
};
|
|
|
|
function disconnectScript() {
|
|
print("disconnect seek-laser-test-script.js");
|
|
shutdown();
|
|
startup();
|
|
}
|
|
|
|
Messages.subscribe(blocksChannel);
|
|
Messages.messageReceived.connect(_this, _this.onReceivedMessage);
|
|
Script.scriptEnding.connect(disconnectScript); |