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