// not using these - actually user controlled
const CLOCKTICK = 100; // speed of run - move things every n milliseconds
const MAXSTEPS = 1000; // length of a run before final score
const objectsize = 300 ;
const MAXPOS = 4000 ;
const startRadiusConst = MAXPOS * 0.5 ; // distance from centre to start the camera at
const maxRadiusConst = MAXPOS * 5 ; // maximum distance from camera we will render things
const SKYCOLOR = 1000; // a number, not a string
function randomfloatAtoB ( A, B )
{
return ( A + ( Math.random() * (B-A) ) );
}
function randomintAtoB ( A, B )
{
return ( Math.round ( randomfloatAtoB ( A, B ) ) );
}
function World() {
var x, y, z; // current location
var textureArray;
function init()
{
textureArray = [
( new THREE.ImageUtils.loadTexture( "/uploads/starter/minecraft.1.jpg" ) ),
( new THREE.ImageUtils.loadTexture( "/uploads/starter/minecraft.2.jpg" ) )
];
for ( var i = 0; i < textureArray.length; i++ ) // for all textures
{
textureArray[i].minFilter = THREE.LinearFilter;
}
// create one box to start
var shape = new THREE.BoxGeometry( objectsize, objectsize, objectsize );
var theobject = new THREE.Mesh( shape );
theobject.position.x = 0;
theobject.position.z = 0;
theobject.position.y = 0;
x = theobject.position.x; // current position
y = theobject.position.y;
z = theobject.position.z;
threeworld.scene.add(theobject);
paintThis ( theobject );
// 1. fiddle with x y z values here to understand x,y,z system
shape = new THREE.BoxGeometry( objectsize, objectsize, objectsize );
theobject = new THREE.Mesh( shape );
theobject.position.x = objectsize * 2;
theobject.position.z = randomintAtoB(1,1000);
theobject.position.y = 300;
threeworld.scene.add(theobject);
paintThis ( theobject );
// 2. each time round the loop, give the new box a new x,y,z position
// using randomintAtoB
for ( i = 1; i <= 1000; i++ ) // do this 100 times
{
shape = new THREE.BoxGeometry( objectsize, objectsize, objectsize );
theobject = new THREE.Mesh( shape );
theobject.position.x = randomintAtoB(-10000,10000);
theobject.position.z = randomintAtoB(-10000,10000);
theobject.position.y = randomintAtoB(-10000,1);
threeworld.scene.add(theobject);
paintThis ( theobject );
}
}
function handleKeyDown (event)
{
var shape = new THREE.BoxGeometry( objectsize, objectsize, objectsize );
var theobject = new THREE.Mesh( shape );
theobject.position.x = x; // default position is current position - going to then move it
theobject.position.y = y;
theobject.position.z = z;
var code = event.keyCode;
if (code == 37) theobject.position.x = x - objectsize ; // left
if (code == 39) theobject.position.x = x + objectsize ; // right
if (code == 38) theobject.position.z = z - objectsize ; // forward
if (code == 40) theobject.position.z = z + objectsize ; // back
if (code == 34) theobject.position.y = y - objectsize ;
if (code == 33) theobject.position.y = y + objectsize ;
x = theobject.position.x; // current position is now this
y = theobject.position.y;
z = theobject.position.z;
// console.log ( "(x,y,z) = (" + x + "," + y + "," + z + ")" );
// threeworld.lookat.copy ( theobject.position );
threeworld.scene.add(theobject);
paintThis ( theobject );
// sound effect credit:
// http://soundbible.com/1399-Chambering-A-Round.html
var audio = new Audio('/uploads/starter/chamber.mp3');
audio.play();
}
function paintThis( object ) // paint objects with random textures
{
var t = randomintAtoB ( 0, textureArray.length - 1 ); // random texture
object.material = new THREE.MeshBasicMaterial ( { map: textureArray[t] } );
}
this.endCondition;
this.newRun = function()
{
this.endCondition = false;
threeworld.init3d ( startRadiusConst, maxRadiusConst, SKYCOLOR );
var s = "<center> <h2> User controlled. Use arrow keys and PgUp, PgDn to draw. </h2> </center>";
$("#user_span2").html( s );
init();
document.addEventListener( 'keydown', handleKeyDown );
};
this.getState = function()
{
return ( null );
};
this.takeAction = function ( a )
{
};
this.endRun = function()
{
};
this.getScore = function()
{
return 0;
};
}