Code viewer for World: smooth movement


// ==== 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();
};