Merge branch 'main' of github.com:Kum1ta/PTME_Transcendence
This commit is contained in:
@ -3,10 +3,10 @@
|
|||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* Ball.js :+: :+: :+: */
|
/* Ball.js :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/20 17:02:47 by edbernar #+# #+# */
|
/* Created: 2024/08/20 17:02:47 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/08/22 14:28:34 by edbernar ### ########.fr */
|
/* Updated: 2024/08/22 16:21:59 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* Map.js :+: :+: :+: */
|
/* Map.js :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/20 14:52:55 by hubourge #+# #+# */
|
/* Created: 2024/08/20 14:52:55 by hubourge #+# #+# */
|
||||||
/* Updated: 2024/08/22 14:32:54 by edbernar ### ########.fr */
|
/* Updated: 2024/08/22 18:59:54 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -55,8 +55,6 @@ class Map
|
|||||||
scene.add(this.#createPlanes(7.5, length, (Math.PI / 2), "planeTop", false, '/textures/pastel.jpg'));
|
scene.add(this.#createPlanes(7.5, length, (Math.PI / 2), "planeTop", false, '/textures/pastel.jpg'));
|
||||||
scene.add(this.#createWall(-3.5, 0.4, -length/2, "wallLeft"));
|
scene.add(this.#createWall(-3.5, 0.4, -length/2, "wallLeft"));
|
||||||
scene.add(this.#createWall(3.5, 0.4, -length/2, "wallRight"));
|
scene.add(this.#createWall(3.5, 0.4, -length/2, "wallRight"));
|
||||||
scene.add(this.#createWallObstacle(1, 1, 1, false));
|
|
||||||
scene.add(this.#createWallObstacle(-1, 1, 1, true));
|
|
||||||
this.#createBanner(10, 1);
|
this.#createBanner(10, 1);
|
||||||
if (obstacles)
|
if (obstacles)
|
||||||
this.#generateObstacle();
|
this.#generateObstacle();
|
||||||
@ -127,11 +125,11 @@ class Map
|
|||||||
return (mesh);
|
return (mesh);
|
||||||
};
|
};
|
||||||
|
|
||||||
#createGravityChanger(x, y, z, name, onTop)
|
#createGravityChanger(x, y, z, name, typeName, onTop)
|
||||||
{
|
{
|
||||||
for (let i = 0; i < this.arrObject.length; i++)
|
for (let i = 0; i < this.arrObject.length; i++)
|
||||||
{
|
{
|
||||||
if (this.arrObject[i].name == name + "1")
|
if (this.arrObject[i].name == name)
|
||||||
throw Error("Name already exist.");
|
throw Error("Name already exist.");
|
||||||
}
|
}
|
||||||
const geometry0 = new THREE.CircleGeometry(0.2, 24);
|
const geometry0 = new THREE.CircleGeometry(0.2, 24);
|
||||||
@ -193,7 +191,7 @@ class Map
|
|||||||
group.rotateX(Math.PI);
|
group.rotateX(Math.PI);
|
||||||
group.translateY(-6.3);
|
group.translateY(-6.3);
|
||||||
}
|
}
|
||||||
this.arrObject.push({mesh: group, name: name, type: 'jumper'});
|
this.arrObject.push({mesh: group, name: name, type: typeName});
|
||||||
|
|
||||||
this.scene.add(group);
|
this.scene.add(group);
|
||||||
};
|
};
|
||||||
@ -262,7 +260,7 @@ class Map
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
#animationGravityChanger(group)
|
#animationGravityChanger(group, onTop)
|
||||||
{
|
{
|
||||||
const geometry1 = new THREE.TorusGeometry(1.5, 0.05, 12, 24);
|
const geometry1 = new THREE.TorusGeometry(1.5, 0.05, 12, 24);
|
||||||
const material1 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
const material1 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
||||||
@ -278,6 +276,9 @@ class Map
|
|||||||
this.scene.add(ring1);
|
this.scene.add(ring1);
|
||||||
|
|
||||||
interval = setInterval(() => {
|
interval = setInterval(() => {
|
||||||
|
if (onTop)
|
||||||
|
ring1.position.y -= speed;
|
||||||
|
else
|
||||||
ring1.position.y += speed;
|
ring1.position.y += speed;
|
||||||
ring1.material.opacity -= 0.02;
|
ring1.material.opacity -= 0.02;
|
||||||
speed *= 0.90;
|
speed *= 0.90;
|
||||||
@ -288,41 +289,37 @@ class Map
|
|||||||
|
|
||||||
#generateObstacle()
|
#generateObstacle()
|
||||||
{
|
{
|
||||||
this.#createGravityChanger(-1.5, 0.2, this.mapLength / 4, "gravityChangerGroupBottom1", 0);
|
const wallPos = [
|
||||||
|
{ x: 1, y: 0, z: 1, onTop: false},
|
||||||
|
{ x: 1, y: 0, z: 1, onTop: true},
|
||||||
|
{ x: -1, y: 0, z: 1, onTop: false},
|
||||||
|
{ x: -1, y: 0, z: 1, onTop: true}
|
||||||
|
];
|
||||||
|
for (let i = 0; i < wallPos.length; i++)
|
||||||
|
{
|
||||||
|
if (Math.random() < 0.5)
|
||||||
|
this.scene.add(this.#createWallObstacle(wallPos[i].x, wallPos[i].y, wallPos[i].z, wallPos[i].onTop));
|
||||||
|
}
|
||||||
|
|
||||||
// let randomNumber;
|
const jumperPos = [
|
||||||
// if (Math.random() < 0.5)
|
{ x: -1.5, y: 0.2, z: this.mapLength / 4, type: "gravityChanger", typeName: "jumperBottom", onTop: false},
|
||||||
// {
|
{ x: -1.5, y: 3.2, z: -this.mapLength / 4, type: "gravityChanger", typeName: "jumperTop", onTop: true},
|
||||||
// randomNumber = Math.random();
|
{ x: 1.5, y: 0.2, z: this.mapLength / 4, type: "gravityChanger", typeName: "jumperBottom", onTop: false},
|
||||||
// if (randomNumber < 0.5)
|
{ x: 1.5, y: 3.2, z: -this.mapLength / 4, type: "gravityChanger", typeName: "jumperTop", onTop: true},
|
||||||
// this.#createGravityChanger(-1.5, 0.2, this.mapLength / 4, "gravityChangerGroupBottom1", 0);
|
{ x: -1.5, y: 0.2, z: -this.mapLength / 4, type: "gravityChanger", typeName: "jumperBottom", onTop: false},
|
||||||
// else
|
{ x: -1.5, y: 3.2, z: this.mapLength / 4, type: "gravityChanger", typeName: "jumperTop", onTop: true},
|
||||||
// this.#createGravityChanger(1.5, 0.2, this.mapLength / 4, "gravityChangerGroupBottom2", 0);
|
{ x: 1.5, y: 0.2, z: -this.mapLength / 4, type: "gravityChanger", typeName: "jumperBottom", onTop: false},
|
||||||
// }
|
{ x: 1.5, y: 3.2, z: this.mapLength / 4, type: "gravityChanger", typeName: "jumperTop", onTop: true}
|
||||||
// if (Math.random() < 0.5)
|
];
|
||||||
// {
|
for (let i = 0; i < jumperPos.length; i++)
|
||||||
// randomNumber = Math.random();
|
{
|
||||||
// if (randomNumber < 0.5)
|
if (Math.random() < 0.5)
|
||||||
// this.#createGravityChanger(-1.5, 0.2, -this.mapLength / 4, "gravityChangerGroupBottom3", 0);
|
{
|
||||||
// else
|
this.#createGravityChanger(jumperPos[i].x, jumperPos[i].y, jumperPos[i].z, jumperPos[i].type + i, jumperPos[i].typeName, jumperPos[i].onTop);
|
||||||
// this.#createGravityChanger(1.5, 0.2, -this.mapLength / 4, "gravityChangerGroupBottom4", 0);
|
if (i % 2 == 0)
|
||||||
// }
|
i++;
|
||||||
// if (Math.random() < 0.5)
|
}
|
||||||
// {
|
}
|
||||||
// randomNumber = Math.random();
|
|
||||||
// if (randomNumber < 0.5)
|
|
||||||
// this.#createGravityChanger(-1.5, 3.2, this.mapLength / 4, "gravityChangerGroupTop1", 1);
|
|
||||||
// else
|
|
||||||
// this.#createGravityChanger(1.5, 3.2, this.mapLength / 4, "gravityChangerGroupTop2", 1);
|
|
||||||
// }
|
|
||||||
// if (Math.random() < 0.5)
|
|
||||||
// {
|
|
||||||
// randomNumber = Math.random();
|
|
||||||
// if (randomNumber < 0.5)
|
|
||||||
// this.#createGravityChanger(-1.5, 3.2, -this.mapLength / 4, "gravityChangerGroupTop3", 1);
|
|
||||||
// else
|
|
||||||
// this.#createGravityChanger(1.5, 3.2, -this.mapLength / 4, "gravityChangerGroupTop4", 1);
|
|
||||||
// }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
update(ball)
|
update(ball)
|
||||||
@ -331,20 +328,14 @@ class Map
|
|||||||
{
|
{
|
||||||
if (this.arrObject[i].name == "wallLeft")
|
if (this.arrObject[i].name == "wallLeft")
|
||||||
{
|
{
|
||||||
if (ball.object.position.z < 0.1 && ball.object.position.z > -this.mapLength + 1)
|
// Move the wall with the ball position
|
||||||
|
if (ball.object.position.z < this.mapLength / 2 - 0.35 && ball.object.position.z > -this.mapLength / 2 + 0.35)
|
||||||
this.arrObject[i].mesh.position.z = ball.object.position.z;
|
this.arrObject[i].mesh.position.z = ball.object.position.z;
|
||||||
this.arrObject[i].mesh.position.y = ball.object.position.y;
|
if (ball.object.position.y > 0.4 + 0.1 && ball.object.position.y < 3.2)
|
||||||
}
|
this.arrObject[i].mesh.position.y = ball.object.position.y - 0.1;
|
||||||
if (this.arrObject[i].name == "wallRight")
|
|
||||||
{
|
// Change the opacity of the wall
|
||||||
if (ball.object.position.z < 0.1 && ball.object.position.z > -this.mapLength + 1)
|
|
||||||
this.arrObject[i].mesh.position.z = ball.object.position.z;
|
|
||||||
this.arrObject[i].mesh.position.y = ball.object.position.y;
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "wallLeft")
|
|
||||||
{
|
|
||||||
let diff = ball.object.position.x - this.arrObject[i].mesh.position.x - 0.1;
|
let diff = ball.object.position.x - this.arrObject[i].mesh.position.x - 0.1;
|
||||||
|
|
||||||
if (diff > 2)
|
if (diff > 2)
|
||||||
this.arrObject[i].mesh.material.opacity = 0;
|
this.arrObject[i].mesh.material.opacity = 0;
|
||||||
else
|
else
|
||||||
@ -352,48 +343,34 @@ class Map
|
|||||||
}
|
}
|
||||||
if (this.arrObject[i].name == "wallRight")
|
if (this.arrObject[i].name == "wallRight")
|
||||||
{
|
{
|
||||||
let diff = this.arrObject[i].mesh.position.x - ball.object.position.x - 0.1;
|
// Move the wall with the ball position
|
||||||
|
if (ball.object.position.z < this.mapLength / 2 - 0.35 && ball.object.position.z > -this.mapLength / 2 + 0.35)
|
||||||
|
this.arrObject[i].mesh.position.z = ball.object.position.z;
|
||||||
|
if (ball.object.position.y > 0.4 + 0.1 && ball.object.position.y < 3.2)
|
||||||
|
this.arrObject[i].mesh.position.y = ball.object.position.y - 0.1;
|
||||||
|
|
||||||
|
// Change the opacity of the wall
|
||||||
|
let diff = this.arrObject[i].mesh.position.x - ball.object.position.x - 0.1;
|
||||||
if (diff > 2)
|
if (diff > 2)
|
||||||
this.arrObject[i].mesh.material.opacity = 0;
|
this.arrObject[i].mesh.material.opacity = 0;
|
||||||
else
|
else
|
||||||
this.arrObject[i].mesh.material.opacity = 1 - (diff / 2);
|
this.arrObject[i].mesh.material.opacity = 1 - (diff / 2);
|
||||||
}
|
}
|
||||||
if (this.arrObject[i].type == 'jumper')
|
if (this.arrObject[i].type == 'jumperBottom')
|
||||||
{
|
{
|
||||||
const cylinder = this.arrObject[i].mesh.children[5];
|
const cylinder = this.arrObject[i].mesh.children[5];
|
||||||
const distance = ball.object.position.distanceTo(cylinder.position);
|
const distance = ball.object.position.distanceTo(cylinder.position);
|
||||||
const speed = 0.1;
|
const speed = 0.1;
|
||||||
|
|
||||||
|
// Detect if the ball is on the jumper
|
||||||
if (distance < 0.25 && this.ballIsOnJumper.can)
|
if (distance < 0.25 && this.ballIsOnJumper.can)
|
||||||
{
|
{
|
||||||
this.ballIsOnJumper.can = false;
|
this.ballIsOnJumper.can = false;
|
||||||
ball.changeGravity(this.ballIsOnJumper);
|
ball.changeGravity(this.ballIsOnJumper);
|
||||||
this.#animationGravityChanger(this.arrObject[i].mesh);
|
this.#animationGravityChanger(this.arrObject[i].mesh, false);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupBottom1")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
// Gravity changer animation
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 0.25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupBottom2")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 0.25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupBottom3")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
||||||
{
|
{
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
||||||
@ -401,37 +378,21 @@ class Map
|
|||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 0.25;
|
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupBottom4")
|
if (this.arrObject[i].type == 'jumperTop')
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 0.25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupTop1")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
{
|
||||||
|
const cylinder = this.arrObject[i].mesh.children[5];
|
||||||
|
const distance = ball.object.position.distanceTo(cylinder.position);
|
||||||
|
const speed = 0.1;
|
||||||
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
// Detect if the ball is on the jumper
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
if (distance < 0.4 && this.ballIsOnJumper.can)
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 3.25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupTop2")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
{
|
||||||
|
this.ballIsOnJumper.can = false;
|
||||||
|
ball.changeGravity(this.ballIsOnJumper);
|
||||||
|
this.#animationGravityChanger(this.arrObject[i].mesh, true);
|
||||||
|
}
|
||||||
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
// Gravity changer animation
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 3.25;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupTop3")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
||||||
{
|
{
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
||||||
@ -439,15 +400,6 @@ class Map
|
|||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 3.25;
|
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 3.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.arrObject[i].name == "gravityChangerGroupTop4")
|
|
||||||
{
|
|
||||||
for (let j = 2; j < this.arrObject[i].mesh.children.length - 1; j++)
|
|
||||||
{
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.x = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.PI / 2;
|
|
||||||
this.arrObject[i].mesh.children[j].rotation.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.1 + Math.cos(Date.now() * 0.001) * 0.1;;
|
|
||||||
this.arrObject[i].mesh.children[j].position.y = Math.sin(Date.now() * 0.001 + (j - 2) * 5) * 0.03 + ( 0.25 * (j - 2) / 2) + 3.25;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* Player.js :+: :+: :+: */
|
/* Player.js :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/18 00:30:31 by edbernar #+# #+# */
|
/* Created: 2024/08/18 00:30:31 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/08/22 00:52:14 by edbernar ### ########.fr */
|
/* Updated: 2024/08/22 17:06:28 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -50,11 +50,13 @@ class Player
|
|||||||
pressedButton = [];
|
pressedButton = [];
|
||||||
object = null;
|
object = null;
|
||||||
camera = null;
|
camera = null;
|
||||||
speed = 0.1;
|
speed = 4;
|
||||||
cameraFixed = false;
|
cameraFixed = false;
|
||||||
interval = null;
|
interval = null;
|
||||||
isOnPointAnim = false;
|
isOnPointAnim = false;
|
||||||
limits = {};
|
limits = {};
|
||||||
|
previousTime = Date.now();
|
||||||
|
deltaTime = 1;
|
||||||
|
|
||||||
constructor (object, map)
|
constructor (object, map)
|
||||||
{
|
{
|
||||||
@ -219,6 +221,10 @@ class Player
|
|||||||
|
|
||||||
update()
|
update()
|
||||||
{
|
{
|
||||||
|
const currentTime = Date.now();
|
||||||
|
this.deltaTime = (currentTime - this.previousTime) / 1000;
|
||||||
|
this.previousTime = currentTime;
|
||||||
|
|
||||||
let i;
|
let i;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -229,9 +235,9 @@ class Player
|
|||||||
if (this.interval)
|
if (this.interval)
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
this.interval = setInterval(() => {
|
this.interval = setInterval(() => {
|
||||||
this.object.position.y += this.speed;
|
this.object.position.y += this.speed / 40;
|
||||||
if (!this.cameraFixed && !this.isOnPointAnim)
|
if (!this.cameraFixed && !this.isOnPointAnim)
|
||||||
this.camera.position.y += (this.speed / 2);
|
this.camera.position.y += (this.speed / 80);
|
||||||
if (this.object.position.y >= this.limits.up)
|
if (this.object.position.y >= this.limits.up)
|
||||||
{
|
{
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
@ -244,9 +250,9 @@ class Player
|
|||||||
if (this.interval)
|
if (this.interval)
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
this.interval = setInterval(() => {
|
this.interval = setInterval(() => {
|
||||||
this.object.position.y -= this.speed;
|
this.object.position.y -= this.speed / 40;
|
||||||
if (!this.cameraFixed && !this.isOnPointAnim)
|
if (!this.cameraFixed && !this.isOnPointAnim)
|
||||||
this.camera.position.y -= (this.speed / 2);
|
this.camera.position.y -= (this.speed / 80);
|
||||||
if (this.object.position.y <= this.limits.down)
|
if (this.object.position.y <= this.limits.down)
|
||||||
{
|
{
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
@ -257,15 +263,15 @@ class Player
|
|||||||
}
|
}
|
||||||
if (this.pressedButton[i] == 'd' && this.object.position.x < this.limits.right)
|
if (this.pressedButton[i] == 'd' && this.object.position.x < this.limits.right)
|
||||||
{
|
{
|
||||||
this.object.position.x += this.speed;
|
this.object.position.x += this.speed * this.deltaTime;
|
||||||
if (!this.cameraFixed && !this.isOnPointAnim)
|
if (!this.cameraFixed && !this.isOnPointAnim)
|
||||||
this.camera.position.x += this.speed;
|
this.camera.position.x += this.speed * this.deltaTime;
|
||||||
}
|
}
|
||||||
if (this.pressedButton[i] == 'a' && this.object.position.x > this.limits.left)
|
if (this.pressedButton[i] == 'a' && this.object.position.x > this.limits.left)
|
||||||
{
|
{
|
||||||
this.object.position.x -= this.speed;
|
this.object.position.x -= this.speed * this.deltaTime;
|
||||||
if (!this.cameraFixed && !this.isOnPointAnim)
|
if (!this.cameraFixed && !this.isOnPointAnim)
|
||||||
this.camera.position.x -= this.speed;
|
this.camera.position.x -= this.speed * this.deltaTime;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* main.js :+: :+: :+: */
|
/* main.js :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/18 00:53:53 by edbernar #+# #+# */
|
/* Created: 2024/08/18 00:53:53 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/08/22 10:48:29 by edbernar ### ########.fr */
|
/* Updated: 2024/08/22 17:11:54 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -16,6 +16,7 @@ import { Map } from './class/Map'
|
|||||||
import { Ball } from './class/Ball'
|
import { Ball } from './class/Ball'
|
||||||
import { Opponent } from './class/Opponent'
|
import { Opponent } from './class/Opponent'
|
||||||
import { OrbitControls } from 'three/examples/jsm/Addons.js';
|
import { OrbitControls } from 'three/examples/jsm/Addons.js';
|
||||||
|
import Stats from 'stats.js';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Controls :
|
Controls :
|
||||||
@ -38,6 +39,11 @@ Controls :
|
|||||||
|
|
||||||
let debug = false;
|
let debug = false;
|
||||||
|
|
||||||
|
// ------------------- Stats -------------------- //
|
||||||
|
const stats = new Stats();
|
||||||
|
stats.showPanel(0); // 0: fps, 1: ms, 2: mémoire
|
||||||
|
document.body.appendChild(stats.dom);
|
||||||
|
|
||||||
function createBarPlayer(color)
|
function createBarPlayer(color)
|
||||||
{
|
{
|
||||||
const geometry = new THREE.BoxGeometry(1, 0.1, 0.1);
|
const geometry = new THREE.BoxGeometry(1, 0.1, 0.1);
|
||||||
@ -48,8 +54,17 @@ function createBarPlayer(color)
|
|||||||
return (mesh);
|
return (mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let previousTime = Date.now();
|
||||||
function loop()
|
function loop()
|
||||||
{
|
{
|
||||||
|
stats.begin();
|
||||||
|
// ===== FPS locker ===== //
|
||||||
|
const currentTime = Date.now();
|
||||||
|
if (currentTime - previousTime < 1000 / 60)
|
||||||
|
return ;
|
||||||
|
previousTime = currentTime;
|
||||||
|
// ====================== //
|
||||||
|
|
||||||
player.update();
|
player.update();
|
||||||
map.update(ball);
|
map.update(ball);
|
||||||
if (debug)
|
if (debug)
|
||||||
@ -60,6 +75,7 @@ function loop()
|
|||||||
else
|
else
|
||||||
renderer.render(scene, player.camera);
|
renderer.render(scene, player.camera);
|
||||||
|
|
||||||
|
stats.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
const scene = new THREE.Scene();
|
const scene = new THREE.Scene();
|
||||||
|
Reference in New Issue
Block a user