// Cloned by Enhanced on 12 Jun 2018 from World "No brain" by SinfulSalad // Please leave this clone trail here.// ==== 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.// ==================================================================================================================// ===================================================================================================================// === 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?//describes the ammount of time between each step of the run (in milliseconds)//33 means the program will generate 30 images per second//note that the program will not run properly if set under 18
AB.clockTick =33;//describes the number of steps the program is allowed to generate before terminating//1 000 000 means that the program will run for approximately 9 hours, if not terminated by the user
AB.maxSteps =1000000;//take screenshot on this step. (All resources should have finished loading.)
AB.screenshotStep =50;//Regulates the speed of the animation//1 is the default speed//2 is two times as fast//0.5 is 50% slower...var SPEED =1;//if set to true, will apply a weird effect that changes how the camera perceive spacevar EXPAND_SPACE_EFFECT =false;//if set to true, will slightly break the symmetry of the animationvar FLOATY_EFFECT =false;var HIGH_SPEED_EFFECT =false;//all the textures displayed by the program should be placed in this arrayconst FILE_ARRAY =["/uploads/meak/text1.jpeg","/uploads/meak/text2.jpg","/uploads/meak/text3.jpg","/uploads/meak/text4.jpg","/uploads/meak/text5.jpg"];//describes the color of the sky//0x000000 means black, and 0xffffff means white//checkout "html color hex values" on internet for more infoconst SKYCOLOR =0x000000;//describes the size of every generated objectconst objectsize =300;const MAXPOS =4000;const startRadiusConst = MAXPOS *0.5;// distance from centre to start the camera atconst maxRadiusConst = MAXPOS *5;// maximum distance from camera we will render things const shortDistance =2;//used for checking if two vectors are close to be the same//--- change threeworld defaults: -------------------------------
threehandler.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)));}//returns a whole number in from the [A,B[ rangefunction randomintAtoB ( A, B ){return(Math.floor ( randomfloatAtoB ( A, B )));}functionWorld(){var time =0;//will be incremented at each stepvar textureArray =[];//used to paint the generated shapes with the textures added abovevar blockArray =[];//each shape created will be added to this arrayvar weirdBlockArray =[];//some shapes require special manipulations, and are also added to this array//each of the following variables are only needed for the function "architect()" to work properlyvar mode =3;//describes which animation is currently being generatedvar trackbool =true;//allow to keep information from one call of the architect() function to anothervar trackint =0;//allow to keep information from one call of the architect() function to anothervar tracktime =0;var yposArray =[0,1,1,1,0,-1,-1,-1];//allow mode 3 to accurately position its shapesvar zposArray =[1,1,0,-1,-1,-1,0,1];//allow mode 3 to accurately position its shapesfunction toggleFloat(){
FLOATY_EFFECT =!FLOATY_EFFECT;}function toggleDistorsion(){
EXPAND_SPACE_EFFECT =!EXPAND_SPACE_EFFECT;if(!EXPAND_SPACE_EFFECT){
threeworld.camera.fov =75;
threeworld.camera.updateProjectionMatrix();}}function toggleHighSpeed(){
HIGH_SPEED_EFFECT =!HIGH_SPEED_EFFECT;if(HIGH_SPEED_EFFECT){SPEED *=4;}else{SPEED /=4;}}function init(){//SET TEXTURES
textureArray =[FILE_ARRAY.length];for(let i =0; i < FILE_ARRAY.length; i++){
textureArray[i]=new THREE.ImageUtils.loadTexture( FILE_ARRAY[i]);}for( let i =0; i < textureArray.length; i++)// for all textures {
textureArray[i].minFilter = THREE.LinearFilter;}//SET CAMERA
threeworld.camera.position.set(-6000,0,0);
threeworld.camera.rotation.set(Math.PI,-Math.PI/2,Math.PI);//GENERATE THE FIRST SHAPESfor(var i =9; i>=0; i--){
addBlock(-2*i*objectsize, objectsize, objectsize);
addBlock(-2*i*objectsize,-objectsize, objectsize);
addBlock(-2*i*objectsize, objectsize,-objectsize);
addBlock(-2*i*objectsize,-objectsize,-objectsize);}//SET THE MENU OPTIONSvar s1 ="<p>Tweak the animation with the following options!</p>";var s2 ="<p><button id='floatButton'>Floaty</button> <button id='distorsionButton'>Distorted</button> <button id='speedButton'>Hyperspeed</button></p>"
$("#user_span4").html( s1 );
$("#user_span5").html( s2 );
document.getElementById("floatButton").addEventListener("click", toggleFloat);
document.getElementById("distorsionButton").addEventListener("click", toggleDistorsion);
document.getElementById("speedButton").addEventListener("click", toggleHighSpeed);}//apply a random texture to an objectfunction paintThis( object ){var t = randomintAtoB (0, textureArray.length -1);// random texture
object.material =new THREE.MeshBasicMaterial({ transparent:true, opacity:1, map: textureArray[t]});}//place a shape at a specified location//if an array "dest" is specified, it will add the created shape to that specified destination function addBlock(x, y, z, dest=undefined){var shape =new THREE.BoxGeometry( objectsize, objectsize, objectsize );var block =new THREE.Mesh( shape );
block.position.x = x;
block.position.y = y;
block.position.z = z;
threeworld.scene.add(block);
paintThis ( block );
blockArray.push(block);if(dest !==undefined){dest.push(block);}}//function in charge of building all the shapesfunction architect(){//every 600 steps, the function changes modeif(time !=0&&Math.floor(time%((30/AB.clockTick*1000)/SPEED))==0){
mode++;if(mode >4){mode =1;}
trackint =0;
trackbool =0;if(mode ==4){tracktime =0;}}switch(mode){case1://cubes are created 4 by 4, at a distance of one cube from one anotherif(Math.floor(time%((1.5/AB.clockTick*1000)/SPEED))==0&& time !=0){
addBlock(0, objectsize, objectsize);
addBlock(0,-objectsize, objectsize);
addBlock(0, objectsize,-objectsize);
addBlock(0,-objectsize,-objectsize);}break;case2://half of the time, the cubes are created "diagonally"if(trackbool){if(Math.floor(time%((1.5/AB.clockTick*1000)/SPEED))==0&& time !=0){
addBlock(0, objectsize, objectsize);
addBlock(0,-objectsize, objectsize);
addBlock(0, objectsize,-objectsize);
addBlock(0,-objectsize,-objectsize);
trackbool =!trackbool;}}else{if(Math.floor(time%((1.5/AB.clockTick*1000)/SPEED))==0&& time !=0){
addBlock(0,2*objectsize,0);
addBlock(0,-2*objectsize,0);
addBlock(0,0,-2*objectsize);
addBlock(0,0,2*objectsize);
trackbool =!trackbool;}}break;case3://generates 2 long string of cubes that are symmetric to one anotherif(Math.floor(time%((0.75/AB.clockTick*1000)/SPEED))==0&& time !=0){
addBlock(0, yposArray[trackint]*objectsize, zposArray[trackint]*objectsize);
addBlock(0,-yposArray[trackint]*objectsize,-zposArray[trackint]*objectsize);if(trackbool ==true){
nextBlockPos = randomintAtoB(0,3)-1;if(nextBlockPos !=0){
trackint += nextBlockPos;if(trackint <0){trackint =7;}if(trackint >7){trackint =0;}
addBlock(0, yposArray[trackint]*objectsize, zposArray[trackint]*objectsize);
addBlock(0,-yposArray[trackint]*objectsize,-zposArray[trackint]*objectsize);
trackbool =false;}}else{trackbool =true;}}break;case4://create a long string of cubes that will spiral its way through spaceif(Math.floor(time%((0.75/AB.clockTick*1000)/SPEED))==0&& time !=0){addBlock(0,0, objectsize, weirdBlockArray);}
tracktime++;break;}}this.newRun =function(){
threeworld.init3d ( startRadiusConst, maxRadiusConst, SKYCOLOR );
init();};this.nextStep =function(){//all shapes are drawn closer to the camera
blockArray.forEach(function(block){
block.position.x -= SPEED*400*AB.clockTick/1000;});//manages the motion of the shapes created by mode 4
weirdBlockArray.forEach(function(block){
block.position.y =(objectsize-block.position.x/9)*Math.sin(block.position.x*tracktime/300000*SPEED);
block.position.z =(objectsize-block.position.x/9)*Math.cos(block.position.x*tracktime/300000*SPEED);
block.rotateX(20*AB.clockTick/1000*tracktime/30000*2.3*SPEED);});//apply a weird optic effect if the constant is set to trueif(FLOATY_EFFECT){
blockArray.forEach(function(block){
block.position.y +=1.3*20*AB.clockTick/1000*Math.sin(block.position.x/400);
block.position.z +=1.3*20*AB.clockTick/1000*Math.cos(block.position.x/400);});}//apply a weird optic effect if the constant is set to trueif(EXPAND_SPACE_EFFECT){
threeworld.camera.fov =112+(65*Math.sin(time/55));
threeworld.camera.updateProjectionMatrix();}//build more shapes if necessary
architect();//destroy the shapes that are far behind the camera (and that can't be seen anymore)while(blockArray[0].position.x <=-7000&& blockArray.length >0){
threeworld.scene.remove(blockArray[0]);
blockArray = blockArray.splice(1, blockArray.length-1);}//increment time
time ++;
console.log("nb cubes : "+blockArray.length);};this.endRun =function(){};}