From bc7ea1129711f4c9d62ef209e8924b44c19b443b Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Wed, 3 May 2017 18:46:12 -0400 Subject: [PATCH 1/6] Added enity script for balloon spawner and sample json entity with userData to attach script to --- .../balloonSpawner/balloonSpawner.json | 20 ++ .../balloonSpawner/spawnBalloons.js | 181 ++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json create mode 100644 scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json b/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json new file mode 100644 index 0000000000..0a33c66e55 --- /dev/null +++ b/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json @@ -0,0 +1,20 @@ +{ + "Entities": [ + { + "description": "Spawns balloons", + "dimensions": { + "x": 2, + "y": 0.1, + "z": 2 + }, + "name": "Balloon Spawner", + "serverScripts": "https://s3.amazonaws.com/hifi-rabelaiis/spawnBalloons.js", + "type": "Shape", + "shape": "Cube", + "visible": "false", + "collisionless": "true", + "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300}" + } + ], + "Version": 63 +} \ No newline at end of file diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js new file mode 100644 index 0000000000..6e4ff53e06 --- /dev/null +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -0,0 +1,181 @@ +"use strict"; + +// +// spawnBalloons.js +// +// Created by Johnathan Franck on 3 May 2017. +// Copyright 2017 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 RED_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/redBalloon.fbx"; + var BLUE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/blueBalloon.fbx"; + var GREEN_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/greenBalloon.fbx"; + var YELLOW_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/yellowBalloon.fbx"; + var ORANGE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/orangeBalloon.fbx"; + var CYAN_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/cyanBalloon.fbx"; + var PURPLE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/purpleBalloon.fbx"; + + var BALLOON_COLORS = ["red", "blue", "green", "yellow", "orange", "cyan", "purple"]; + var BALLOON_URLS = [RED_BALLOON_URL, BLUE_BALLOON_URL, GREEN_BALLOON_URL, + YELLOW_BALLOON_URL, ORANGE_BALLOON_URL, CYAN_BALLOON_URL, PURPLE_BALLOON_URL]; + + var NUM_COLORS = 7; + var COUNTDOWN_SECONDS = 9; + + var spawnRate = 2000; + var xRangeMax = 1; + var zRangeMax = 1; + var gravityCoefficient = 0.25; + var balloonLifetime = 10; + var spawnTime = 300; + var spawnIntervalID; + var countdownIntervalID; + var countdownEntityID; + + this.preload = function(pEntityID) { + startCountdown(pEntityID); + }; + + function startCountdown(pEntityID) { + var countdownSeconds = COUNTDOWN_SECONDS, + parentProperties = Entities.getEntityProperties(pEntityID, ["position"]), + countdownEntityProperties; + + countdownEntityProperties = { + type: "Text", + text: countdownSeconds, + lineHeight: 0.71, + dimensions: { + x: 0.5, + y: 1, + z: 0.01 + }, + textColor: { + red: 0, + blue: 255, + green: 0 + }, + backgroundColor: { + red: 255, + blue: 255, + green: 255 + }, + parentID: pEntityID, + position: parentProperties.position + }; + + countdownEntityID = Entities.addEntity(countdownEntityProperties); + countdownIntervalID = Script.setInterval(function () { + countdownSeconds -= 1; + if (countdownSeconds < 0) { + Script.clearInterval(countdownIntervalID); + Entities.deleteEntity(countdownEntityID); + } else { + Entities.editEntity(countdownEntityID, {"text": countdownSeconds}); + if (countdownSeconds === 0) { + spawnBalloons(pEntityID); + } + } + }, 1000); + } + + function spawnBalloons(pEntityID) { + var parentProperties = Entities.getEntityProperties(pEntityID, ["position", "userData"]), + spawnerSettings, + spawnCount = 0; + + if (parentProperties.userData){ + spawnerSettings = JSON.parse(parentProperties.userData); + } + + xRangeMax = !isNaN(spawnerSettings.xRangeMax) ? spawnerSettings.xRangeMax : xRangeMax; + zRangeMax = !isNaN(spawnerSettings.zRangeMax) ? spawnerSettings.zRangeMax : zRangeMax; + gravityCoefficient = !isNaN(spawnerSettings.gravityCoefficient) ? spawnerSettings.gravityCoefficient : gravityCoefficient; + spawnTime = !isNaN(spawnerSettings.spawnTime) ? spawnerSettings.spawnTime : spawnTime; + balloonLifetime = !isNaN(spawnerSettings.balloonLifetime) ? spawnerSettings.balloonLifetime : balloonLifetime; + spawnRate = !isNaN(spawnerSettings.spawnRate) ? spawnerSettings.spawnRate : spawnRate; + + spawnIntervalID = Script.setInterval(function() { + var colorID = Math.floor(Math.random() * NUM_COLORS), + color = BALLOON_COLORS[colorID], + balloonURL = BALLOON_URLS[colorID], + balloonPosition = {}, + balloonProperties; + + spawnCount ++; + //Randomize balloon spawn position + balloonPosition.y = parentProperties.position.y + 0.5; + balloonPosition.x = parentProperties.position.x + (Math.random() - 0.5) * 2 * xRangeMax; + balloonPosition.z = parentProperties.position.z + (Math.random() - 0.5) * 2 * zRangeMax; + + balloonProperties = { + position: balloonPosition, + lifetime: balloonLifetime, + angularVelocity: { + x: -0.03654664754867554, + y: -0.4030083637684583664 + Math.random(), + z: 0.02576472796499729 + }, + collisionsWillMove: 1, + density: 100, + description: "A happy " + color + " balloon", + dimensions: { + x: 0.3074322044849396, + y: 0.40930506587028503, + z: 0.30704551935195923 + }, + dynamic: 1, + gravity: { + x: 0, + y: gravityCoefficient, + z: 0 + }, + modelURL: balloonURL, + name: color + " balloon", + queryAACube: { + scale: 0.596927285194397, + x: -0.2984636425971985, + y: -0.2984636425971985, + z: -0.2984636425971985 + }, + restitution: 0.9900000095367432, + rotation: { + w: -0.10368101298809052, + x: 0.5171623826026917, + y: 0.1211432576179504, + z: -0.670971691608429 + Math.random() + }, + shapeType: "sphere", + type : "Model", + velocity: { + x: 0.003623033408075571, + y: 0.0005839366931468248, + z: -0.01512028019875288 + } + }; + Entities.addEntity(balloonProperties); + + //Stop spawning after spawnTime + if (spawnCount * spawnRate / 1000 > spawnTime){ + Script.clearInterval(spawnIntervalID); + } + }, spawnRate); + } + + this.unload = function(){ + if (spawnIntervalID){ + Script.clearInterval(spawnIntervalID); + } + if (countdownIntervalID){ + Script.clearInterval(countdownIntervalID); + } + if (countdownEntityID){ + Entities.deleteEntity(countdownEntityID); + } + }; + +}); \ No newline at end of file From 31919d43992249a3626eaf8ea861e54e4e19c9a6 Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Mon, 8 May 2017 12:28:40 -0400 Subject: [PATCH 2/6] Add happy music to balloon spawner after countdown --- .../balloonSpawner/balloonSpawner.json | 2 +- .../balloonSpawner/spawnBalloons.js | 38 +++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json b/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json index 0a33c66e55..74eca87bfd 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json +++ b/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json @@ -13,7 +13,7 @@ "shape": "Cube", "visible": "false", "collisionless": "true", - "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300}" + "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300,\"spawnMusicURL\":\"https://s3.amazonaws.com/hifi-rabelaiis/Blue_Skies.wav\",\"spawnMusicVolume\":0.1}" } ], "Version": 63 diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js index 6e4ff53e06..dcdd49dd3b 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -18,6 +18,8 @@ var ORANGE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/orangeBalloon.fbx"; var CYAN_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/cyanBalloon.fbx"; var PURPLE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/purpleBalloon.fbx"; + //'Blue Skies' by Silent Partner from youtube audio library. Listed as attribution not required + var SPAWN_MUSIC_URL = "https://s3.amazonaws.com/hifi-rabelaiis/Blue_Skies.wav" var BALLOON_COLORS = ["red", "blue", "green", "yellow", "orange", "cyan", "purple"]; var BALLOON_URLS = [RED_BALLOON_URL, BLUE_BALLOON_URL, GREEN_BALLOON_URL, @@ -32,11 +34,23 @@ var gravityCoefficient = 0.25; var balloonLifetime = 10; var spawnTime = 300; + var musicInjector; var spawnIntervalID; + var spawnMusic; var countdownIntervalID; var countdownEntityID; + this.preload = function(pEntityID) { + var parentProperties = Entities.getEntityProperties(pEntityID, ["userData"]), + spawnMusicURL, + spawnerSettings; + if (parentProperties.userData){ + spawnerSettings = JSON.parse(parentProperties.userData); + } + spawnMusicURL = spawnerSettings.spawnMusicURL ? spawnerSettings.spawnMusicURL : SPAWN_MUSIC_URL; + spawnMusic = SoundCache.getSound(spawnMusicURL); + startCountdown(pEntityID); }; @@ -86,11 +100,12 @@ function spawnBalloons(pEntityID) { var parentProperties = Entities.getEntityProperties(pEntityID, ["position", "userData"]), spawnerSettings, + spawnMusicVolume, spawnCount = 0; if (parentProperties.userData){ - spawnerSettings = JSON.parse(parentProperties.userData); - } + spawnerSettings = JSON.parse(parentProperties.userData); + } xRangeMax = !isNaN(spawnerSettings.xRangeMax) ? spawnerSettings.xRangeMax : xRangeMax; zRangeMax = !isNaN(spawnerSettings.zRangeMax) ? spawnerSettings.zRangeMax : zRangeMax; @@ -98,6 +113,15 @@ spawnTime = !isNaN(spawnerSettings.spawnTime) ? spawnerSettings.spawnTime : spawnTime; balloonLifetime = !isNaN(spawnerSettings.balloonLifetime) ? spawnerSettings.balloonLifetime : balloonLifetime; spawnRate = !isNaN(spawnerSettings.spawnRate) ? spawnerSettings.spawnRate : spawnRate; + spawnMusicVolume = !isNaN(spawnerSettings.spawnMusicVolume) ? spawnerSettings.spawnMusicVolume : 0.1; + + if (spawnMusic.downloaded){ + musicInjector = Audio.playSound(spawnMusic, { + position: parentProperties.position, + volume: spawnMusicVolume, + loop: true + }); + } spawnIntervalID = Script.setInterval(function() { var colorID = Math.floor(Math.random() * NUM_COLORS), @@ -162,6 +186,10 @@ //Stop spawning after spawnTime if (spawnCount * spawnRate / 1000 > spawnTime){ Script.clearInterval(spawnIntervalID); + if (musicInjector !== undefined && musicInjector.isPlaying) { + musicInjector.stop(); + musicInjector = undefined; + } } }, spawnRate); } @@ -176,6 +204,10 @@ if (countdownEntityID){ Entities.deleteEntity(countdownEntityID); } + if (musicInjector !== undefined && musicInjector.isPlaying) { + musicInjector.stop(); + musicInjector = undefined; + } }; -}); \ No newline at end of file +}); From 68b1c74b43ae63cce2fa804aaaf7d11f97ae0f9e Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Wed, 10 May 2017 14:46:12 -0400 Subject: [PATCH 3/6] Change URLs to point to high fidelity server --- .../{balloonSpawner.json => balloonParty.json} | 4 ++-- .../balloonSpawner/spawnBalloons.js | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) rename scripts/tutorials/entity_scripts/balloonSpawner/{balloonSpawner.json => balloonParty.json} (64%) diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json b/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json similarity index 64% rename from scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json rename to scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json index 74eca87bfd..d9dd2c17fd 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/balloonSpawner.json +++ b/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json @@ -8,12 +8,12 @@ "z": 2 }, "name": "Balloon Spawner", - "serverScripts": "https://s3.amazonaws.com/hifi-rabelaiis/spawnBalloons.js", + "serverScripts": "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Scripts/spawnBalloons.js", "type": "Shape", "shape": "Cube", "visible": "false", "collisionless": "true", - "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300,\"spawnMusicURL\":\"https://s3.amazonaws.com/hifi-rabelaiis/Blue_Skies.wav\",\"spawnMusicVolume\":0.1}" + "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300,\"spawnMusicURL\":\"http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Audio/Blue_Skies.wav\",\"spawnMusicVolume\":0.1}" } ], "Version": 63 diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js index dcdd49dd3b..696efc912f 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -11,15 +11,15 @@ // (function() { - var RED_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/redBalloon.fbx"; - var BLUE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/blueBalloon.fbx"; - var GREEN_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/greenBalloon.fbx"; - var YELLOW_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/yellowBalloon.fbx"; - var ORANGE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/orangeBalloon.fbx"; - var CYAN_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/cyanBalloon.fbx"; - var PURPLE_BALLOON_URL = "https://s3.amazonaws.com/hifi-rabelaiis/purpleBalloon.fbx"; + var RED_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/redBalloon.fbx"; + var BLUE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/blueBalloon.fbx"; + var GREEN_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/greenBalloon.fbx"; + var YELLOW_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/yellowBalloon.fbx"; + var ORANGE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/orangeBalloon.fbx"; + var CYAN_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/cyanBalloon.fbx"; + var PURPLE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/purpleBalloon.fbx"; //'Blue Skies' by Silent Partner from youtube audio library. Listed as attribution not required - var SPAWN_MUSIC_URL = "https://s3.amazonaws.com/hifi-rabelaiis/Blue_Skies.wav" + var SPAWN_MUSIC_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Audio/Blue_Skies.wav" var BALLOON_COLORS = ["red", "blue", "green", "yellow", "orange", "cyan", "purple"]; var BALLOON_URLS = [RED_BALLOON_URL, BLUE_BALLOON_URL, GREEN_BALLOON_URL, From 556d0318ef547100bdec529857cb5f0044f2809c Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Wed, 10 May 2017 15:15:31 -0400 Subject: [PATCH 4/6] Use script.resolve --- .../balloonSpawner/spawnBalloons.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js index 696efc912f..077a4c2015 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -11,15 +11,15 @@ // (function() { - var RED_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/redBalloon.fbx"; - var BLUE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/blueBalloon.fbx"; - var GREEN_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/greenBalloon.fbx"; - var YELLOW_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/yellowBalloon.fbx"; - var ORANGE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/orangeBalloon.fbx"; - var CYAN_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/cyanBalloon.fbx"; - var PURPLE_BALLOON_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Models/purpleBalloon.fbx"; + var RED_BALLOON_URL = Script.resolvePath("../Models/redBalloon.fbx"); + var BLUE_BALLOON_URL = Script.resolvePath("../Models/blueBalloon.fbx"); + var GREEN_BALLOON_URL = Script.resolvePath("../Models/greenBalloon.fbx"); + var YELLOW_BALLOON_URL = Script.resolvePath("../Models/yellowBalloon.fbx"); + var ORANGE_BALLOON_URL = Script.resolvePath("../Models/orangeBalloon.fbx"); + var CYAN_BALLOON_URL = Script.resolvePath("../Models/cyanBalloon.fbx"); + var PURPLE_BALLOON_URL = Script.resolvePath("../Models/purpleBalloon.fbx"); //'Blue Skies' by Silent Partner from youtube audio library. Listed as attribution not required - var SPAWN_MUSIC_URL = "http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Audio/Blue_Skies.wav" + var SPAWN_MUSIC_URL = Script.resolvePath("../Audio/Blue_Skies.wav"); var BALLOON_COLORS = ["red", "blue", "green", "yellow", "orange", "cyan", "purple"]; var BALLOON_URLS = [RED_BALLOON_URL, BLUE_BALLOON_URL, GREEN_BALLOON_URL, From f1ab0135119ea9a296b90756cf67073b3d80b97f Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Thu, 11 May 2017 23:26:28 -0400 Subject: [PATCH 5/6] Prevent user from setting too low of a spawn rate, rename spawnTime to spawnDuration and clean up parent object after countdown --- .../balloonSpawner/balloonParty.json | 2 +- .../balloonSpawner/spawnBalloons.js | 49 +++++++++++-------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json b/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json index d9dd2c17fd..c0457dec6d 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json +++ b/scripts/tutorials/entity_scripts/balloonSpawner/balloonParty.json @@ -13,7 +13,7 @@ "shape": "Cube", "visible": "false", "collisionless": "true", - "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnTime\":300,\"spawnMusicURL\":\"http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Audio/Blue_Skies.wav\",\"spawnMusicVolume\":0.1}" + "userData": "{\"spawnRate\":1000,\"xRangeMax\":1,\"zRangeMax\":1,\"gravityCoefficient\":0.25,\"balloonLifetime\":10,\"spawnDuration\":300,\"spawnMusicURL\":\"http://mpassets.highfidelity.com/8410ef73-9506-4dc7-b364-0174998a859e-v1/Audio/Blue_Skies.wav\",\"spawnMusicVolume\":0.1}" } ], "Version": 63 diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js index 077a4c2015..229d44209c 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -28,12 +28,13 @@ var NUM_COLORS = 7; var COUNTDOWN_SECONDS = 9; + var _this = this; var spawnRate = 2000; var xRangeMax = 1; var zRangeMax = 1; var gravityCoefficient = 0.25; var balloonLifetime = 10; - var spawnTime = 300; + var spawnDuration = 300; var musicInjector; var spawnIntervalID; var spawnMusic; @@ -41,7 +42,7 @@ var countdownEntityID; - this.preload = function(pEntityID) { + _this.preload = function(pEntityID) { var parentProperties = Entities.getEntityProperties(pEntityID, ["userData"]), spawnMusicURL, spawnerSettings; @@ -51,10 +52,10 @@ spawnMusicURL = spawnerSettings.spawnMusicURL ? spawnerSettings.spawnMusicURL : SPAWN_MUSIC_URL; spawnMusic = SoundCache.getSound(spawnMusicURL); - startCountdown(pEntityID); + _this.startCountdown(pEntityID); }; - function startCountdown(pEntityID) { + _this.startCountdown = function(pEntityID) { var countdownSeconds = COUNTDOWN_SECONDS, parentProperties = Entities.getEntityProperties(pEntityID, ["position"]), countdownEntityProperties; @@ -91,13 +92,13 @@ } else { Entities.editEntity(countdownEntityID, {"text": countdownSeconds}); if (countdownSeconds === 0) { - spawnBalloons(pEntityID); + _this.spawnBalloons(pEntityID); } } }, 1000); - } + }; - function spawnBalloons(pEntityID) { + _this.spawnBalloons = function(pEntityID) { var parentProperties = Entities.getEntityProperties(pEntityID, ["position", "userData"]), spawnerSettings, spawnMusicVolume, @@ -110,11 +111,16 @@ xRangeMax = !isNaN(spawnerSettings.xRangeMax) ? spawnerSettings.xRangeMax : xRangeMax; zRangeMax = !isNaN(spawnerSettings.zRangeMax) ? spawnerSettings.zRangeMax : zRangeMax; gravityCoefficient = !isNaN(spawnerSettings.gravityCoefficient) ? spawnerSettings.gravityCoefficient : gravityCoefficient; - spawnTime = !isNaN(spawnerSettings.spawnTime) ? spawnerSettings.spawnTime : spawnTime; + spawnDuration = !isNaN(spawnerSettings.spawnDuration) ? spawnerSettings.spawnDuration : spawnDuration; balloonLifetime = !isNaN(spawnerSettings.balloonLifetime) ? spawnerSettings.balloonLifetime : balloonLifetime; spawnRate = !isNaN(spawnerSettings.spawnRate) ? spawnerSettings.spawnRate : spawnRate; spawnMusicVolume = !isNaN(spawnerSettings.spawnMusicVolume) ? spawnerSettings.spawnMusicVolume : 0.1; - + + if (spawnRate < 10){ + spawnRate = 10; + print("The lowest balloon spawn rate allowed is 10."); + } + if (spawnMusic.downloaded){ musicInjector = Audio.playSound(spawnMusic, { position: parentProperties.position, @@ -183,18 +189,18 @@ }; Entities.addEntity(balloonProperties); - //Stop spawning after spawnTime - if (spawnCount * spawnRate / 1000 > spawnTime){ - Script.clearInterval(spawnIntervalID); - if (musicInjector !== undefined && musicInjector.isPlaying) { - musicInjector.stop(); - musicInjector = undefined; - } + //Clean up after spawnDuration + if (spawnCount * spawnRate / 1000 > spawnDuration){ + _this.cleanUp(pEntityID); } }, spawnRate); - } + }; - this.unload = function(){ + _this.unload = function(){ + _this.cleanUp(); + }; + + _this.cleanUp = function(pEntityID) { if (spawnIntervalID){ Script.clearInterval(spawnIntervalID); } @@ -203,11 +209,14 @@ } if (countdownEntityID){ Entities.deleteEntity(countdownEntityID); - } + } if (musicInjector !== undefined && musicInjector.isPlaying) { musicInjector.stop(); musicInjector = undefined; - } + } + if (pEntityID){ + Entities.deleteEntity(pEntityID); + } }; }); From 7f8f870d9f52bdfc7d96eb06cd0e45260a865302 Mon Sep 17 00:00:00 2001 From: Johnathan Franck Date: Wed, 17 May 2017 22:32:29 -0400 Subject: [PATCH 6/6] Fix coding standard issues --- .../balloonSpawner/spawnBalloons.js | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js index 229d44209c..3aa956491e 100644 --- a/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js +++ b/scripts/tutorials/entity_scripts/balloonSpawner/spawnBalloons.js @@ -10,7 +10,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -(function() { +(function () { var RED_BALLOON_URL = Script.resolvePath("../Models/redBalloon.fbx"); var BLUE_BALLOON_URL = Script.resolvePath("../Models/blueBalloon.fbx"); var GREEN_BALLOON_URL = Script.resolvePath("../Models/greenBalloon.fbx"); @@ -27,6 +27,9 @@ var NUM_COLORS = 7; var COUNTDOWN_SECONDS = 9; + //Lowering the spawn rate below 10 spawns so many balloons that the interface slows down + var MIN_SPAWN_RATE = 10; + var MILLISECONDS_IN_SECOND = 1000; var _this = this; var spawnRate = 2000; @@ -40,13 +43,12 @@ var spawnMusic; var countdownIntervalID; var countdownEntityID; - - _this.preload = function(pEntityID) { + _this.preload = function (pEntityID) { var parentProperties = Entities.getEntityProperties(pEntityID, ["userData"]), spawnMusicURL, spawnerSettings; - if (parentProperties.userData){ + if (parentProperties.userData) { spawnerSettings = JSON.parse(parentProperties.userData); } spawnMusicURL = spawnerSettings.spawnMusicURL ? spawnerSettings.spawnMusicURL : SPAWN_MUSIC_URL; @@ -55,7 +57,7 @@ _this.startCountdown(pEntityID); }; - _this.startCountdown = function(pEntityID) { + _this.startCountdown = function (pEntityID) { var countdownSeconds = COUNTDOWN_SECONDS, parentProperties = Entities.getEntityProperties(pEntityID, ["position"]), countdownEntityProperties; @@ -98,13 +100,13 @@ }, 1000); }; - _this.spawnBalloons = function(pEntityID) { + _this.spawnBalloons = function (pEntityID) { var parentProperties = Entities.getEntityProperties(pEntityID, ["position", "userData"]), spawnerSettings, spawnMusicVolume, spawnCount = 0; - if (parentProperties.userData){ + if (parentProperties.userData) { spawnerSettings = JSON.parse(parentProperties.userData); } @@ -116,12 +118,12 @@ spawnRate = !isNaN(spawnerSettings.spawnRate) ? spawnerSettings.spawnRate : spawnRate; spawnMusicVolume = !isNaN(spawnerSettings.spawnMusicVolume) ? spawnerSettings.spawnMusicVolume : 0.1; - if (spawnRate < 10){ - spawnRate = 10; - print("The lowest balloon spawn rate allowed is 10."); + if (spawnRate < MIN_SPAWN_RATE) { + spawnRate = MIN_SPAWN_RATE; + print("The lowest balloon spawn rate allowed is " + MIN_SPAWN_RATE); } - if (spawnMusic.downloaded){ + if (spawnMusic.downloaded) { musicInjector = Audio.playSound(spawnMusic, { position: parentProperties.position, volume: spawnMusicVolume, @@ -129,7 +131,7 @@ }); } - spawnIntervalID = Script.setInterval(function() { + spawnIntervalID = Script.setInterval(function () { var colorID = Math.floor(Math.random() * NUM_COLORS), color = BALLOON_COLORS[colorID], balloonURL = BALLOON_URLS[colorID], @@ -190,31 +192,31 @@ Entities.addEntity(balloonProperties); //Clean up after spawnDuration - if (spawnCount * spawnRate / 1000 > spawnDuration){ + if (spawnCount * spawnRate / MILLISECONDS_IN_SECOND > spawnDuration) { _this.cleanUp(pEntityID); } }, spawnRate); }; - _this.unload = function(){ + _this.unload = function () { _this.cleanUp(); }; - _this.cleanUp = function(pEntityID) { - if (spawnIntervalID){ + _this.cleanUp = function (pEntityID) { + if (spawnIntervalID ) { Script.clearInterval(spawnIntervalID); } - if (countdownIntervalID){ + if (countdownIntervalID) { Script.clearInterval(countdownIntervalID); } - if (countdownEntityID){ + if (countdownEntityID) { Entities.deleteEntity(countdownEntityID); } if (musicInjector !== undefined && musicInjector.isPlaying) { musicInjector.stop(); musicInjector = undefined; } - if (pEntityID){ + if (pEntityID) { Entities.deleteEntity(pEntityID); } };