content/hifi-content/patrickmanalich/seek-laser-test/seek-laser-test-script.js
2022-02-14 02:04:11 +01:00

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);