113 lines · 4.1 KB · JavaScript
RawDownload
"use strict";/*jslint nomen: true, plusplus: true, vars: true*/var Vec3, Quat, MyAvatar, Entities, Camera, Script, print;////  Created by Howard Stearns//  Copyright 2016 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////  Drops a bunch of physical spheres which each run an entity script that moves away//  from you once a second if you are within range.////  This is a test of how many physical, entity-scripted objects can be around if//  they are mostly not doing anything -- i.e., just the basic overhead of such objects.//  They do need a moment to settle out of active physics after being dropped, but only//  a moment -- that's why they are in a sparse grid. var USE_FLAT_FLOOR = true;  // Give 'em a flat place to settle on.var ROWS_X = 30;var ROWS_Z = 30;var SEPARATION = 1;         // metersvar LIFETIME = 60;         // secondsvar DISTANCE_RATE = 1;      // hzvar DISTANCE_ALLOWANCE = 3; // meters. Must be this close to cause entity to movevar DISTANCE_SCALE = 0.5;   // velocity will be scale x vector from user to entity var SIZE = 0.5;var TYPE = "Sphere";//  Note that when creating things quickly, the entity server will ignore data if we send updates too quickly.//  like Internet MTU, these rates are set by th domain operator, so in this script there is a RATE_PER_SECOND //  variable letting you set this speed.  If entities are missing from the grid after a relog, this number //  being too high may be the reason. var RATE_PER_SECOND = 600;    //    The entity server will drop data if we create things too fast.var SCRIPT_INTERVAL = 100; var GRAVITY = { x: 0, y: -9.8, z: 0 };var VELOCITY = { x: 0.0, y: 0.1, z: 0 }; var DAMPING = 0.75;var ANGULAR_DAMPING = 0.75; var RANGE = 3;var HOW_FAR_UP = 2;  // for uneven ground var x = 0;var z = 0;var totalCreated = 0;var xDim = ROWS_X * SEPARATION;var zDim = ROWS_Z * SEPARATION;var totalToCreate = ROWS_X * ROWS_Z;var origin = Vec3.sum(MyAvatar.position, {x: xDim / -2, y: HOW_FAR_UP, z: zDim / -2});print("Creating " + totalToCreate + " origined on " + JSON.stringify(MyAvatar.position) +      ", starting at " + JSON.stringify(origin));var parameters = JSON.stringify({    distanceRate: DISTANCE_RATE,    distanceScale: DISTANCE_SCALE,    distanceAllowance: DISTANCE_ALLOWANCE}); var startTime = new Date();if (USE_FLAT_FLOOR) {    Entities.addEntity({        type: 'Box',        name: 'keepAwayFloor',        lifetime: LIFETIME,        collisionsWillMove: false,        color: {red: 255, green: 0, blue: 0},        position: Vec3.sum(origin, {x: xDim / 2, y: -1 - HOW_FAR_UP, z: zDim / 2}),        dimensions: {x: xDim + SEPARATION, y: 0.2, z: zDim + SEPARATION}    });}Script.setInterval(function () {    if (!Entities.serversExist() || !Entities.canRez()) {        return;    }     var i, properties, numToCreate = Math.min(RATE_PER_SECOND * (SCRIPT_INTERVAL / 1000.0), totalToCreate - totalCreated);    for (i = 0; i < numToCreate; i++) {        properties = {            userData: parameters,            type: TYPE,            name: "keepAway-" + totalCreated,            position: {                x: origin.x + SIZE + (x * SEPARATION),                y: origin.y,                z: origin.z + SIZE + (z * SEPARATION)            },            dimensions: {x: SIZE, y: SIZE, z: SIZE},            color: {red: Math.random() * 255, green: Math.random() * 255, blue: Math.random() * 255},            velocity: VELOCITY,            damping: DAMPING,            angularDamping: ANGULAR_DAMPING,            gravity: GRAVITY,            collisionsWillMove: true,            lifetime: LIFETIME,            script: Script.resolvePath("keepAwayEntity.js")        };        Entities.addEntity(properties);        totalCreated++;         x++;        if (x === ROWS_X) {            x = 0;            z++;            print("Created: " + totalCreated);        }        if (z === ROWS_Z) {            print("Total: " + totalCreated + " entities in " + ((new Date() - startTime) / 1000.0) + " seconds.");            Script.stop();        }    }}, SCRIPT_INTERVAL);