mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 20:57:09 +02:00
113 lines
4.1 KiB
JavaScript
113 lines
4.1 KiB
JavaScript
"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; // meters
|
|
var LIFETIME = 60; // seconds
|
|
var DISTANCE_RATE = 1; // hz
|
|
var DISTANCE_ALLOWANCE = 3; // meters. Must be this close to cause entity to move
|
|
var 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);
|