mirror of
https://github.com/lubosz/overte.git
synced 2025-04-14 17:06:18 +02:00
103 lines
3.3 KiB
JavaScript
103 lines
3.3 KiB
JavaScript
"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();
|
|
});
|