diff --git a/docker-compose/requirements/nginx/static/javascript/Page.js b/docker-compose/requirements/nginx/static/javascript/Page.js new file mode 100644 index 0000000..9576462 --- /dev/null +++ b/docker-compose/requirements/nginx/static/javascript/Page.js @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Page.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar { const tv = gltf.scene.children[0]; @@ -89,7 +91,7 @@ class Screen pointLight.target = targetObject; pointLight.target.updateMatrixWorld(); scene.add(pointLight); - setInterval(() => { + this.intervalLight = setInterval(() => { const intensity = Math.random() * 2 + 10; pointLight.intensity = intensity * light.point > 13 * light.point ? 13 * light.point : intensity * light.point; @@ -174,6 +176,13 @@ class Screen this.canvasVideo = null; } } + + dispose() + { + this.#disposeVideo(); + if (this.intervalLight) + clearInterval(this.intervalLight); + } }; diff --git a/docker-compose/requirements/nginx/static/javascript/home3D/home3D.js b/docker-compose/requirements/nginx/static/javascript/home3D/home3D.js index de6a163..2cea888 100644 --- a/docker-compose/requirements/nginx/static/javascript/home3D/home3D.js +++ b/docker-compose/requirements/nginx/static/javascript/home3D/home3D.js @@ -6,212 +6,308 @@ /* By: edbernar { - let interval = setInterval(() => { - camera.position.x -= (0.01 * globalSpeed); - camera.lookAt(screen.tv.position); - if (camera.position.x < 3.3) - fadeInOut(); - if (dofPass.materialBokeh.uniforms.aperture.value > 0) - dofPass.materialBokeh.uniforms.aperture.value -= 0.0001; - if (camera.position.x < 3) - { - clearInterval(interval); - camera.position.set(-2, 4, -6); - interval = setInterval(() => { - camera.lookAt(screen.tv.position); - camera.position.x += (0.01 * globalSpeed); - camera.position.y -= (0.005 * globalSpeed); - if (camera.position.x > 1.7) - fadeInOut(); - if (camera.position.x > 2) - { - camera.position.set(0, 1.2, 0); - clearInterval(interval); - interval = setInterval(() => { - camera.lookAt(screen.tv.position); - camera.position.y += (0.005 * globalSpeed); - camera.position.z -= (0.01 * globalSpeed); - if (camera.position.x < -2.3) - fadeInOut(); - if (camera.position.z < -2) - { - globalSpeed -= 0.001; - if (globalSpeed < 0) - clearInterval(interval); - } - }, 10); - } - }, 10); - } - }, 10); -}, 500) - -document.addEventListener('resize', () => { - renderer.setSize(window.innerWidth, window.innerHeight); - camera.aspect = window.innerWidth / window.innerHeight; - camera.updateProjectionMatrix(); -}); - -let isInFade = false; - -function fadeInOut() +class Home3D { - if (isInFade) - return; - let interval = null; - isInFade = true; - interval = setInterval(() => { - light.point -= 0.2; - screen.screen.material.opacity -= 0.05; - if (screen.screen.material.opacity <= 0) - { + static create() + { + home3D(); + } + + static dispose() + { + document.removeEventListener('resize', windowUpdater); + document.removeEventListener('mousemove', mouseTracker); + + if (interval) clearInterval(interval); - setTimeout(() => { - interval = setInterval(() => { - light.point += 0.2; - screen.screen.material.opacity += 0.05; - if (screen.screen.material.opacity >= 1) - { - clearInterval(interval); - interval = setInterval(() => { - light.point += 0.2; - if (light.point >= 1) - clearInterval(interval); - }, 10); - isInFade = false; - } - }, 20); - }, 500); + interval = null; + if (intervalFade) + clearInterval(intervalFade); + intervalFade = null; + if (screen) + screen.dispose(); + screen = null; + if (composer) + { + if (dofPass) + composer.removePass(dofPass); + if (renderPass) + composer.removePass(renderPass); + composer.dispose(); + dofPass = null; + composer = null; } - }, 20); + isInFade = false; + if (renderer) + renderer.dispose(); + renderer = null; + if (scene) + { + scene.children.forEach(child => { + scene.remove(child); + if (child.geometry) + child.geometry.dispose(); + if (child.material) + child.material.dispose(); + if (child.texture) + child.texture.dispose(); + }); + } + scene = null; + camera = null; + mouse = null; + } } -function createCube() -{ - const geometry = new THREE.BoxGeometry(5, 5, 0.1); - const material = new THREE.MeshStandardMaterial({color: 0x020202}); - const mesh = new THREE.Mesh(geometry, material); - - mesh.position.set(8, 1, -5); - scene.add(mesh); -} - -const raycaster = new THREE.Raycaster(); -const mouse = new THREE.Vector2(); - -document.addEventListener( 'mousemove', (event) => { - event.preventDefault(); - mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; - mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; -}); - - function home3D() { - createPlane(); - renderer.setAnimationLoop(loop) -} - -function createPlane() -{ - const geometry = new THREE.PlaneGeometry(500, 500); - const material = new THREE.MeshPhysicalMaterial({side: THREE.DoubleSide, color: 0x020202}); - const mesh = new THREE.Mesh(geometry, material); - - mesh.position.set(0, 0, 0); - mesh.rotateX(-(Math.PI / 2)); - mesh.receiveShadow = true; - scene.add(mesh); -} - -const video = { - pong: '/static/video/homePage/pong.mp4', - login: '/static/video/homePage/notLogin.webm' -} -let actualVideo = -1; -if (Math.random() % 100 > 0.97) - video.pong = '/static/video/homePage/easteregg.webm' - -setTimeout(() => { - screen.changeVideo(video.pong); - actualVideo = 0; -}, 100); - -function loop() -{ - raycaster.setFromCamera( mouse, camera ); - const intersects = raycaster.intersectObjects( scene.children, false ); + let actualVideo = -1; + let globalSpeed = 0.75; + const ambiantLight = new THREE.AmbientLight(0xffffff, 35); + const video = { + pong: '/static/video/homePage/pong.mp4', + login: '/static/video/homePage/notLogin.webm' + }; - if (!screen.canvasVideo) + scene = new THREE.Scene(); + renderer = new THREE.WebGLRenderer({antialias: true}); + camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight); + screen = new Screen(scene); + raycaster = new THREE.Raycaster(); + interval = null; + mouse = new THREE.Vector2(); + isInFade = false; + + if (Math.random() % 100 > 0.97) + video.pong = '/static/video/homePage/easteregg.webm' + renderer.toneMapping = THREE.LinearToneMapping; + renderer.shadowMap.enabled = true; + renderer.shadowMap.type = THREE.PCFSoftShadowMap; + renderer.setSize(window.innerWidth, window.innerHeight); + camera.position.set(6, 1, -5.5); + camera.rotation.set(Math.PI + 0.2, 0, Math.PI); + scene.background = new THREE.Color(0x020202) + scene.add(ambiantLight); + + createPlane(); + createCube(); + document.body.getElementsByClassName('homeSection')[0].appendChild(renderer.domElement); + + document.addEventListener('resize', windowUpdater); + document.addEventListener('mousemove', mouseTracker); + + composer = new EffectComposer(renderer); + renderPass = new RenderPass(scene, camera); + composer.addPass(renderPass); + dofPass = new BokehPass(scene, camera, { + focus: 10.0, + aperture: 0.02, + maxblur: 0.01, + }); + composer.addPass(dofPass); + + setTimeout(() => { + interval = setInterval(() => { + if (screen == null) + { + clearInterval(interval); + return ; + } + camera.position.x -= (0.01 * globalSpeed); + camera.lookAt(screen.tv.position); + if (camera.position.x < 3.3) + fadeInOut(); + if (dofPass.materialBokeh.uniforms.aperture.value > 0) + dofPass.materialBokeh.uniforms.aperture.value -= 0.0001; + if (camera.position.x < 3) + { + clearInterval(interval); + camera.position.set(-2, 4, -6); + interval = setInterval(() => { + if (screen == null) + { + clearInterval(interval); + return ; + } + camera.lookAt(screen.tv.position); + camera.position.x += (0.01 * globalSpeed); + camera.position.y -= (0.005 * globalSpeed); + if (camera.position.x > 1.7) + fadeInOut(); + if (camera.position.x > 2) + { + camera.position.set(0, 1.2, 0); + clearInterval(interval); + interval = setInterval(() => { + if (screen == null) + { + clearInterval(interval); + return ; + } + camera.lookAt(screen.tv.position); + camera.position.y += (0.005 * globalSpeed); + camera.position.z -= (0.01 * globalSpeed); + if (camera.position.x < -2.3) + fadeInOut(); + if (camera.position.z < -2) + { + globalSpeed -= 0.001; + if (globalSpeed < 0) + clearInterval(interval); + } + }, 10); + } + }, 10); + } + }, 10); + }, 500); + + setTimeout(() => { + screen.changeVideo(video.pong); + actualVideo = 0; + }, 100); + + function loop() { - composer.render(); - return ; - } - if (intersects.length === 0) - { - if (actualVideo != 0) + raycaster.setFromCamera( mouse, camera ); + const intersects = raycaster.intersectObjects( scene.children, false ); + + if (!screen.canvasVideo) + { + composer.render(); + return ; + } + if (intersects.length === 0) + { + if (actualVideo != 0) + { + screen.changeVideo(video.pong); + actualVideo = 0; + } + } + else if (intersects[0].object == screen.screen) + { + if (actualVideo != 1) + { + screen.changeVideo(video.login); + actualVideo = 1; + } + } + else if (actualVideo != 0) { screen.changeVideo(video.pong); actualVideo = 0; } + composer.render(); } - else if (intersects[0].object == screen.screen) + + function createCube() { - if (actualVideo != 1) - { - screen.changeVideo(video.login); - actualVideo = 1; - } + const geometry = new THREE.BoxGeometry(5, 5, 0.1); + const material = new THREE.MeshStandardMaterial({color: 0x020202}); + const mesh = new THREE.Mesh(geometry, material); + + mesh.position.set(8, 1, -5); + scene.add(mesh); } - else if (actualVideo != 0) + + function createPlane() { - screen.changeVideo(video.pong); - actualVideo = 0; + const geometry = new THREE.PlaneGeometry(500, 500); + const material = new THREE.MeshPhysicalMaterial({side: THREE.DoubleSide, color: 0x020202}); + const mesh = new THREE.Mesh(geometry, material); + + mesh.position.set(0, 0, 0); + mesh.rotateX(-(Math.PI / 2)); + mesh.receiveShadow = true; + scene.add(mesh); } - composer.render(); + + function fadeInOut() + { + if (isInFade) + return; + intervalFade = null; + isInFade = true; + intervalFade = setInterval(() => { + if (screen == null) + { + clearInterval(intervalFade); + return ; + } + light.point -= 0.2; + screen.screen.material.opacity -= 0.05; + if (screen.screen.material.opacity <= 0) + { + clearInterval(intervalFade); + setTimeout(() => { + if (screen == null) + { + clearInterval(intervalFade); + return ; + } + interval = setInterval(() => { + light.point += 0.2; + screen.screen.material.opacity += 0.05; + if (screen.screen.material.opacity >= 1) + { + if (screen == null) + { + clearInterval(intervalFade); + return ; + } + clearInterval(intervalFade); + intervalFade = setInterval(() => { + light.point += 0.2; + if (light.point >= 1) + clearInterval(intervalFade); + }, 10); + isInFade = false; + } + }, 20); + }, 500); + } + }, 20); + } + + renderer.setAnimationLoop(loop) } +function windowUpdater() +{ + renderer.setSize(window.innerWidth, window.innerHeight); + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); +}; -export { home3D }; \ No newline at end of file +function mouseTracker (event) +{ + event.preventDefault(); + mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; +}; + +export { Home3D }; \ No newline at end of file diff --git a/docker-compose/requirements/nginx/static/javascript/homePage/main.js b/docker-compose/requirements/nginx/static/javascript/homePage/main.js new file mode 100644 index 0000000..19b4dd7 --- /dev/null +++ b/docker-compose/requirements/nginx/static/javascript/homePage/main.js @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar { - const scrollPosition = window.scrollY; - const rotationAngle = scrollPosition * 0.1; - const parallaxElement = document.querySelector('#firstBall'); - const parallaxElement2 = document.querySelector('#secondBall'); - const parallaxSpeed = scrollPosition * -0.17; - - parallaxElement.style.transform = `translateX(-50%) translateY(${-parallaxSpeed}px) rotate(${rotationAngle}deg)`; - parallaxElement2.style.transform = `translateX(50%) translateY(${-parallaxSpeed}px) rotate(${rotationAngle}deg)`; -}); - -// document.getElementById('closePopupBtn').addEventListener('click', function() { -// document.getElementById('loginPopup').style.display = 'none'; -// }); +import { HomePage } from "/static/javascript/homePage/main.js" document.addEventListener('DOMContentLoaded', () => { liveChat(); login(); - home3D(); + HomePage.create(); + setTimeout(() => { + HomePage.dispose(); + }, 3000); }); diff --git a/site/.DS_Store b/site/.DS_Store index 0e0a7a5..b7e5fbe 100644 Binary files a/site/.DS_Store and b/site/.DS_Store differ