From 4afc42ec2ffb42d71558b5e6b35e95c1e7edb46c Mon Sep 17 00:00:00 2001 From: adrien Date: Tue, 27 Jun 2023 19:20:54 +0200 Subject: [PATCH] betterrer collisions --- main.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/main.js b/main.js index 558ce43..22c762f 100644 --- a/main.js +++ b/main.js @@ -74,8 +74,7 @@ const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 1000); camera.rotation.order = 'YXZ'; -const worldOctree = new Octree(); -const raftOctree = new Octree(); +const collisionner = new THREE.Group(); // Maze @@ -96,13 +95,14 @@ scene.add(maze) console.log(String(maze)) const invisibleWall = new THREE.Mesh(new THREE.BoxGeometry( .9, 1.8, .9 )); +invisibleWall.material.visible = false; let matrix = new THREE.Matrix4() for (let i = 0; i < maze.count; i++) { maze.getMatrixAt(i, matrix) const clone = invisibleWall.clone() - clone.position.setFromMatrixPosition(matrix) - clone.position.y += 0.5; - worldOctree.fromGraphNode(clone) + clone.position.setFromMatrixPosition(matrix); + clone.position.y = 1; + collisionner.add(clone); } // Ground @@ -178,9 +178,8 @@ ground.position.y = -0.5 ground.receiveShadow = true; ground.matrixAutoUpdate = false ground.updateMatrix(); -scene.add(ground) -worldOctree.fromGraphNode(ground) +collisionner.add(ground) // Water @@ -342,10 +341,16 @@ const raft = new THREE.Mesh(raftGeometry, [ raft.position.set( .2, ocean.position.y, -mazeWidth/2 - 1 ); raft.rotation.y = 1.4 raft.castShadow = true; -worldOctree.fromGraphNode(raft) +collisionner.add(raft); +const raftOctree = new Octree(); raftOctree.fromGraphNode(raft) scene.add(raft) +scene.add(collisionner); + +const worldOctree = new Octree(); +worldOctree.fromGraphNode(collisionner); + // const stats = new Stats(); @@ -368,7 +373,7 @@ if (showParam) { showHelper.onChange(function (value) { lightHelper.visible = value; - //octreeHelper.visible = value; + octreeHelper.visible = value; }); @@ -484,7 +489,7 @@ const clock = new THREE.Clock(); const GRAVITY = 30; -const STEPS_PER_FRAME = 5; +const STEPS_PER_FRAME = 10; const playerCollider = new Capsule( new THREE.Vector3(0, 25.0, 0), @@ -627,7 +632,7 @@ function getSideVector() { function controls(deltaTime) { // gives a bit of air control - const speedDelta = deltaTime * (playerOnFloor ? 10 : 2); + const speedDelta = deltaTime * (playerOnFloor ? 100 : 20) / STEPS_PER_FRAME; if (keyStates["ArrowUp"] || keyStates['KeyW']) {