"use strict"; /* jslint vars: true, plusplus: true, forin: true*/ /* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // floatingLanternBox.js // // Created by MrRoboman on 17/05/04 // Copyright 2017 High Fidelity, Inc. // // Spawns new floating lanterns every couple seconds if the old ones have been removed. // // 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 _this; var LANTERN_MODEL_URL = Script.getExternalPath(Script.ExternalPaths.HF_Content, "/DomainContent/Welcome%20Area/Models/chinaLantern_capsule.fbx"); var LANTERN_SCRIPT_URL = Script.resolvePath("floatingLantern.js?v=" + Date.now()); var LIFETIME = 120; var RESPAWN_INTERVAL = 1000; var MAX_LANTERNS = 4; var SCALE_FACTOR = 1; var LANTERN = { type: "Model", name: "Floating Lantern", description: "Spawns Lanterns that float away when grabbed and released!", modelURL: LANTERN_MODEL_URL, script: LANTERN_SCRIPT_URL, dimensions: { x: 0.2049 * SCALE_FACTOR, y: 0.4 * SCALE_FACTOR, z: 0.2049 * SCALE_FACTOR }, gravity: { x: 0, y: -1, z: 0 }, velocity: { x: 0, y: .01, z: 0 }, linearDampening: 0, shapeType: 'Box', lifetime: LIFETIME, dynamic: true }; lanternBox = function() { _this = this; }; lanternBox.prototype = { preload: function(entityID) { this.entityID = entityID; var props = Entities.getEntityProperties(this.entityID); if (props.owningAvatarID === MyAvatar.sessionUUID) { this.respawnTimer = Script.setInterval(this.spawnAllLanterns.bind(this), RESPAWN_INTERVAL); } }, unload: function(entityID) { if (this.respawnTimer) { Script.clearInterval(this.respawnTimer); } }, spawnAllLanterns: function() { var props = Entities.getEntityProperties(this.entityID); var lanternCount = 0; var nearbyEntities = Entities.findEntities(props.position, props.dimensions.x * 0.75); for (var i = 0; i < nearbyEntities.length; i++) { var name = Entities.getEntityProperties(nearbyEntities[i], ["name"]).name; if (name === "Floating Lantern") { lanternCount++; } } while (lanternCount++ < MAX_LANTERNS) { this.spawnLantern(); } }, spawnLantern: function() { var boxProps = Entities.getEntityProperties(this.entityID); LANTERN.position = boxProps.position; LANTERN.position.x += Math.random() * .2 - .1; LANTERN.position.y += Math.random() * .2 + .1; LANTERN.position.z += Math.random() * .2 - .1; LANTERN.owningAvatarID = boxProps.owningAvatarID; return Entities.addEntity(LANTERN); } }; return new lanternBox(); });