// // bingoClear.js // // created by Rebecca Stankus on 10/09/18 // Copyright 2018 High Fidelity, Inc. // // 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 WHITE = { red: 255, green: 255, blue: 255 }; var BLACK = { red: 0, green: 0, blue: 0 }; var SQUARE_YELLOW = { blue: 0, green: 167, red: 179 }; var SQUARE_BLUE = { blue: 237, green: 68, red: 26 }; var SQUARE_GREEN = { blue: 43, green: 161, red: 27 }; var SQUARE_PINK = { blue: 97, green: 0, red: 158 }; var CARD_YELLOW = { blue: 66, green: 255, red: 227 }; var CARD_BLUE = { blue: 247, green: 196, red: 0 }; var CARD_GREEN = { blue: 0, green: 255, red: 30 }; var CARD_PINK = { blue: 119, green: 0, red: 255 }; var WAIT_FOR_ELEMENTS_TO_LOAD = 300; var CLEAR_SOUND = SoundCache.getSound(Script.resolvePath("assets/sounds/bingoClear.wav?02")); var CLEAR_CARD_AUDIO_VOLUME = 0.3; var _this; var headerSquares = []; var numberSquares = []; var winParticleEffects = []; var bingoCard; var headerSounds = []; var currentHeaderSounds = []; var BingoClear = function() { _this = this; }; BingoClear.prototype = { preload: function(entityID){ _this.entityID = entityID; bingoCard = Entities.getEntityProperties(_this.entityID, 'parentID').parentID; Script.setTimeout(function() { _this.getSquares(); if (numberSquares.length !== 25) { print("error finding all 25 number squares. only found ", numberSquares.length); } }, WAIT_FOR_ELEMENTS_TO_LOAD); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoCat.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoDog.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoPlinks.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoPianoPlinks.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoBomb.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoSqueak.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoChatter.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoClang.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoGiggles.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoSplash.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoWaHaHa.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoFall.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoTwinkle.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoPopUp.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoWhistle.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoBubbles.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoHarp.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoKazoo.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoVibration.wav"))); headerSounds.push(SoundCache.getSound(Script.resolvePath("assets/sounds/bingoSpiral.wav"))); }, getSquares: function() { Entities.getChildrenIDs(bingoCard).forEach(function(bingoCardElement) { var cardElementName = Entities.getEntityProperties(bingoCardElement, 'name').name; if (cardElementName.indexOf("Bingo Square") !== -1) { numberSquares.push(bingoCardElement); // print("found a number square"); } else if (cardElementName.indexOf("Bingo Header") !== -1) { headerSquares.push(bingoCardElement); } else if (cardElementName.indexOf("Particle")) { winParticleEffects.push(bingoCardElement); } }); }, playSound: function(sound) { if (sound.downloaded) { // print("sound"); Audio.playSound(sound, { position: Entities.getEntityProperties(_this.entityID, 'position').position, volume: 1 }); } }, clearCard: function() { // print("clear card"); _this.playSound(CLEAR_SOUND, CLEAR_CARD_AUDIO_VOLUME); winParticleEffects.forEach(function(particleEffect){ Entities.editEntity(particleEffect, { locked: false }); Entities.editEntity(particleEffect, { isEmitting: false }); Entities.editEntity(particleEffect, { locked: true }); }); numberSquares.forEach(function(numberSquare) { Entities.editEntity(numberSquare, { locked: false }); Entities.editEntity(numberSquare, { backgroundColor: WHITE, textColor: BLACK }); Entities.editEntity(numberSquare, { locked: true }); }); currentHeaderSounds = []; headerSquares.forEach(function(headerSquare) { var newSound = _this.getRandomSound(); while (headerSquares.indexOf(newSound !== -1)) { newSound = _this.getRandomSound(); } currentHeaderSounds.push(newSound); var params = []; params[0] = JSON.stringify(newSound); Entities.callEntityMethod(headerSquare, 'setSound', params); Entities.editEntity(headerSquare, { locked: false }); Entities.editEntity(headerSquare, { backgroundColor: _this.getRandomSquareColor() }); Entities.editEntity(headerSquare, { locked: true }); }); Entities.editEntity(_this.entityID, { locked: false }); Entities.editEntity(_this.entityID, { backgroundColor: _this.getRandomSquareColor() }); Entities.editEntity(_this.entityID, { locked: true }); Entities.editEntity(bingoCard, { color: _this.getRandomCardColor() }); }, getRandomSound: function() { var newSoundIndex = Math.floor(Math.random() * 20); var newSound = headerSounds[newSoundIndex]; return newSound; }, getRandomSquareColor: function() { var colorChange = Math.floor(Math.random() * 4); var newColor; switch (colorChange) { case 0: newColor = SQUARE_YELLOW; break; case 1: newColor = SQUARE_BLUE; break; case 2: newColor = SQUARE_GREEN; break; case 3: newColor = SQUARE_PINK; break; default: newColor = SQUARE_PINK; } return newColor; }, getRandomCardColor: function() { var colorChange = Math.floor(Math.random() * 4); var newColor; switch (colorChange) { case 0: newColor = CARD_YELLOW; break; case 1: newColor = CARD_BLUE; break; case 2: newColor = CARD_GREEN; break; case 3: newColor = CARD_PINK; break; default: newColor = CARD_PINK; } return newColor; }, mousePressOnEntity: function(entityID, mouseEvent) { print("mouuse press"); if (mouseEvent.isLeftButton) { // print("My id is ", MyAvatar.sessionUUID, " and the parentID of the card is ", Entities.getEntityProperties(card, 'parentID').parentID); var bingoCardParent = Entities.getEntityProperties(bingoCard, 'parentID').parentID; if (bingoCardParent === "{00000000-0000-0000-0000-000000000001}" || MyAvatar.sessionUUID === bingoCardParent) { _this.clearCard(); } } } }; return new BingoClear(); });