Needs a lot of cleanup. Data has been de-duplicated, and where identical copies existed, one of them has been replaced with a symlink. Some files have been excluded, such as binaries, installers and debug dumps. Some of that may still be present.
96 lines
3.8 KiB
JavaScript
96 lines
3.8 KiB
JavaScript
"use strict";
|
|
/*jslint nomen: true, plusplus: true, vars: true*/
|
|
var Entities, Script, print, Vec3, MyAvatar;
|
|
//
|
|
// 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
|
|
//
|
|
// Creates a rectangular matrix of objects overhed, and edits them at EDIT_FREQUENCY_TARGET.
|
|
// Reports ms since last edit, ms to edit all the created entities, and average ms to edit one entity,
|
|
// so that you can measure how many edits can be made.
|
|
//
|
|
var LIFETIME = 15;
|
|
var ROWS_X = 10;
|
|
var ROWS_Y = 2;
|
|
var ROWS_Z = 10;
|
|
var SEPARATION = 10.0;
|
|
var SIZE = 1.0;
|
|
// 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 x = 0;
|
|
var y = 0;
|
|
var z = 0;
|
|
var o = Vec3.sum(MyAvatar.position, {x: ROWS_X * SEPARATION / -2, y: SEPARATION, z: ROWS_Z * SEPARATION / -2});
|
|
var totalCreated = 0;
|
|
var startTime = new Date();
|
|
var totalToCreate = ROWS_X * ROWS_Y * ROWS_Z;
|
|
print("Creating " + totalToCreate + " entities starting at " + startTime);
|
|
|
|
var ids = [], colors = [], flasher, lastService = Date.now();
|
|
function doFlash() { // One could call this in an interval timer, an update, or even a separate entity script.
|
|
var i, oldColor, newColor;
|
|
var start = Date.now();
|
|
for (i = 0; i < ids.length; i++) {
|
|
oldColor = colors[i];
|
|
newColor = {red: oldColor.green, green: oldColor.blue, blue: oldColor.red};
|
|
colors[i] = newColor;
|
|
Entities.editEntity(ids[i], {color: newColor});
|
|
}
|
|
var elapsed = Date.now() - start, serviceTime = start - lastService;
|
|
lastService = start;
|
|
print(serviceTime, elapsed, elapsed / totalCreated); // ms since last flash, ms to edit all entities, average ms to edit one entity
|
|
}
|
|
function stopFlash() {
|
|
Script.clearTimeout(flasher);
|
|
Script.stop();
|
|
}
|
|
var creator = Script.setInterval(function () {
|
|
if (!Entities.serversExist() || !Entities.canRez()) {
|
|
return;
|
|
}
|
|
|
|
var numToCreate = Math.min(RATE_PER_SECOND * (SCRIPT_INTERVAL / 1000.0), totalToCreate - totalCreated);
|
|
var i, properties;
|
|
for (i = 0; i < numToCreate; i++) {
|
|
properties = {
|
|
position: { x: o.x + SIZE + (x * SEPARATION), y: o.y + SIZE + (y * SEPARATION), z: o.z + SIZE + (z * SEPARATION) },
|
|
name: "gridTest",
|
|
type: 'Box',
|
|
dimensions: {x: SIZE, y: SIZE, z: SIZE},
|
|
ignoreCollisions: true,
|
|
collisionsWillMove: false,
|
|
lifetime: LIFETIME,
|
|
color: {red: x / ROWS_X * 255, green: y / ROWS_Y * 255, blue: z / ROWS_Z * 255}
|
|
};
|
|
colors.push(properties.color);
|
|
ids.push(Entities.addEntity(properties));
|
|
totalCreated++;
|
|
|
|
x++;
|
|
if (x === ROWS_X) {
|
|
x = 0;
|
|
y++;
|
|
if (y === ROWS_Y) {
|
|
y = 0;
|
|
z++;
|
|
print("Created: " + totalCreated);
|
|
}
|
|
}
|
|
if (z === ROWS_Z) {
|
|
print("Total: " + totalCreated + " entities in " + ((new Date() - startTime) / 1000.0) + " seconds.");
|
|
Script.clearTimeout(creator);
|
|
flasher = Script.setInterval(doFlash, 1000 / 60); // I.e., spin as fast as we have time for.
|
|
Script.setTimeout(stopFlash, LIFETIME * 1000);
|
|
}
|
|
}
|
|
}, SCRIPT_INTERVAL);
|
|
Script.scriptEnding.connect(function () { Script.clearTimeout(flasher); });
|
|
|