Andrew Meadowsarchive remaining JS scriptsc0b446c10 years agoHistory
90 lines · 3.2 KB · JavaScript
RawDownload
"use strict";/*jslint nomen: true, plusplus: true, vars: true*//*global Entities, Script, Quat, Vec3, Camera, MyAvatar, print, randFloat*///  acAudioSearchCompatibleEntitySpawner.js//  audio/acAudioSearching////  Created by Eric Levin 2/2/2016//  Copyright 2016 High Fidelity, Inc. //  This is a client script which spawns entities with a field in userData compatible with the AcAudioSearchAndInject script//  These entities specify data about the sound they want to play, such as url, volume, and whether to loop or not//  The position of the entity determines the position from which the sound plays from////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// var N_SOUNDS = 1000;var N_SILENT_ENTITIES_PER_SOUND = 10;var ADD_PERIOD = 50; // ms between adding 1 sound + N_SILENT_ENTITIES_PER_SOUND, to not overrun entity server.var SPATIAL_DISTRIBUTION = 10; // meters spread over how far to randomly distribute enties.Script.include("../../libraries/utils.js");var orientation = Camera.getOrientation();orientation = Quat.safeEulerAngles(orientation);orientation.x = 0;orientation = Quat.fromVec3Degrees(orientation);var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation)));// http://hifi-public.s3.amazonaws.com/ryan/demo/0619_Fireplace__Tree_B.L.wavvar SOUND_DATA_KEY = "io.highfidelity.soundKey";var userData = {    soundKey: {        url: "http://hifi-content.s3.amazonaws.com/DomainContent/Junkyard/Sounds/ClothSail/cloth_sail3.L.wav",        volume: 0.3,        loop: false,        playbackGap: 20000, // In ms - time to wait in between clip plays        playbackGapRange: 5000 // In ms - the range to wait in between clip plays    }}; var userDataString = JSON.stringify(userData);var entityProps = {    type: "Box",    name: 'audioSearchEntity',    color: {        red: 200,        green: 10,        blue: 200    },    dimensions: {        x: 0.1,        y: 0.1,        z: 0.1    }}; var entities = [], nSounds = 0;Script.include("../../libraries/utils.js");function addOneSet() {    function randomizeDimension(coordinate) {        return coordinate + randFloat(-SPATIAL_DISTRIBUTION / 2, SPATIAL_DISTRIBUTION / 2);    }    function randomize() {        return {x: randomizeDimension(center.x), y: randomizeDimension(center.y), z: randomizeDimension(center.z)};    }    function addOne() {        entityProps.position = randomize();        entities.push(Entities.addEntity(entityProps));    }    var i;    entityProps.userData = userDataString;    entityProps.color.red = 200;    addOne();    delete entityProps.userData;    entityProps.color.red = 10;    for (i = 0; i < N_SILENT_ENTITIES_PER_SOUND; i++) {        addOne();    }    if (++nSounds < N_SOUNDS) {        Script.setTimeout(addOneSet, ADD_PERIOD);    }}addOneSet(); function cleanup() {    entities.forEach(Entities.deleteEntity);}// In console:// Entities.findEntities(MyAvatar.position, 100).forEach(function (id) { if (Entities.getEntityProperties(id).name === 'audioSearchEntity') Entities.deleteEntity(id); }) Script.scriptEnding.connect(cleanup);