// ==== Starter World ===============================================================================================
// (c) Ancient Brain Ltd. All rights reserved.
// This code is only for use on the Ancient Brain site.
// This code may be freely copied and edited by anyone on the Ancient Brain site.
// This code may not be copied, re-published or used on any other website.
// To include a run of this code on another website, see the "Embed code" links provided on the Ancient Brain site.
// ==================================================================================================================
// Starter World for Three.js experiments
// No Mind
// Just World
// comment
// ===================================================================================================================
// === Start of tweaker's box ========================================================================================
// ===================================================================================================================
// The easiest things to modify are in this box.
// You should be able to change things in this box without being a JavaScript programmer.
// Go ahead and change some of these. What's the worst that could happen?
// These 3 have default values, so this section is optional:
AB.clockTick = 10;
// Speed of run: Step every n milliseconds. Default 100.
AB.maxSteps = 100000;
// Length of run: Maximum length of run in steps. Default 1000.
AB.screenshotStep = 50;
// Take screenshot on this step. (All resources should have finished loading.) Default 50.
const FILE_ARRAY = [
"/uploads/starter/earth.1.jpg",
"/uploads/starter/earth.2.jpg",
"/uploads/starter/earth.3.jpg",
"/uploads/starter/earth.4.jpg",
"/uploads/starter/earth.5.jpg"
];
const SKYCOLOR = 0xffffff; // a number, not a string
const ARMYSIZE = 200; // an "army" of objects
const objectsize = 300 ;
const WALKSTEP = 5; // bounds of the random move per timestep
// try 50 (vibrating sheet) versus 1000 (cloud)
const MAXPOS = 4000 ; // start things within these bounds
const startRadiusConst = MAXPOS * 2 ; // distance from centre to start the camera at
const maxRadiusConst = MAXPOS * 5 ; // maximum distance from camera we will render things
ABHandler.MAXCAMERAPOS = MAXPOS * 10 ; // allow camera go far away
// ===================================================================================================================
// === End of tweaker's box ==========================================================================================
// ===================================================================================================================
// You will need to be some sort of JavaScript programmer to change things below the tweaker's box.
function randomfloatAtoB ( A, B )
{
return ( A + ( Math.random() * (B-A) ) );
}
function randomintAtoB ( A, B )
{
return ( Math.round ( randomfloatAtoB ( A, B ) ) );
}
var THEARMY = new Array( ARMYSIZE );
function initArmy()
{
var t = 0;
for ( var c=1 ; c <= ARMYSIZE ; c++ )
{
var shape = new THREE.SphereGeometry ( objectsize, 10, 10 );
// var shape = new THREE.BoxGeometry( objectsize, objectsize, objectsize );
var theobject = new THREE.Mesh( shape );
theobject.position.x = randomintAtoB ( -MAXPOS, MAXPOS );
theobject.position.z = randomintAtoB ( -MAXPOS, MAXPOS );
theobject.position.y = 0;
ABWorld.scene.add(theobject);
THEARMY[t] = theobject; // save it for later
t++;
}
}
function paintArmy() // paint objects with random textures
{
var textureArray = [
( new THREE.ImageUtils.loadTexture( FILE_ARRAY[0] ) ),
( new THREE.ImageUtils.loadTexture( FILE_ARRAY[1] ) ),
( new THREE.ImageUtils.loadTexture( FILE_ARRAY[2] ) ),
( new THREE.ImageUtils.loadTexture( FILE_ARRAY[3] ) ),
( new THREE.ImageUtils.loadTexture( FILE_ARRAY[4] ) )
];
for ( var i = 0; i < textureArray.length; i++ ) // for all textures
{
textureArray[i].minFilter = THREE.LinearFilter;
}
for ( var i = 0; i < THEARMY.length; i++ ) // for all objects
{
if ( THEARMY[i] )
{
var t = randomintAtoB ( 0, textureArray.length - 1 ); // random texture
THEARMY[i].material = new THREE.MeshBasicMaterial ( { map: textureArray[t] } );
}
}
}
function moveArmy() // move all the objects
{
for ( var i = 0; i < THEARMY.length; i++ )
{
if ( THEARMY[i] )
{
THEARMY[i].position.x = THEARMY[i].position.x + WALKSTEP; // randomintAtoB(-WALKSTEP,WALKSTEP) ;
THEARMY[i].position.z = THEARMY[i].position.z + WALKSTEP; // randomintAtoB(-WALKSTEP,WALKSTEP) ;
THEARMY[i].position.y = THEARMY[i].position.y + WALKSTEP; // randomintAtoB(-WALKSTEP,WALKSTEP) ;
ABWorld.scene.add( THEARMY[i] );
}
}
}
AB.world.newRun = function()
{
ABWorld.init3d ( startRadiusConst, maxRadiusConst, SKYCOLOR );
initArmy();
paintArmy(); // comment out for random coloured objects
};
AB.world.nextStep = function()
{
moveArmy();
};