// Cloned by Vaidas Buzas on 30 Nov 2022 from World "Websockets Project (clone by Jack)" by Jack // Please leave this clone trail here.// Cloned by Jack on 17 Nov 2022 from World "Websockets Project" by Gareth Hogan // Please leave this clone trail here.// Cloned by Gareth Hogan on 12 Nov 2022 from World "Websockets boxes" by Starter user // Please leave this clone trail here.//--------------------------------------------------------------------------------------------------------------// CONSTS AND VARS//--------------------------------------------------------------------------------------------------------------
AB.clockTick =100;// Speed of run: Step every n milliseconds. Default 100.
AB.maxSteps =200;// Length of run: Maximum length of run in steps. Default 1000.
AB.screenshotStep =100;// Take screenshot on this step. (All resources should have finished loading.) Default 50.// '/uploads/gareth22/Barry_Benson_TradingCard.jpg'const FILE_ARRAY =["/uploads/gareth22/dirt.jpg","/uploads/gareth22/diamond.jpg","/uploads/gareth22/redstone.jpg","/uploads/gareth22/redglass.jpg","/uploads/gareth22/blueglass.jpg","/uploads/gareth22/blorb.jpg","/uploads/gareth22/rorb.jpg"];const SKYCOLOR =0x87CEEB;// a number, not a string const ARMYSIZE =100;// an "army" of objects const gridsize =10;// number of squares along side of world const objectsize =100;constNumBoxes= gridsize*gridsize;const MAXPOS = gridsize * objectsize;// start things within these bounds const startRadiusConst = MAXPOS;// distance from centre to start the camera atconst maxRadiusConst = MAXPOS *5;// maximum distance from camera we will render thingsconst GRID_BLANK =0;const GRID_USER1 =1;const GRID_USER2 =4;const GRID_COLOUR1 =2;const GRID_COLOUR2 =3;const ACTION_LEFT =0;const ACTION_RIGHT =1;const ACTION_UP =2;const ACTION_DOWN =3;ABHandler.MAXCAMERAPOS = MAXPOS;ABWorld.drawCameraControls =false;
AB.drawRunControls =false;ABHandler.GROUNDZERO =true;var step;var textureArray =newArray(FILE_ARRAY.length);var GRID =newArray(gridsize);var ai, aj;//player 1var bi, bj;//player 2 var player1, player2;// the orb objects//--------------------------------------------------------------------------------------------------------------// PRELOAD RESOURCES//--------------------------------------------------------------------------------------------------------------function loadResources()// asynchronous file loads - call initScene() when all finished {for(var i =0; i < FILE_ARRAY.length; i++)
startFileLoad ( i );// launch n asynchronous file loads}function startFileLoad ( n )// asynchronous file load of texture n {var loader =new THREE.TextureLoader();
loader.load ( FILE_ARRAY[n],function( thetexture ){
thetexture.minFilter = THREE.LinearFilter;
textureArray[n]= thetexture;if(asynchFinished())
initScene();});}function asynchFinished()// all file loads returned {for(var i =0; i < FILE_ARRAY.length; i++){if(!textureArray[i])returnfalse;}returntrue;}//--------------------------------------------------------------------------------------------------------------// SETUP GRID//--------------------------------------------------------------------------------------------------------------function initScene()// called when all textures ready {var i, j, shape, theobject, borb, rorb;for(i =0; i < gridsize ; i++)
GRID[i]=newArray(gridsize);// MAKING CUBESfor(i =0; i < gridsize ; i++){for(j =0; j < gridsize ; j++){
GRID[i][j]= GRID_BLANK;
shape =new THREE.BoxGeometry(objectsize, objectsize, objectsize);
theobject =new THREE.Mesh(shape);
theobject.material =new THREE.MeshBasicMaterial({map: textureArray[0]});
theobject.position.copy(translate(i,j));// translate my (i,j) grid coordinates to three.js (x,y,z) coordinates ABWorld.scene.add(theobject);}}// PLAYER ORBS
borb =new THREE.SphereGeometry(50,32,16);
rorb =new THREE.SphereGeometry(50,32,16);
player1 =new THREE.Mesh(borb);
player2 =new THREE.Mesh(rorb);
player1.material =new THREE.MeshBasicMaterial({map: textureArray[5]});
player2.material =new THREE.MeshBasicMaterial({map: textureArray[6]});
position1 = translateOrb(0,0)
player1.position.copy(position1)
position2 = translateOrb(9,9)
player2.position.copy(position2)ABWorld.scene.add(player1);ABWorld.scene.add(player2);
ai =0;
aj =0;
bi =9;
bj =9;
GRID[ai][aj]= GRID_USER1;
GRID[bi][bj]= GRID_USER2;
console.log(GRID);// can start the run loopABWorld.render();
AB.removeLoading();
AB.runReady =true;}function translate(i, j){var v =new THREE.Vector3();
v.y =0;
v.x =(i * objectsize)-(MAXPOS/2);
v.z =(j * objectsize)-(MAXPOS/2);return v;}function translateOrb(i, j){var v =new THREE.Vector3();
v.y =100;
v.x =(i * objectsize)-(MAXPOS/2);
v.z =(j * objectsize)-(MAXPOS/2);return v;}function occupied(i, j)// is this square occupied{return(GRID[i][j]== GRID_USER1 || GRID[i][j]== GRID_USER2);}//--------------------------------------------------------------------------------------------------------------// MOVEMENT//--------------------------------------------------------------------------------------------------------------// arrow keys : LEFT, UP, RIGHT, DOWN, A, W, D, Svar OURKEYS =[37,38,39,40,65,87,68,83];function ourKeys(event){return(OURKEYS.includes(event.keyCode));}function keyHandler(event){if(!AB.runReady)returntrue;if(!ourKeys(event))returntrue;if(event.keyCode ==65) moveUser(ACTION_LEFT,1);if(event.keyCode ==87) moveUser(ACTION_DOWN,1);if(event.keyCode ==68) moveUser(ACTION_RIGHT,1);if(event.keyCode ==83) moveUser(ACTION_UP,1);if(event.keyCode ==37) moveUser(ACTION_LEFT,2);if(event.keyCode ==38) moveUser(ACTION_DOWN,2);if(event.keyCode ==39) moveUser(ACTION_RIGHT,2);if(event.keyCode ==40) moveUser(ACTION_UP,2);
AB.socketStart(event)
event.stopPropagation(); event.preventDefault();returnfalse;}function moveUser(action, player){if(player ==1){// ai aj is where the player was, i j will be where they move tovar i = ai;var j = aj;}elseif(player ==2){var j = bj;var i = bi;}if(action == ACTION_LEFT ){if(i >0) i--;elsereturn;}elseif(action == ACTION_RIGHT ){if(i <9) i++;elsereturn;}elseif(action == ACTION_UP ){if(j <9) j++;elsereturn;}elseif(action == ACTION_DOWN){if(j >0) j--;elsereturn;}if(!occupied(i,j))// else just miss a turn {if(player ==1){//diamond
GRID[ai][aj]= GRID_COLOUR1;
shape =new THREE.BoxGeometry(objectsize, objectsize, objectsize);
theobject =new THREE.Mesh(shape);
theobject.material =new THREE.MeshBasicMaterial({map: textureArray[1]});
theobject.position.copy(translate(ai,aj));// translate my (i,j) grid coordinates to three.js (x,y,z) coordinates ABWorld.scene.add(theobject);
position = translateOrb(i,j)
player1.position.copy(position)
GRID[i][j]= GRID_USER1;
shape =new THREE.BoxGeometry(objectsize, objectsize, objectsize);
theobject =new THREE.Mesh(shape);
theobject.material =new THREE.MeshBasicMaterial({map: textureArray[4]});// where user is
theobject.position.copy(translate(i,j));// translate my (i,j) grid coordinates to three.js (x,y,z) coordinates ABWorld.scene.add(theobject);}elseif(player ==2){//redstone
GRID[bi][bj]= GRID_COLOUR2;
shape =new THREE.BoxGeometry(objectsize, objectsize, objectsize);
theobject =new THREE.Mesh(shape);
theobject.material =new THREE.MeshBasicMaterial({map: textureArray[2]});
theobject.position.copy(translate(bi,bj));// translate my (i,j) grid coordinates to three.js (x,y,z) coordinates ABWorld.scene.add(theobject);
position = translateOrb(i,j)
player2.position.copy(position)
GRID[i][j]= GRID_USER2;
shape =new THREE.BoxGeometry(objectsize, objectsize, objectsize);
theobject =new THREE.Mesh(shape);
theobject.material =new THREE.MeshBasicMaterial({map: textureArray[3]});// where user is
theobject.position.copy(translate(i,j));// translate my (i,j) grid coordinates to three.js (x,y,z) coordinates ABWorld.scene.add(theobject);}if(player ==1){
ai = i;
aj = j;}elseif(player ==2){
bi = i;
bj = j;}//theagent.position.copy(translate(ai,aj)); // translate my (i,j) grid coordinates to three.js (x,y,z) coordinates }
console.log(GRID)}//--------------------------------------------------------------------------------------------------------------// AB WORLD FUNCTIONS//--------------------------------------------------------------------------------------------------------------
AB.socketStart();if( AB.socket )if( AB.socket.connected )
AB.socketOut ( data );
AB.world.newRun =function(){
AB.loadingScreen();
AB.runReady =false;ABWorld.init3d(startRadiusConst, maxRadiusConst, SKYCOLOR );
loadResources();// aynch file loads, calls initScene() when it returns
document.onkeydown = keyHandler;
step =0;};function updatestatus(){var status ="<font size=5 face=verdana> Time: <br>"+ step +"</font>";
$("#user_span3").html(status);};
AB.world.nextStep =function(){
step++;
updatestatus();};function countScore(){
scoreP1 =1;
scoreP2 =1;for(i =0; i < gridsize ; i++){for(j =0; j < gridsize ; j++){if(GRID[i][j]==2){
scoreP1 +=1;}elseif(GRID[i][j]==3){
scoreP2 +=1;}}}
console.log(scoreP1)
console.log(scoreP2)if(scoreP1 > scoreP2){
winner ="<br> <font color=blue> <B> The winner is ... PLAYER 1 </B> </font>"}elseif(scoreP2 > scoreP1){
winner ="<br> <font color=red> <B> The winner is ... PLAYER 2 </B> </font>"}else{
winner ="<br> <font color=red> <B> The game was a Draw</B> </font>"}return(winner);}
AB.world.endRun =function(){if(step ==200){
$("#user_span4").html("<font size=5 face=verdana> <B>TIME UP</B> </font>");}
winner = countScore();
AB.msg(winner,7)};//--------------------------------------------------------------------------------------------------------------// SOCKETS//--------------------------------------------------------------------------------------------------------------// function baby() // { // changeBox(5); // AB.socketOut(5); // }// function skull() // { // changeBox(6); // AB.socketOut(6); // }// function changeBox(n) // change a random box to texture n (5 or 6) // {// var i = AB.randomIntAtoB (0, THEARMY.length - 1); // pick a random box to change // THEARMY[i].material = new THREE.MeshBasicMaterial ( { map: textureArray[n] } ); // }
AB.socketIn =function(n)// incoming data on socket, i.e. clicks of other player {
keyHandler(n);};