content/hifi-public/andrew/js/test/engine-dev-bot.js
Dale Glass 0d14e5a379 Initial data.
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.
2022-02-13 18:59:11 +01:00

270 lines
13 KiB
JavaScript

//
// engine-dev-bot.js
//
// Created by Sam Gateau building on many others (November 2018).
// Copyright 2018 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
//
var RECORDINGS_ARRAY = [
"eventer1.hfr",
// "cop1.hfr", // Bad Model
// "cop2.hfr", // Bad Model
"waiting1.hfr",
"waiting2.hfr",
// "waiting3.hfr", // Bad Model
"waiting4.hfr",
// "waiting5.hfr", // Moves downward
"waiting6.hfr",
// "waiting7.hfr", // Bad Model
"waiting8.hfr",
"waiting9.hfr",
"waiting10.hfr",
"bot1.hfr",
"bot2.hfr",
"bot3.hfr",
"bot4.hfr",
"check_12.hfr",
"peanuts.hfr",
"claude.hfr",
"usher1.hfr",
"usher2.hfr",
"usher3.hfr",
"jim.hfr"
];
var RECORDING_URL = "http://hifi-content.s3.amazonaws.com/DomainContent/Event%20/NPC%27s/" + RECORDINGS_ARRAY[Math.floor(Math.random() * RECORDINGS_ARRAY.length)];
print("RANDOM RECORDING SELECTED:" + RECORDING_URL);
var LOCATION_ORIGIN = { x: 11.0, y: -13.0, z: 28.0 };
var LOCATION_POLAR = { min_yaw: 60, max_yaw: 200, min_radius: 6.0, max_radius: 13.0 }
randFloat = function(low, high) {
return low + Math.random() * (high - low);
}
clamp = function(x, lower, upper) {
return Math.max(lower, Math.min(upper, x));
}
smoothstep = function(edge0, edge1, x) {
var t = clamp( (x - edge0) / (edge1 - edge0), 0, 1);
return t * t * (3.0 - 2.0 * t);
}
function genLocation(seed) {
var sign = (seed >= 0.5 ? 1.0 : -1.0);
var absSeed = 2.0 * Math.abs((seed - 0.5));
//var param = smoothstep(1.0, 0.0, absSeed);
var param = (1.0 - absSeed) * (1.0 - absSeed);
var yawCoord = 0.5 + sign * 0.5 * param
var yaw = LOCATION_POLAR.min_yaw + yawCoord * (LOCATION_POLAR.max_yaw - LOCATION_POLAR.min_yaw);
var radiusCoord = (1.0 - Math.abs(2 * yawCoord - 1.0) * Math.abs(2 * yawCoord - 1.0))
// var radiusCoord = Math.cos(Math.abs(2 * yawCoord - 1.0))
var radiusNoise = Math.random()
//var radiusNoise = 1.0
radiusCoord = radiusCoord * radiusNoise;
var radius = LOCATION_POLAR.min_radius + (LOCATION_POLAR.max_radius - LOCATION_POLAR.min_radius) * radiusCoord;
var polar = { x: 0, y: yaw * Math.PI / 180, z: radius };
var p = Vec3.fromPolar(polar);
var pos = Vec3.sum(LOCATION_ORIGIN, p);
print(JSON.stringify(pos))
return pos;
}
var LOCATION = genLocation(Math.random());
Vec3.print("RANDOM LOCATION SELECTED:", LOCATION);
// Disable the privacy bubble
Users.disableIgnoreRadius();
// Set position here if playFromCurrentLocation is true
Avatar.position = LOCATION;
Avatar.orientation = Quat.fromPitchYawRollDegrees(0, randFloat(0, 360), 0);
Avatar.scale = 1.0;
Agent.isAvatar = true;
// make the agent "listen" to the audio stream to cause additional audio-mixer load, technically this isn't needed when you're playing a recording
// but if you switch to a non-recording bot, you will need this, so we can leave this.
Agent.isListeningToAudioStream = true;
Recording.loadRecording(RECORDING_URL, function(success) {
if (success) {
Script.update.connect(update);
} else {
print("Failed to load recording from " + RECORDING_URL);
}
});
var CHANCE_OF_SOUND = 0.0;
var sounds = [];
loadSounds();
function loadSounds() {
var sound_filenames = ["AB1.wav", "Anchorman2.wav", "B1.wav", "B1.wav", "Bale1.wav", "Bandcamp.wav",
"Big1.wav", "Big2.wav", "Brian1.wav", "Buster1.wav", "CES1.wav", "CES2.wav", "CES3.wav", "CES4.wav",
"Carrie1.wav", "Carrie3.wav", "Charlotte1.wav", "EN1.wav", "EN2.wav", "EN3.wav", "Eugene1.wav", "Francesco1.wav",
"Italian1.wav", "Japanese1.wav", "Leigh1.wav", "Lucille1.wav", "Lucille2.wav", "MeanGirls.wav", "Murray2.wav",
"Nigel1.wav", "PennyLane.wav", "Pitt1.wav", "Ricardo.wav", "SN.wav", "Sake1.wav", "Samantha1.wav", "Samantha2.wav",
"Spicoli1.wav", "Supernatural.wav", "Swearengen1.wav", "TheDude.wav", "Tony.wav", "Triumph1.wav", "Uma1.wav",
"Walken1.wav", "Walken2.wav", "Z1.wav", "Z2.wav"
];
var SOUND_BASE_URL = "https://s3.amazonaws.com/hifi-public/sounds/cocktail-party/";
for (var i = 0; i < sound_filenames.length; i++) {
sounds.push(SoundCache.getSound(SOUND_BASE_URL + sound_filenames[i]));
}
}
// Play a random sound from a list of conversational audio clips
function playRandomSound() {
if (!Agent.isPlayingAvatarSound) {
var whichSound = Math.floor((Math.random() * sounds.length) % sounds.length);
Agent.playAvatarSound(sounds[whichSound]);
}
}
var entityJSON = {
"properties": {
"acceleration": { "x": 0, "y": 0, "z": 0 },
"actionData": "",
"age": 8,
"ageAsText": "0 hours 0 minutes 8 seconds",
"angularDamping": 0.39,
"angularVelocity": { "x": 0, "y": 0, "z": 0 },
"animation": {
"allowTranslation": true,
"currentFrame": 0,
"firstFrame": 0,
"fps": 30,
"hold": false,
"lastFrame": 100000,
"loop": true,
"running": false,
"url": ""
},
"boundingBox": {
"brn": { "x": -0.1, "y": 0.9, "z": -1.1},
"center": { "x": 0, "y": 1, "z": -1 },
"dimensions": { "x": 0.2, "y": 0.2, "z": 0.2},
"tfl": { "x": 0.1, "y": 1.1, "z": -0.9}
},
"canCastShadow": true,
"certificateID": "",
"clientOnly": true,
"cloneAvatarEntity": false,
"cloneDynamic": false,
"cloneLifetime": 300,
"cloneLimit": 0,
"cloneOriginID": "{00000000-0000-0000-0000-000000000000}",
"cloneable": false,
"collidesWith": "static,dynamic,kinematic,myAvatar,otherAvatar,",
"collisionMask": 31,
"collisionSoundURL": "",
"collisionless": false,
"collisionsWillMove": false,
"compoundShapeURL": "",
"created": "2018-07-26T21:58:48Z",
"damping": 0.39,
"density": 1000,
"description": "",
"dimensions": { "x": 0.2, "y": 0.2, "z": 0.2 },
"dynamic": false,
"editionNumber": 0,
"entityInstanceNumber": 0,
"friction": 0.5,
"gravity": { "x": 0, "y": 0, "z": 0 },
"href": "",
"id": "{05162d5d-5e65-4837-ad50-57041c8be427}",
"ignoreForCollisions": false,
"itemArtist": "",
"itemCategories": "",
"itemDescription": "",
"itemLicense": "",
"itemName": "",
"lifetime": 3600,
"limitedRun": 4294967295,
"localPosition": { "x": 0, "y": 1, "z": -1 },
"localRotation": { "w": 1, "x": 0, "y": 0, "z": 0 },
"locked": false,
"marketplaceID": "",
"modelURL": "http://www.capondesign.com/EXternal/models/ironman/TonyV2.fst",
"name": "FloofEntity",
"naturalDimensions": { "x": 1.94, "y": 1.812, "z": 0.375 },
"naturalPosition": { "x": 0, "y": 0.9, "z": 0.02 },
"originalTextures": "{\n \"Tony_Stark_Beard_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Beard_Diffuse.png\",\n \"Tony_Stark_Beard_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Beard_Gloss.png\",\n \"Tony_Stark_Beard_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Beard_Normal.png\",\n \"Tony_Stark_Beard_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Beard_Specular.png\",\n \"Tony_Stark_Body_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Body_Diffuse.png\",\n \"Tony_Stark_Body_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Body_Gloss.png\",\n \"Tony_Stark_Body_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Body_Normal.png\",\n \"Tony_Stark_Body_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Body_Specular.png\",\n \"Tony_Stark_Bottom_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Bottom_Diffuse.png\",\n \"Tony_Stark_Bottom_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Bottom_Gloss.png\",\n \"Tony_Stark_Bottom_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Bottom_Normal.png\",\n \"Tony_Stark_Bottom_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Bottom_Specular.png\",\n \"Tony_Stark_Eyewear_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Eyewear_Diffuse.png\",\n \"Tony_Stark_Eyewear_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Eyewear_Gloss.png\",\n \"Tony_Stark_Eyewear_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Eyewear_Normal.png\",\n \"Tony_Stark_Eyewear_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Eyewear_Specular.png\",\n \"Tony_Stark_Hair_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Hair_Diffuse.png\",\n \"Tony_Stark_Hair_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Hair_Gloss.png\",\n \"Tony_Stark_Hair_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Hair_Normal.png\",\n \"Tony_Stark_Hair_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Hair_Specular.png\",\n \"Tony_Stark_Moustache_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Moustache_Diffuse.png\",\n \"Tony_Stark_Moustache_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Moustache_Gloss.png\",\n \"Tony_Stark_Moustache_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Moustache_Normal.png\",\n \"Tony_Stark_Moustache_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Moustache_Specular.png\",\n \"Tony_Stark_Shoes_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Shoes_Diffuse.png\",\n \"Tony_Stark_Shoes_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Shoes_Gloss.png\",\n \"Tony_Stark_Shoes_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Shoes_Normal.png\",\n \"Tony_Stark_Shoes_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Shoes_Specular.png\",\n \"Tony_Stark_Top_Diffuse\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Top_Diffuse.png\",\n \"Tony_Stark_Top_Gloss\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Top_Gloss.png\",\n \"Tony_Stark_Top_Normal\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Top_Normal.png\",\n \"Tony_Stark_Top_Specular\": \"http://www.capondesign.com/EXternal/models/ironman/TonyV2/textures/Tony_Stark_Top_Specular.png\"\n}\n",
"owningAvatarID": "{b5229825-2c0b-4ef5-bcfc-913858ebe7b3}",
"parentID": "{b5229825-2c0b-4ef5-bcfc-913858ebe7b3}",
"parentJointIndex": 65535,
"position": { "x": 0, "y": 1, "z": -1 },
"queryAACube": { "scale": 1.04, "x": 8.59, "y": 0.94, "z": -29.11 },
"registrationPoint": { "x": 0.5, "y": 0.5, "z": 0.5 },
"relayParentJoints": true,
"renderInfo": {
"drawCalls": 9,
"hasTransparent": false,
"texturesCount": 27,
"texturesSize": 27525120,
"verticesCount": 25745
},
"restitution": 0.5,
"rotation": { "w": 1, "x": 0, "y": 0, "z": 0 },
"script": "",
"scriptTimestamp": 0,
"serverScripts": "",
"shapeType": "none",
"staticCertificateVersion": 0,
"textures": "",
"type": "Model",
"userData": "",
"velocity": { "x": 0, "y": 0, "z": 0 },
"visible": true
}
};
var count = 0;
var playCount = 300;
function update(event) {
count++;
if (count < playCount) {
return;
}
if (count == playCount) {
Recording.setPlayFromCurrentLocation(true);
Recording.setPlayerLoop(true);
Recording.startPlaying();
Vec3.print("Playing from ", Avatar.position);
}
/* uncomment to thrash AvatarEntityData
if (0 == (count % 45)) {
// send a bogus change to an imaginary AvatarEntity
entityJSON["name"] = "entity" + count;
Avatar.setAvatarEntityData({ "ff898dea-cb9a-4952-9639-3cb7dfe884df" : entityJSON });
}
*/
EntityViewer.setPosition(Avatar.position);
EntityViewer.setOrientation(Avatar.orientation);
EntityViewer.queryOctree();
if (Math.random() < CHANCE_OF_SOUND) {
playRandomSound();
}
if (!Recording.isPlaying()) {
Script.update.disconnect(update);
}
// uncomment to thrash Avatar's name
//Avatar.displayName = "Bot_RAND" + count;
}