update
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/10/01 13:16:39 by edbernar #+# #+# #
|
# Created: 2024/10/01 13:16:39 by edbernar #+# #+# #
|
||||||
# Updated: 2024/10/01 14:00:29 by edbernar ### ########.fr #
|
# Updated: 2024/10/01 17:49:33 by edbernar ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -18,16 +18,22 @@
|
|||||||
# - isFull : true/false
|
# - isFull : true/false
|
||||||
# - started : true/false
|
# - started : true/false
|
||||||
# - code : code of the tournament
|
# - code : code of the tournament
|
||||||
|
#
|
||||||
# 1 : someoneJoin : tell the client someone join the tournament (considering clients will place selon the order of the join)
|
# 1 : someoneJoin : tell the client someone join the tournament (considering clients will place selon the order of the join)
|
||||||
# - id : id of the player
|
# - id : id of the player
|
||||||
# - name : name of the player
|
# - username : name of the player
|
||||||
# - pfp : pfp of the player
|
# - pfp : pfp of the player
|
||||||
|
#
|
||||||
# 2 : someoneLeave : tell the client someone leave the tournament (if game not started, players will be replaced in the order of the join)
|
# 2 : someoneLeave : tell the client someone leave the tournament (if game not started, players will be replaced in the order of the join)
|
||||||
# - id : id of the player who leave
|
# - id : id of the player who leave
|
||||||
|
|
||||||
|
|
||||||
#client actions (actions sent by the client) :
|
#client actions (actions sent by the client) :
|
||||||
# 0 : start : start a tournament. if code == "", create a new tournament, else join the tournament with the code
|
# 0 : start : start a tournament. if code == "", create a new tournament, else join the tournament with the code
|
||||||
# - code : code of the tournament
|
# - code : code of the tournament
|
||||||
# 1 : leave : leave the tournament
|
# 1 : leave : leave the tournament
|
||||||
|
#
|
||||||
|
# 2 : message tournament : send a message to the tournament chat
|
||||||
|
# - message : message to send
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ urlpatterns = [
|
|||||||
path("multiOnlineGamePage", views.multiOnlineGamePage, name='multiOnlineGamePage'),
|
path("multiOnlineGamePage", views.multiOnlineGamePage, name='multiOnlineGamePage'),
|
||||||
path("waitingGamePage", views.waitingGamePage, name='waitingGamePage'),
|
path("waitingGamePage", views.waitingGamePage, name='waitingGamePage'),
|
||||||
path("profilPage", views.profilPage, name='profilPage'),
|
path("profilPage", views.profilPage, name='profilPage'),
|
||||||
path("game", views.game, name='game'),
|
# path("game", views.game, name='game'),
|
||||||
path("wait_game", views.game, name='wait_game'),
|
path("wait_game", views.game, name='wait_game'),
|
||||||
path("login42", views.login42, name='login42'),
|
path("login42", views.login42, name='login42'),
|
||||||
path("logout", views.logout, name='logout'),
|
path("logout", views.logout, name='logout'),
|
||||||
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 179 KiB |
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
@ -6,7 +6,7 @@
|
|||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/29 22:36:43 by edbernar #+# #+# */
|
/* Created: 2024/09/29 22:36:43 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/09/30 23:08:59 by edbernar ### ########.fr */
|
/* Updated: 2024/10/01 21:58:57 by edbernar ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -28,6 +28,7 @@ const url_files = {
|
|||||||
catchVideoPub: '/static/video/multiOnlineGamePage/catch.mp4',
|
catchVideoPub: '/static/video/multiOnlineGamePage/catch.mp4',
|
||||||
fortniteVideoPub: '/static/video/multiOnlineGamePage/fortnite.mp4',
|
fortniteVideoPub: '/static/video/multiOnlineGamePage/fortnite.mp4',
|
||||||
|
|
||||||
|
wallTexture: '/static/img/multiOnlineGamePage/wallTexture.jpg',
|
||||||
planeTexture: '/static/img/multiOnlineGamePage/pastel.jpg',
|
planeTexture: '/static/img/multiOnlineGamePage/pastel.jpg',
|
||||||
skinOneTexture: '/static/img/skin/1.jpg',
|
skinOneTexture: '/static/img/skin/1.jpg',
|
||||||
skinTwoTexture: '/static/img/skin/2.jpg',
|
skinTwoTexture: '/static/img/skin/2.jpg',
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/13 13:59:46 by edbernar #+# #+# */
|
/* Created: 2024/09/13 13:59:46 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/09/30 23:53:04 by edbernar ### ########.fr */
|
/* Updated: 2024/10/01 19:55:19 by edbernar ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -64,8 +64,8 @@ class barSelecter
|
|||||||
availableSkins[6].texture = files.skinThreeTexture;
|
availableSkins[6].texture = files.skinThreeTexture;
|
||||||
availableSkins[7].texture = files.skinFourTexture;
|
availableSkins[7].texture = files.skinFourTexture;
|
||||||
div.addEventListener('click', () => {
|
div.addEventListener('click', () => {
|
||||||
const popup = document.getElementById('popup-background');
|
const popup = document.getElementById('popup-skin-selector');
|
||||||
const skins = document.getElementsByClassName('color-box');
|
const skins = document.getElementsByClassName('color-box-skin');
|
||||||
|
|
||||||
popup.style.display = 'flex';
|
popup.style.display = 'flex';
|
||||||
for (let i = 0; i < skins.length; i++)
|
for (let i = 0; i < skins.length; i++)
|
||||||
@ -80,20 +80,20 @@ class barSelecter
|
|||||||
}
|
}
|
||||||
popup.removeEventListener('click', this.hideSkinSelector);
|
popup.removeEventListener('click', this.hideSkinSelector);
|
||||||
popup.addEventListener('click', this.hideSkinSelector);
|
popup.addEventListener('click', this.hideSkinSelector);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
hideSkinSelector(event)
|
hideSkinSelector(event)
|
||||||
{
|
{
|
||||||
const popup = document.getElementById('popup-background');
|
const popup = document.getElementById('popup-skin-selector');
|
||||||
|
|
||||||
if (event.target.getAttribute('class') == 'popup-background')
|
if (event.target.getAttribute('class') == 'popup-skin-selector')
|
||||||
popup.style.display = 'none';
|
popup.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSkin (event)
|
changeSkin (event)
|
||||||
{
|
{
|
||||||
const popup = document.getElementById('popup-background');
|
const popup = document.getElementById('popup-skin-selector');
|
||||||
|
|
||||||
const id = event.target.getAttribute('skinId');
|
const id = event.target.getAttribute('skinId');
|
||||||
popup.style.display = 'none';
|
popup.style.display = 'none';
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/22 17:08:46 by madegryc #+# #+# */
|
/* Created: 2024/08/22 17:08:46 by madegryc #+# #+# */
|
||||||
/* Updated: 2024/10/01 15:12:03 by edbernar ### ########.fr */
|
/* Updated: 2024/10/01 21:32:33 by edbernar ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -68,6 +68,12 @@ class LobbyPage
|
|||||||
{
|
{
|
||||||
document.body.children[i].style.animation = 'animShowMenuDiv 0.5s';
|
document.body.children[i].style.animation = 'animShowMenuDiv 0.5s';
|
||||||
}
|
}
|
||||||
|
setTimeout(() => {
|
||||||
|
for (let i = 0; i < document.body.children.length; i++)
|
||||||
|
{
|
||||||
|
document.body.children[i].style.animation = null;
|
||||||
|
}
|
||||||
|
}, 600);
|
||||||
startButton.addEventListener('click', startMode);
|
startButton.addEventListener('click', startMode);
|
||||||
methButton.addEventListener('click', goBackHome);
|
methButton.addEventListener('click', goBackHome);
|
||||||
document.getElementsByClassName('menuSelected')[gameMode].style.display = 'flex';
|
document.getElementsByClassName('menuSelected')[gameMode].style.display = 'flex';
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* Map.js :+: :+: :+: */
|
/* Map.js :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/20 14:52:55 by hubourge #+# #+# */
|
/* Created: 2024/08/20 14:52:55 by hubourge #+# #+# */
|
||||||
/* Updated: 2024/09/30 18:13:05 by hubourge ### ########.fr */
|
/* Updated: 2024/10/01 22:10:40 by edbernar ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -88,7 +88,6 @@ class Map
|
|||||||
loader = null;
|
loader = null;
|
||||||
if (texturePlane)
|
if (texturePlane)
|
||||||
texturePlane.dispose();
|
texturePlane.dispose();
|
||||||
this.#clearScoreboard();
|
|
||||||
this.arrObject.forEach(elem => {
|
this.arrObject.forEach(elem => {
|
||||||
if (elem.mesh instanceof THREE.Group)
|
if (elem.mesh instanceof THREE.Group)
|
||||||
{
|
{
|
||||||
@ -267,7 +266,7 @@ class Map
|
|||||||
}
|
}
|
||||||
|
|
||||||
geometry1 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
geometry1 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
||||||
material1 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
material1 = new THREE.MeshPhysicalMaterial({color: 0x6290C8});
|
||||||
ring1 = new THREE.Mesh(geometry1, material1);
|
ring1 = new THREE.Mesh(geometry1, material1);
|
||||||
ring1.rotateX(-Math.PI / 2);
|
ring1.rotateX(-Math.PI / 2);
|
||||||
ring1.position.set(0, 0, 0);
|
ring1.position.set(0, 0, 0);
|
||||||
@ -276,7 +275,7 @@ class Map
|
|||||||
material1.opacity = 0.75;
|
material1.opacity = 0.75;
|
||||||
|
|
||||||
geometry2 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
geometry2 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
||||||
material2 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
material2 = new THREE.MeshPhysicalMaterial({color: 0x829CBC});
|
||||||
ring2 = new THREE.Mesh(geometry2, material2);
|
ring2 = new THREE.Mesh(geometry2, material2);
|
||||||
ring2.rotateX(-Math.PI / 2);
|
ring2.rotateX(-Math.PI / 2);
|
||||||
ring2.position.set(0, 0 + 0.1, 0);
|
ring2.position.set(0, 0 + 0.1, 0);
|
||||||
@ -285,7 +284,7 @@ class Map
|
|||||||
material2.opacity = 0.65;
|
material2.opacity = 0.65;
|
||||||
|
|
||||||
geometry3 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
geometry3 = new THREE.TorusGeometry(1, 0.1, 12, 24);
|
||||||
material3 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
material3 = new THREE.MeshPhysicalMaterial({color: 0x376996});
|
||||||
ring3 = new THREE.Mesh(geometry3, material3);
|
ring3 = new THREE.Mesh(geometry3, material3);
|
||||||
ring3.rotateX(-Math.PI / 2);
|
ring3.rotateX(-Math.PI / 2);
|
||||||
ring3.position.set(0, 0 + 0.2, 0);
|
ring3.position.set(0, 0 + 0.2, 0);
|
||||||
@ -294,23 +293,23 @@ class Map
|
|||||||
material3.opacity = 0.35;
|
material3.opacity = 0.35;
|
||||||
|
|
||||||
geometry4 = new THREE.CircleGeometry(0.2, 24);
|
geometry4 = new THREE.CircleGeometry(0.2, 24);
|
||||||
material4 = new THREE.MeshPhysicalMaterial({color: 0xaaffaa});
|
material4 = new THREE.MeshPhysicalMaterial({color: 0x376996});
|
||||||
circle1 = new THREE.Mesh(geometry4, material4);
|
circle1 = new THREE.Mesh(geometry4, material4);
|
||||||
circle1.rotateX(-Math.PI / 2);
|
circle1.rotateX(-Math.PI / 2);
|
||||||
circle1.position.set(0, 0 - 0.048, 0);
|
circle1.position.set(0, 0 - 0.048, 0);
|
||||||
|
|
||||||
geometry5 = new THREE.CircleGeometry(0.24, 24);
|
geometry5 = new THREE.CircleGeometry(0.24, 24);
|
||||||
material5 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
material5 = new THREE.MeshPhysicalMaterial({color: 0x6290C8});
|
||||||
circle2 = new THREE.Mesh(geometry5, material5);
|
circle2 = new THREE.Mesh(geometry5, material5);
|
||||||
circle2.rotateX(-Math.PI / 2);
|
circle2.rotateX(-Math.PI / 2);
|
||||||
circle2.position.set(0, 0 - 0.049, 0);
|
circle2.position.set(0, 0 - 0.049, 0);
|
||||||
|
|
||||||
geometry6 = new THREE.CylinderGeometry(0.15, 0.15, 0.35);
|
// geometry6 = new THREE.CylinderGeometry(0.15, 0.15, 0.35);
|
||||||
material6 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
// material6 = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
||||||
collider = new THREE.Mesh(geometry6, material6);
|
// collider = new THREE.Mesh(geometry6, material6);
|
||||||
collider.position.set(0, 0 + 0.1, 0);
|
// collider.position.set(0, 0 + 0.1, 0);
|
||||||
material6.transparent = true;
|
// material6.transparent = true;
|
||||||
material6.opacity = 0.1;
|
// material6.opacity = 0.1;
|
||||||
|
|
||||||
groupJumper = new THREE.Group();
|
groupJumper = new THREE.Group();
|
||||||
groupJumper.add(ring1);
|
groupJumper.add(ring1);
|
||||||
@ -318,7 +317,7 @@ class Map
|
|||||||
groupJumper.add(ring3);
|
groupJumper.add(ring3);
|
||||||
groupJumper.add(circle1);
|
groupJumper.add(circle1);
|
||||||
groupJumper.add(circle2);
|
groupJumper.add(circle2);
|
||||||
groupJumper.add(collider);
|
// groupJumper.add(collider);
|
||||||
|
|
||||||
// Set groupJumper position groud / top
|
// Set groupJumper position groud / top
|
||||||
for (let i = 0; i < groupJumper.children.length && onTop; i++)
|
for (let i = 0; i < groupJumper.children.length && onTop; i++)
|
||||||
@ -353,7 +352,10 @@ class Map
|
|||||||
let meshWallObs = null;
|
let meshWallObs = null;
|
||||||
|
|
||||||
geometryWallObs = new THREE.BoxGeometry(size, 0.5, 0.1);
|
geometryWallObs = new THREE.BoxGeometry(size, 0.5, 0.1);
|
||||||
materialWallObs = new THREE.MeshPhysicalMaterial({color: 0xaaaafe});
|
|
||||||
|
// materialWallObs = new THREE.MeshPhysicalMaterial({ map: files.wallTexture });
|
||||||
|
textureLoaderPlane = new THREE.TextureLoader();
|
||||||
|
materialWallObs = new THREE.MeshPhysicalMaterial({ map: textureLoaderPlane.load(files.wallTexture) });
|
||||||
meshWallObs = new THREE.Mesh(geometryWallObs, materialWallObs);
|
meshWallObs = new THREE.Mesh(geometryWallObs, materialWallObs);
|
||||||
if (onTop)
|
if (onTop)
|
||||||
meshWallObs.position.set(x, this.playerLimits.up - 0.1, y);
|
meshWallObs.position.set(x, this.playerLimits.up - 0.1, y);
|
||||||
@ -364,8 +366,8 @@ class Map
|
|||||||
|
|
||||||
putScoreboard(color)
|
putScoreboard(color)
|
||||||
{
|
{
|
||||||
this.#clearScoreboard();
|
this.#putPlayerProfile("", "", color);
|
||||||
// this.#putNameBoard("Player", "Opponent", 0xCCCCFF);
|
|
||||||
let materialScoreboard = null;
|
let materialScoreboard = null;
|
||||||
let geometryScoreboard1 = null;
|
let geometryScoreboard1 = null;
|
||||||
let meshScoreboard1 = null;
|
let meshScoreboard1 = null;
|
||||||
@ -379,7 +381,7 @@ class Map
|
|||||||
let meshText2 = null;
|
let meshText2 = null;
|
||||||
|
|
||||||
let height = 1.8;
|
let height = 1.8;
|
||||||
let width = 6;
|
let width = 5;
|
||||||
let depth = 0.2;
|
let depth = 0.2;
|
||||||
|
|
||||||
materialScoreboard = new THREE.MeshPhysicalMaterial({color: color});
|
materialScoreboard = new THREE.MeshPhysicalMaterial({color: color});
|
||||||
@ -403,10 +405,10 @@ class Map
|
|||||||
|
|
||||||
meshScoreboard1.rotation.y = Math.PI;
|
meshScoreboard1.rotation.y = Math.PI;
|
||||||
meshText1.rotation.y = Math.PI;
|
meshText1.rotation.y = Math.PI;
|
||||||
meshScoreboard1.position.set(0, 1.60, 9.5);
|
meshScoreboard1.position.set(0, 1.60, 8.5);
|
||||||
meshScoreboard2.position.set(0, 1.60, -9.5);
|
meshScoreboard2.position.set(0, 1.60, -8.5);
|
||||||
meshText1.position.set(0, 1.60, 9.5 - depth / 2 - 0.025);
|
meshText1.position.set(0, 1.60, 8.5 - depth / 2 - 0.01);
|
||||||
meshText2.position.set(0, 1.60, - 9.5 + depth / 2 + 0.025);
|
meshText2.position.set(0, 1.60, - 8.5 + depth / 2 + 0.01);
|
||||||
|
|
||||||
scene.add(meshScoreboard1);
|
scene.add(meshScoreboard1);
|
||||||
scene.add(meshScoreboard2);
|
scene.add(meshScoreboard2);
|
||||||
@ -418,27 +420,7 @@ class Map
|
|||||||
this.arrObject.push({mesh: meshText2, name: "", type: "scoreboard"});
|
this.arrObject.push({mesh: meshText2, name: "", type: "scoreboard"});
|
||||||
};
|
};
|
||||||
|
|
||||||
#clearScoreboard()
|
#putPlayerProfile(nameLeft, nameRight, color)
|
||||||
{
|
|
||||||
for (let i = 0; i < this.arrObject.length; i++)
|
|
||||||
{
|
|
||||||
if (this.arrObject[i].type == "scoreboard")
|
|
||||||
{
|
|
||||||
if (this.arrObject[i].mesh.geometry)
|
|
||||||
this.arrObject[i].mesh.geometry.dispose();
|
|
||||||
if (this.arrObject[i].mesh.material)
|
|
||||||
this.arrObject[i].mesh.material.dispose();
|
|
||||||
scene.remove(this.arrObject[i].mesh);
|
|
||||||
this.arrObject[i].mesh.geometry = null;
|
|
||||||
this.arrObject[i].mesh.material = null;
|
|
||||||
this.arrObject[i].mesh = null;
|
|
||||||
this.arrObject.splice(i, 1);
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#putNameBoard(nameLeft, nameRight, color)
|
|
||||||
{
|
{
|
||||||
let materialBoardLeftFront;
|
let materialBoardLeftFront;
|
||||||
let geometryBoardLeftFront;
|
let geometryBoardLeftFront;
|
||||||
@ -456,9 +438,10 @@ class Map
|
|||||||
let geometryBoardRightBack;
|
let geometryBoardRightBack;
|
||||||
let meshBoardRightBack;
|
let meshBoardRightBack;
|
||||||
|
|
||||||
let height = 0.5;
|
let height = 1.8;
|
||||||
let width = 2.95;
|
let width = 1.5;
|
||||||
let depth = 0.2;
|
let depth = 0.2;
|
||||||
|
let spacing = 2.5;
|
||||||
|
|
||||||
materialBoardLeftFront = new THREE.MeshPhysicalMaterial({color: color});
|
materialBoardLeftFront = new THREE.MeshPhysicalMaterial({color: color});
|
||||||
geometryBoardLeftFront = new THREE.BoxGeometry(width, height, depth);
|
geometryBoardLeftFront = new THREE.BoxGeometry(width, height, depth);
|
||||||
@ -476,89 +459,89 @@ class Map
|
|||||||
geometryBoardRightBack = new THREE.BoxGeometry(width, height, depth);
|
geometryBoardRightBack = new THREE.BoxGeometry(width, height, depth);
|
||||||
meshBoardRightBack = new THREE.Mesh(geometryBoardRightBack, materialBoardRightBack);
|
meshBoardRightBack = new THREE.Mesh(geometryBoardRightBack, materialBoardRightBack);
|
||||||
|
|
||||||
meshBoardLeftFront.position.set(-width / 2 - (3 - width), 2.7, -9.5);
|
meshBoardLeftFront.position.set(-spacing - width / 2 - 0.3, 1.6, -8.5);
|
||||||
meshBoardRightFront.position.set(width / 2 + (3 - width), 2.7, -9.5);
|
meshBoardRightFront.position.set(spacing + width / 2 + 0.3, 1.6, -8.5);
|
||||||
|
|
||||||
meshBoardLeftBack.rotation.y = Math.PI;
|
meshBoardLeftBack.rotation.y = Math.PI;
|
||||||
meshBoardLeftBack.position.set(-width / 2 - (3 - width), 2.7, 9.5);
|
meshBoardLeftBack.position.set(-spacing - width / 2 - 0.3, 1.6, 8.5);
|
||||||
meshBoardRightBack.rotation.y = Math.PI;
|
meshBoardRightBack.rotation.y = Math.PI;
|
||||||
meshBoardRightBack.position.set(width / 2 + (3 - width), 2.7, 9.5);
|
meshBoardRightBack.position.set(spacing + width / 2 + 0.3, 1.6, 8.5);
|
||||||
|
|
||||||
scene.add(meshBoardLeftFront);
|
scene.add(meshBoardLeftFront);
|
||||||
scene.add(meshBoardRightFront);
|
scene.add(meshBoardRightFront);
|
||||||
scene.add(meshBoardLeftBack);
|
scene.add(meshBoardLeftBack);
|
||||||
scene.add(meshBoardRightBack);
|
scene.add(meshBoardRightBack);
|
||||||
this.arrObject.push({mesh: meshBoardLeftFront, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshBoardLeftFront, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshBoardRightFront, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshBoardRightFront, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshBoardLeftBack, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshBoardLeftBack, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshBoardRightBack, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshBoardRightBack, name: "", type: "profileBoard"});
|
||||||
|
|
||||||
let canvasTextNameLeft = null;
|
let canvasProfileNameLeft = null;
|
||||||
let contextTextNameLeft = null;
|
let contextProfileNameLeft = null;
|
||||||
let textureTextNameLeft = null;
|
let textureProfileNameLeft = null;
|
||||||
|
|
||||||
let canvasTextNameRight = null;
|
let canvasProfileNameRight = null;
|
||||||
let contextTextNameRight = null;
|
let contextProfileNameRight = null;
|
||||||
let textureTextNameRight = null;
|
let textureProfileNameRight = null;
|
||||||
|
|
||||||
canvasTextNameLeft = document.createElement('canvas');
|
canvasProfileNameLeft = document.createElement('canvas');
|
||||||
contextTextNameLeft = canvasTextNameLeft.getContext('2d');
|
contextProfileNameLeft = canvasProfileNameLeft.getContext('2d');
|
||||||
canvasTextNameLeft.width = 960;
|
canvasProfileNameLeft.width = 960;
|
||||||
canvasTextNameLeft.height = 540 / 2;
|
canvasProfileNameLeft.height = 540 / 2;
|
||||||
drawName(nameLeft, canvasTextNameLeft, contextTextNameLeft);
|
drawName(nameLeft, canvasProfileNameLeft, contextProfileNameLeft);
|
||||||
textureTextNameLeft = new THREE.CanvasTexture(canvasTextNameLeft);
|
textureProfileNameLeft = new THREE.CanvasTexture(canvasProfileNameLeft);
|
||||||
|
|
||||||
canvasTextNameRight = document.createElement('canvas');
|
canvasProfileNameRight = document.createElement('canvas');
|
||||||
contextTextNameRight = canvasTextNameRight.getContext('2d');
|
contextProfileNameRight = canvasProfileNameRight.getContext('2d');
|
||||||
canvasTextNameRight.width = 960;
|
canvasProfileNameRight.width = 960;
|
||||||
canvasTextNameRight.height = 540 / 2;
|
canvasProfileNameRight.height = 540 / 2;
|
||||||
drawName(nameRight, canvasTextNameRight, contextTextNameRight);
|
drawName(nameRight, canvasProfileNameRight, contextProfileNameRight);
|
||||||
textureTextNameRight = new THREE.CanvasTexture(canvasTextNameRight);
|
textureProfileNameRight = new THREE.CanvasTexture(canvasProfileNameRight);
|
||||||
|
|
||||||
let materialTextLeft = null;
|
let materialProfileLeft = null;
|
||||||
let materialTextRight = null;
|
let materialProfileRight = null;
|
||||||
|
|
||||||
let geometryTextLeftFront = null;
|
let geometryProfileLeftFront = null;
|
||||||
let meshTextLeftFront = null;
|
let meshProfileLeftFront = null;
|
||||||
let geometryTextRightFront = null;
|
let geometryProfileRightFront = null;
|
||||||
let meshTextRightFront = null;
|
let meshProfileRightFront = null;
|
||||||
|
|
||||||
let geometryTextLeftBack = null;
|
let geometryProfileLeftBack = null;
|
||||||
let meshTextLeftBack = null;
|
let meshProfileLeftBack = null;
|
||||||
let geometryTextRightBack = null;
|
let geometryProfileRightBack = null;
|
||||||
let meshTextRightBack = null;
|
let meshProfileRightBack = null;
|
||||||
|
|
||||||
materialTextLeft = new THREE.MeshBasicMaterial({ map: textureTextNameLeft });
|
materialProfileLeft = new THREE.MeshBasicMaterial({ map: textureProfileNameLeft });
|
||||||
materialTextRight = new THREE.MeshBasicMaterial({ map: textureTextNameRight });
|
materialProfileRight = new THREE.MeshBasicMaterial({ map: textureProfileNameRight });
|
||||||
|
|
||||||
geometryTextLeftFront = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
geometryProfileLeftFront = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
||||||
meshTextLeftFront = new THREE.Mesh(geometryTextLeftFront, materialTextLeft);
|
meshProfileLeftFront = new THREE.Mesh(geometryProfileLeftFront, materialProfileLeft);
|
||||||
|
|
||||||
geometryTextRightFront = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
geometryProfileRightFront = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
||||||
meshTextRightFront = new THREE.Mesh(geometryTextRightFront, materialTextRight);
|
meshProfileRightFront = new THREE.Mesh(geometryProfileRightFront, materialProfileRight);
|
||||||
|
|
||||||
geometryTextLeftBack = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
geometryProfileLeftBack = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
||||||
meshTextLeftBack = new THREE.Mesh(geometryTextLeftBack, materialTextLeft);
|
meshProfileLeftBack = new THREE.Mesh(geometryProfileLeftBack, materialProfileLeft);
|
||||||
|
|
||||||
geometryTextRightBack = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
geometryProfileRightBack = new THREE.PlaneGeometry(width - 0.15, height - 0.15);
|
||||||
meshTextRightBack = new THREE.Mesh(geometryTextRightBack, materialTextRight);
|
meshProfileRightBack = new THREE.Mesh(geometryProfileRightBack, materialProfileRight);
|
||||||
|
|
||||||
meshTextLeftFront.position.set(-width / 2 - (3 - width), 2.7, - 9.5 + depth / 2 + 0.025);
|
meshProfileLeftFront.position.set(-spacing - width / 2 - 0.325, 1.6, - 8.5 + depth / 2 + 0.01);
|
||||||
meshTextRightFront.position.set(width / 2 + (3 - width), 2.7, - 9.5 + depth / 2 + 0.025);
|
meshProfileRightFront.position.set(spacing + width / 2 + 0.325, 1.6, - 8.5 + depth / 2 + 0.01);
|
||||||
|
|
||||||
meshTextLeftBack.rotation.y = Math.PI;
|
meshProfileLeftBack.rotation.y = Math.PI;
|
||||||
meshTextLeftBack.position.set(width / 2 + (3 - width), 2.7, 9.5 - depth / 2 - 0.025);
|
meshProfileLeftBack.position.set(-spacing - width / 2 - 0.325, 1.6, 8.5 - depth / 2 - 0.01);
|
||||||
meshTextRightBack.rotation.y = Math.PI;
|
meshProfileRightBack.rotation.y = Math.PI;
|
||||||
meshTextRightBack.position.set(-width / 2 - (3 - width), 2.7, 9.5 - depth / 2 - 0.025);
|
meshProfileRightBack.position.set(spacing + width / 2 + 0.325, 1.6, 8.5 - depth / 2 - 0.01);
|
||||||
|
|
||||||
scene.add(meshTextLeftFront);
|
scene.add(meshProfileLeftFront);
|
||||||
scene.add(meshTextRightFront);
|
scene.add(meshProfileRightFront);
|
||||||
scene.add(meshTextLeftBack);
|
scene.add(meshProfileLeftBack);
|
||||||
scene.add(meshTextRightBack);
|
scene.add(meshProfileRightBack);
|
||||||
this.arrObject.push({mesh: meshTextLeftFront, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshProfileLeftFront, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshTextRightFront, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshProfileRightFront, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshTextLeftBack, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshProfileLeftBack, name: "", type: "profileBoard"});
|
||||||
this.arrObject.push({mesh: meshTextRightBack, name: "", type: "nameBoard"});
|
this.arrObject.push({mesh: meshProfileRightBack, name: "", type: "profileBoard"});
|
||||||
};
|
};
|
||||||
|
|
||||||
putVideoOnCanvas(nbImage, vNameNb)
|
putVideoOnCanvas(nbImage, vNameNb)
|
||||||
@ -780,7 +763,7 @@ class Map
|
|||||||
#animationGravityChanger(group, onTop)
|
#animationGravityChanger(group, onTop)
|
||||||
{
|
{
|
||||||
let geometryGC = new THREE.TorusGeometry(1.5, 0.05, 12, 24);
|
let geometryGC = new THREE.TorusGeometry(1.5, 0.05, 12, 24);
|
||||||
let materialGC = new THREE.MeshPhysicalMaterial({color: 0x00ff00});
|
let materialGC = new THREE.MeshPhysicalMaterial({color: 0x829CBC});
|
||||||
let ringGC = new THREE.Mesh(geometryGC, materialGC);
|
let ringGC = new THREE.Mesh(geometryGC, materialGC);
|
||||||
let landmarkGC = group.children[0];
|
let landmarkGC = group.children[0];
|
||||||
let speed = 0.1;
|
let speed = 0.1;
|
||||||
@ -891,7 +874,7 @@ class Map
|
|||||||
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 = 0.7 - (diff / 2);
|
||||||
}
|
}
|
||||||
else if (this.arrObject[i].name == "wallRight")
|
else if (this.arrObject[i].name == "wallRight")
|
||||||
{
|
{
|
||||||
@ -906,7 +889,7 @@ class Map
|
|||||||
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 = 0.7 - (diff / 2);
|
||||||
}
|
}
|
||||||
if (this.arrObject[i].type == 'jumperBottom')
|
if (this.arrObject[i].type == 'jumperBottom')
|
||||||
{
|
{
|
||||||
@ -1033,11 +1016,10 @@ class Map
|
|||||||
animationSpeed = 0.02;
|
animationSpeed = 0.02;
|
||||||
|
|
||||||
this.updateScore(name, this.score);
|
this.updateScore(name, this.score);
|
||||||
player.reserCameraPlayer();
|
|
||||||
ball.resetPosBall();
|
ball.resetPosBall();
|
||||||
this.resetPosWalls();
|
this.resetPosWalls();
|
||||||
// player.resetPosPlayer();
|
player.resetScaleplayers();
|
||||||
// opponent.resetPosOpponent();
|
player.reserCameraPlayer();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1122,4 +1104,4 @@ function createRing(colorO) {
|
|||||||
return new THREE.Mesh(geometry, material);
|
return new THREE.Mesh(geometry, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Map };
|
export { Map, createStar, createBox, createRectangle, createRing, colorList };
|
@ -6,7 +6,7 @@
|
|||||||
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/08/21 10:34:49 by edbernar #+# #+# */
|
/* Created: 2024/08/21 10:34:49 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/09/25 15:29:52 by hubourge ### ########.fr */
|
/* Updated: 2024/10/01 15:28:00 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -50,11 +50,6 @@ class Opponent
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
resetPosOpponent()
|
|
||||||
{
|
|
||||||
this.object.position.set(0, 0.3, -mapLength / 2 + 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
movePlayer(content)
|
movePlayer(content)
|
||||||
{
|
{
|
||||||
const lerp = (start, end, t) => start + (end - start) * t;
|
const lerp = (start, end, t) => start + (end - start) * t;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: hubourge <hubourge@student.42.fr> +#+ +:+ +#+ */
|
/* 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/09/30 16:48:22 by hubourge ### ########.fr */
|
/* Updated: 2024/10/01 18:45:39 by hubourge ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -106,11 +106,6 @@ class Player
|
|||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
resetPosPlayer()
|
|
||||||
{
|
|
||||||
this.object.position.set(0, this.limits.down, mapLength / 2 - 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
reserCameraPlayer()
|
reserCameraPlayer()
|
||||||
{
|
{
|
||||||
this.setCameraPosition(
|
this.setCameraPosition(
|
||||||
@ -120,6 +115,13 @@ class Player
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetScaleplayers()
|
||||||
|
{
|
||||||
|
this.object.scale.set(1, 1, 1);
|
||||||
|
if (this.opponent)
|
||||||
|
this.opponent.object.scale.set(1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
makeAnimation(isOpponent)
|
makeAnimation(isOpponent)
|
||||||
{
|
{
|
||||||
this.mapVar.putVideoOnCanvas(3, 'goal');
|
this.mapVar.putVideoOnCanvas(3, 'goal');
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/10/01 13:42:29 by edbernar #+# #+# */
|
/* Created: 2024/10/01 13:42:29 by edbernar #+# #+# */
|
||||||
/* Updated: 2024/10/01 14:15:12 by edbernar ### ########.fr */
|
/* Updated: 2024/10/01 18:36:53 by edbernar ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,17 +21,21 @@ const playerList = {
|
|||||||
player15: {id: 0, name: null, pfp: null},
|
player15: {id: 0, name: null, pfp: null},
|
||||||
player16: {id: 0, name: null, pfp: null},
|
player16: {id: 0, name: null, pfp: null},
|
||||||
};
|
};
|
||||||
|
let divInfo = null;
|
||||||
|
|
||||||
class TournamentPage
|
class TournamentPage
|
||||||
{
|
{
|
||||||
static create(code)
|
static create(code)
|
||||||
{
|
{
|
||||||
console.log("Code game : ", code);
|
divInfo = document.getElementById('code-tournament');
|
||||||
|
|
||||||
|
document.getElementById('code-tournament').innerText = code;
|
||||||
|
divInfo.innerText = 'Tournament';
|
||||||
}
|
}
|
||||||
|
|
||||||
static dispose()
|
static dispose()
|
||||||
{
|
{
|
||||||
|
divInfo = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static newOpponent(content)
|
static newOpponent(content)
|
||||||
@ -50,8 +54,8 @@ class TournamentPage
|
|||||||
console.warn("Tournament is full.");
|
console.warn("Tournament is full.");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
console.warn('Put pfp on player' + playerNb[i]);
|
document.getElementById('user-' + playerNb[i]).innerText = content.username;
|
||||||
console.warn('Put username on player' + playerNb[i]);
|
document.getElementById('pfp-' + playerNb[i]).style.backgroundImage = `url(${content.pfp})`;
|
||||||
playerList['player' + playerNb[i]].id = content.id;
|
playerList['player' + playerNb[i]].id = content.id;
|
||||||
playerList['player' + playerNb[i]].pfp = content.pfp;
|
playerList['player' + playerNb[i]].pfp = content.pfp;
|
||||||
playerList['player' + playerNb[i]].username = content.username;
|
playerList['player' + playerNb[i]].username = content.username;
|
||||||
@ -73,6 +77,8 @@ class TournamentPage
|
|||||||
console.warn(`Opponent can't be remove cause he is not in this tournament`);
|
console.warn(`Opponent can't be remove cause he is not in this tournament`);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
document.getElementById('user-' + playerNb[i]).innerText = "Nobody";
|
||||||
|
document.getElementById('pfp-' + playerNb[i]).style.backgroundImage = null;
|
||||||
while (i < playerNb.length - 1)
|
while (i < playerNb.length - 1)
|
||||||
{
|
{
|
||||||
playerList['player' + playerNb[i]] = playerList['player' + playerNb[i + 1]];
|
playerList['player' + playerNb[i]] = playerList['player' + playerNb[i + 1]];
|
||||||
|
Reference in New Issue
Block a user