103 lines · 3.3 KB · JavaScript
RawDownload
"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();});