//Sources:
//Egg: https://poly.google.com/view/fOdgSMxvk2r
//Trees: https://poly.google.com/view/2_fv3tn3NG_
//Egg Building: https://poly.google.com/view/fj7pMmLK5jG
//Player and AI base: https://poly.google.com/view/7A18mxC9RmU
//note when player puts egg in base make animate up and down then disappear.
function World()
{
var cam;
var meshFloor;
var food_list = [];
var keyboard = {};
var distance;
var updatedPosX;
var updatedPosZ;
var egg = [];
var hasEgg = false;
var play;
var player_base;
var objLoader = new THREE.OBJLoader();
objLoader.setPath("/uploads/tuitef2/");
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath("/uploads/tuitef2/");
var objLoader1 = new THREE.OBJLoader();
objLoader1.setPath("/uploads/tuitef2/");
var mtlLoader1 = new THREE.MTLLoader();
mtlLoader1.setPath("/uploads/tuitef2/");
var objLoader2 = new THREE.OBJLoader();
objLoader2.setPath("/uploads/tuitef2/");
var mtlLoader2 = new THREE.MTLLoader();
mtlLoader2.setPath("/uploads/tuitef2/");
var objLoader3 = new THREE.OBJLoader();
objLoader3.setPath("/uploads/tuitef2/");
var mtlLoader3 = new THREE.MTLLoader();
mtlLoader3.setPath("/uploads/tuitef2/");
var objLoader4 = new THREE.OBJLoader();
objLoader4.setPath("/uploads/tuitef2/");
var mtlLoader4 = new THREE.MTLLoader();
mtlLoader4.setPath("/uploads/tuitef2/");
var update_speed = 0.2;//
var player = { height:2, speed:0.3, turnSpeed:0.09}; //to get player position get cam position
var playerFoodCount=0;
var scene = new THREE.Scene(); //CREATE SCENE
var sky_texture = new THREE.TextureLoader().load( 'uploads/tuitef2/skyyy.png' );
scene.background = sky_texture;
var renderer = new THREE.WebGLRenderer();
function render(){
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
function camera(){
cam = new THREE.PerspectiveCamera(90, window.innerWidth/window.innerHeight, 0.1, 1000);
cam.position.set(0, 3.5, -160); //position.x,position.y,position.z
cam.lookAt(scene.position);
}
function create_player(){
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( {color: "#c91092"} );
play = new THREE.Mesh( geometry, material );
play.scale.multiplyScalar(2);
play.position.set(0,player.height,-160);
scene.add(play);
}
function ground(){
var texture = new THREE.TextureLoader().load( 'uploads/tuitef2/ground_texture1.png' );
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.offset.set( 0, 0 );
texture.repeat.set( 2, 2 );
// immediately use the texture for material creation
meshFloor = new THREE.Mesh(
new THREE.PlaneGeometry(400,400),
new THREE.MeshBasicMaterial({map:texture}));
meshFloor.rotation.x -= Math.PI / 2; // Rotate the plane 90 degrees as if you don't do this it'll be like a tv screen.
scene.add(meshFloor);
}
function tree_border(i){
mtlLoader.load("PUSHILIN_forest.mtl", function(materials) {
materials.preload();
objLoader.setMaterials(materials);
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += i;
mesh.position.x += 180;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){//bottom
mesh.position.z += i;
mesh.position.x += -180;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){//right
mesh.position.z += 180;
mesh.position.x += i;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){//left
mesh.position.z += -180;
mesh.position.x += i;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
var light = new THREE.DirectionalLight( "#7fe093", 0.3 );
light.position.set( 0, 1, 0 );
scene.add( light );
});
}
function place_trees(){
mtlLoader.load("PUSHILIN_forest.mtl", function(materials) {
materials.preload();
objLoader.setMaterials(materials);
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 120;
mesh.position.x += 120;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 120;
mesh.position.x += -120;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 120;
mesh.position.x += -130;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 120;
mesh.position.x += 130;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 90;
mesh.position.x += 90;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 90;
mesh.position.x += -90;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 50;
mesh.position.x += -60;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 50;
mesh.position.x += 60;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 50;
mesh.position.x += 100;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 90;
mesh.position.x += -100;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 90;
mesh.position.x += 20;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 70;
mesh.position.x += -10;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += 60;
mesh.position.x += -20;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top//
mesh.position.z += -10;
mesh.position.x += -50;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top//
mesh.position.z += -10;
mesh.position.x += 50;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -120;
mesh.position.x += 120;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top -
mesh.position.z += -120;
mesh.position.x += -120;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -120;
mesh.position.x += -130;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -120;
mesh.position.x += 130;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -90;
mesh.position.x += 90;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -90;
mesh.position.x += -90;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -50;
mesh.position.x += -60;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -50;
mesh.position.x += 60;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -50;
mesh.position.x += 100;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -90;
mesh.position.x += -100;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -90;
mesh.position.x += 20;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -70;
mesh.position.x += -10;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
objLoader.load("PUSHILIN_forest.obj", function(mesh){ //top
mesh.position.z += -60;
mesh.position.x += -20;
mesh.position.y+=5;
mesh.scale.multiplyScalar(15);
scene.add(mesh);
});
});
}
function base(){
mtlLoader3.load("materials1.mtl", function(material) { //BUILDING FOR EGG
material.preload();
objLoader3.setMaterials(material);
objLoader3.load("model-triangulated.obj", function(mesh){ //player base
mesh.position.y+=1;
// mesh.scale.multiplyScalar(5);
mesh.scale.set(15,5,5);
mesh.position.x += 0;
mesh.position.z += -160;
scene.add(mesh);
player_base = mesh;
var light = new THREE.PointLight("#c91092", 5, 100 );
light.position.set(0, 2, -160 );
scene.add( light );
});
objLoader3.load("model-triangulated.obj", function(mesh){ //AI base
mesh.position.y+=1;
mesh.scale.set(15,5,5);
mesh.position.x += 0;
mesh.position.z += 160;
scene.add(mesh);
var light = new THREE.PointLight("#1061a0", 5, 100 );
light.position.set(0, 2, 160 );
scene.add( light );
});
});
}
function place_structure(){
mtlLoader1.load("01.mtl", function(m) { //BUILDING FOR EGG
m.preload();
objLoader1.setMaterials(m);
objLoader1.load("01.obj", function(mesh){ //top
mesh.position.y+=2;
mesh.scale.set(0.5,0.5,0.5);
mesh.position.x += 20;
mesh.position.z +=20;
scene.add(mesh);
});
});
}
function place_egg(){
mtlLoader2.load("tfx95.mtl", function(m) { //EGG
m.preload();
objLoader2.setMaterials(m);
objLoader2.load("tfx95.obj", function(mesh){ //top
mesh.position.y+=2.3;
mesh.scale.set(1.8,1.8,1.8);
mesh.position.x += -2;
mesh.position.z += -12;
mesh.rotation.z += 2;
scene.add(mesh);
egg.push(mesh);
});
var light = new THREE.PointLight(0xff0000, 5, 150 );
light.position.set(-2, 2, -12 );
scene.add( light );
});
}
function eat_egg(){
for(i=0;i<egg.length;i++){
distance1 = Math.abs((parseInt(updatedPosX)) - egg[i].position.x);
distance2 = Math.abs((parseInt(updatedPosZ)) - egg[i].position.z);
if(distance1 <=2 && distance2 <= 2 && hasEgg !== true){
hasEgg = true;
}
if(hasEgg === true){
egg[i].position.x = updatedPosX+1.5;
egg[i].position.z = updatedPosZ+1.5;
console.log(egg[i].position.x, updatedPosX);
positionEgg();
}
}
}
function hide_egg(){
setTimeout(function() { //places egg after 70 seconds
place_egg();
}, 20000); //70000
}
function positionEgg(){ //player position egg at base
for(i=0;i<egg.length;i++){
distance2BaseX = Math.abs((parseInt(updatedPosX)) - player_base.position.x);
distance2BaseY = Math.abs((parseInt(updatedPosZ)) - player_base.position.z);
if(distance2BaseX <=2 && distance2BaseY <= 2){
egg[i].position.x = player_base.position.x;
egg[i].position.z = player_base.position.z;
egg[i].position.y = 3.2;
hasEgg = false;
}
}
}
function food(){
for (i=0; i < 8; i++){ //8 foods on plane
mesh = new THREE.Mesh(
new THREE.SphereGeometry(1),
new THREE.MeshBasicMaterial({color:0xff4444}));
mesh.position.z += AB.randomIntAtoB(-160,120);
mesh.position.x += AB.randomIntAtoB(-160,120);
mesh.position.y += 2; // Move the mesh up 1 meter
mesh.scale.multiplyScalar(1.5);
scene.add(mesh);
food_list.push(mesh);
}
}
function food_color(){
setTimeout(function() { //changes color of food after 5 seconds
for(i = 0;i <food_list.length; i++){
food_list[i].material.color.set("#ffcc00"); //yellow color
}
food_positionChange();
}, 6000);
}
function food_positionChange(){
setTimeout(function() { //changes position of food after 5 seconds
for(i = 0;i <food_list.length; i++){
food_list[i].position.x = AB.randomIntAtoB(-160,120);
food_list[i].position.z = AB.randomIntAtoB(-160,120);
food_list[i].material.color.set(0xff4444);//red color
}
food_color();
}, 10000);
}
function eat_food(){
for(i = 0;i <food_list.length; i++){
distanceX = Math.abs((parseInt(updatedPosX)) - food_list[i].position.x);
distanceZ = Math.abs((parseInt(updatedPosZ)) - food_list[i].position.z);
if(distanceX <=2 && distanceZ <= 2 ){ //if player is close
food_list[i].position.x = AB.randomIntAtoB(-160,120);
food_list[i].position.z = AB.randomIntAtoB(-160,120);//change the position of the item
food_list[i].material.color.set(0xff4444); //red color
playerFoodCount++;
document.getElementById("user_span1").innerHTML = playerFoodCount;
}
}
}
function player_speed(){
if (playerFoodCount %8===0){
update_speed++;
}
}
function movement(){
requestAnimationFrame(movement);
for (j = 0; j < food_list.length; j++){
food_list[j].rotation.x += 0.01;
food_list[j].rotation.y += 0.02;
}
for(i=0;i<egg.length;i++){
console.log("egg1",egg.length);
egg[i].rotation.x += 0.01;
egg[i].rotation.y += 0.02;
eat_egg();
}
// ----mind movement --//
// ----Player Keyboard movement inputs-----//
if(keyboard[87]){ // W key
if (play.position.x<= 200 && play.position.x>= -200){
play.position.x -= Math.sin(play.rotation.y) * player.speed;
play.position.z -= -Math.cos(play.rotation.y) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.x += Math.sin(play.rotation.y) * player.speed;
}
if(play.position.z<= 200 && play.position.z>= -200){
play.position.x -= Math.sin(play.rotation.y) * player.speed;
play.position.z -= -Math.cos(play.rotation.y) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.z += -Math.cos(play.rotation.y) * player.speed;
}
eat_food();
}
if(keyboard[83]){ // S key
if (play.position.x<= 200 && play.position.x>= -200){
play.position.x += Math.sin(play.rotation.y) * player.speed;
play.position.z += -Math.cos(play.rotation.y) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.x -= Math.sin(play.rotation.y) * player.speed;
}
if(play.position.z<= 200 && play.position.z>= -200){
play.position.x += Math.sin(play.rotation.y) * player.speed;
play.position.z += -Math.cos(play.rotation.y) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.z -= -Math.cos(play.rotation.y) * player.speed;
}
eat_food();
}
if(keyboard[65]){ // A key
// Redirect motion by 90 degrees
if (play.position.x <= 200 && play.position.x >= -200){
play.position.x += Math.sin(play.rotation.y + Math.PI/2) * player.speed;
play.position.z += -Math.cos(play.rotation.y + Math.PI/2) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.x = Math.sin(play.rotation.y - Math.PI/2) * player.speed;
}
if(play.position.z <= 200 && play.position.z >= -200){
play.position.x += Math.sin(play.rotation.y + Math.PI/2) * player.speed;
play.position.z += -Math.cos(play.rotation.y + Math.PI/2) * player.speed;
}
else{
play.position.z = -Math.cos(play.rotation.y - Math.PI/2) * player.speed;
}
eat_food();
}
if(keyboard[68]){ // D key
if (play.position.x<= 200 && play.position.x>= -200){
play.position.x += Math.sin(play.rotation.y - Math.PI/2) * player.speed;
play.position.z += -Math.cos(play.rotation.y - Math.PI/2) * player.speed;
updatedPosX = play.position.x;
updatedPosZ = play.position.z;
}
else{
play.position.x = Math.sin(play.rotation.y + Math.PI/2) * player.speed;
}
if(play.position.z<= 200 && play.position.z>= -200){
play.position.x += Math.sin(play.rotation.y - Math.PI/2) * player.speed;
play.position.z += -Math.cos(play.rotation.y - Math.PI/2) * player.speed;
}
else{
play.position.z = -Math.cos(play.rotation.y + Math.PI/2) * player.speed;
}
eat_food();
}
// Keyboard turn inputs
if(keyboard[37]){ // left arrow key
cam.rotation.y -= player.turnSpeed;
play.rotation.y -= player.turnSpeed;
cam.position.z = play.position.z;
}
if(keyboard[39]){ // right arrow key
cam.rotation.y += player.turnSpeed;
play.rotation.y += player.turnSpeed;
cam.position.z = play.position.z;
}
cam.position.x = play.position.x ;
cam.position.z = play.position.z -5;
cam.position.y = 3.5;
renderer.render(scene, cam);
}
function keyDown(event){
keyboard[event.keyCode] = true;
}
function keyUp(event){
keyboard[event.keyCode] = false;
}
window.addEventListener('keydown', keyDown);
window.addEventListener('keyup', keyUp);
var ai;
function createMind(){
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( {color: "blue"} );
ai = new THREE.Mesh( geometry, material );
ai.position.set(0,2,160);
ai.scale.multiplyScalar(2);
scene.add( ai );
}
function splash(){
var s = document.getElementById("splash-inner")
var p = document.createElement("p");
document.s.appendChild(p);
}
this.newRun = function()
{
//splash();
render();
create_player();
camera();
ground();
base();
createMind();
movement();
food();
eat_food();
food_color();
place_structure();
hide_egg();
eat_egg();
player_speed();
place_trees();
for(i=-180;i<180;i++){
if(i%22===0){
tree_border(i);
}
}
AB.showRunHeader();
};
this.takeAction = function ( action )
{
//createMind();
var a = 5;
};
this.endRun = function()
{
};
this.getState = function()
{
return ( 5 );
};
this.getScore = function()
{
return ( 0 );
};
}