From eec60fcc91d42c6ca54988ff527401cdb7134d61 Mon Sep 17 00:00:00 2001 From: Paul Mathieu Date: Wed, 22 Dec 2021 02:31:28 -0800 Subject: [PATCH] Double jump! --- game.js | 42 +++++++++++++++++++++++++++--------------- world.js | 2 +- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/game.js b/game.js index d2f0474..6e542df 100644 --- a/game.js +++ b/game.js @@ -70,6 +70,7 @@ function handleKeys(params) { const dir = [right, 0, -forward, 1.0]; const ori = se3.roty(params.camera.orientation[1]); const tf = se3.apply(ori, dir); + const maxSpeed = 0.1; if (params.flying) { params.camera.position[0] += tf[0]; @@ -82,11 +83,11 @@ function handleKeys(params) { params.camera.velocity[0] += tf[0] / 60; params.camera.velocity[2] += tf[2] / 60; - if (Math.abs(params.camera.velocity[0]) > Math.abs(tf[0])) { - params.camera.velocity[0] = tf[0]; + if (Math.abs(params.camera.velocity[0]) > maxSpeed) { + params.camera.velocity[0] = Math.sign(params.camera.velocity[0]) * maxSpeed; } - if (Math.abs(params.camera.velocity[2]) > Math.abs(tf[2])) { - params.camera.velocity[2] = tf[2]; + if (Math.abs(params.camera.velocity[2]) > maxSpeed) { + params.camera.velocity[2] = Math.sign(params.camera.velocity[2]) * maxSpeed; } } }; @@ -107,17 +108,12 @@ function handleKeys(params) { return; case 'Space': - if(params.flying) { + if (params.flying) { params.camera.position[1] += 0.1; - } else { - if (params.jumpAmount > 0) { - const amount = 0.4 * params.jumpAmount; - params.camera.velocity[1] += amount / 60; - params.jumpAmount -= amount; - } } return; - case 'ControlLeft': + + case 'ShiftLeft': params.camera.position[1] -= 0.1; return; } @@ -158,7 +154,7 @@ function updatePhysics(params) { params.camera.position = newPos; params.camera.velocity = newPos.map((v, i) => v - oldPos[i]); if (isOnGround) { - params.jumpAmount = 6; + params.jumpAmount = 2; params.camera.velocity = params.camera.velocity.map(v => v * 0.7); } params.isOnGround = isOnGround; @@ -202,15 +198,21 @@ function tagABlock(gl, params, objects) { // [x] generating & loading of more chunks // [x] distance fog // [x] better controls +// [x] non-flowy water +// [x] slightly cooler terrain +// [ ] fullscreen +// [ ] a soundrack +// [ ] trees and stuff // [ ] different biomes (with different noise stats) -// [ ] non-flowy water // [ ] flowy water // [ ] save the world (yay) to local storage (bah) -// [ ] mines +// [ ] caves // [ ] crafting // [ ] fix bugs // [ ] better light // [ ] inventory +// [ ] monsters +// [ ] multi player export function setupParamPanel(params) { document.querySelector('#lightx').oninput = e => { @@ -287,6 +289,16 @@ export function initUiListeners(params, canvas) { switch (e.code) { case 'KeyF': params.flying = !params.flying; + break; + case 'Space': + if (!params.flying) { + if (params.jumpAmount > 0) { + const amount = 0.08; + params.camera.velocity[1] = amount; + params.jumpAmount -= 1; + } + } + break; } } else { params.keys.delete(e.code); diff --git a/world.js b/world.js index 5a8a69d..0910889 100644 --- a/world.js +++ b/world.js @@ -334,7 +334,7 @@ export function updateWorldGeometry(gl, world, z, x, timeLimit = 10000) { } export function checkCollision(curPos, newPos, world) { - // I guess Steve is about 1.7 m tall? + // I guess Gontrand is about 1.7 m tall? // he also has a 60x60 cm axis-aligned square section '^_^ // box is centered around the camera const steveBB = [