Double jump!
This commit is contained in:
parent
8939a90307
commit
eec60fcc91
40
game.js
40
game.js
@ -70,6 +70,7 @@ function handleKeys(params) {
|
|||||||
const dir = [right, 0, -forward, 1.0];
|
const dir = [right, 0, -forward, 1.0];
|
||||||
const ori = se3.roty(params.camera.orientation[1]);
|
const ori = se3.roty(params.camera.orientation[1]);
|
||||||
const tf = se3.apply(ori, dir);
|
const tf = se3.apply(ori, dir);
|
||||||
|
const maxSpeed = 0.1;
|
||||||
|
|
||||||
if (params.flying) {
|
if (params.flying) {
|
||||||
params.camera.position[0] += tf[0];
|
params.camera.position[0] += tf[0];
|
||||||
@ -82,11 +83,11 @@ function handleKeys(params) {
|
|||||||
params.camera.velocity[0] += tf[0] / 60;
|
params.camera.velocity[0] += tf[0] / 60;
|
||||||
params.camera.velocity[2] += tf[2] / 60;
|
params.camera.velocity[2] += tf[2] / 60;
|
||||||
|
|
||||||
if (Math.abs(params.camera.velocity[0]) > Math.abs(tf[0])) {
|
if (Math.abs(params.camera.velocity[0]) > maxSpeed) {
|
||||||
params.camera.velocity[0] = tf[0];
|
params.camera.velocity[0] = Math.sign(params.camera.velocity[0]) * maxSpeed;
|
||||||
}
|
}
|
||||||
if (Math.abs(params.camera.velocity[2]) > Math.abs(tf[2])) {
|
if (Math.abs(params.camera.velocity[2]) > maxSpeed) {
|
||||||
params.camera.velocity[2] = tf[2];
|
params.camera.velocity[2] = Math.sign(params.camera.velocity[2]) * maxSpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -109,15 +110,10 @@ function handleKeys(params) {
|
|||||||
case 'Space':
|
case 'Space':
|
||||||
if (params.flying) {
|
if (params.flying) {
|
||||||
params.camera.position[1] += 0.1;
|
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;
|
return;
|
||||||
case 'ControlLeft':
|
|
||||||
|
case 'ShiftLeft':
|
||||||
params.camera.position[1] -= 0.1;
|
params.camera.position[1] -= 0.1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -158,7 +154,7 @@ function updatePhysics(params) {
|
|||||||
params.camera.position = newPos;
|
params.camera.position = newPos;
|
||||||
params.camera.velocity = newPos.map((v, i) => v - oldPos[i]);
|
params.camera.velocity = newPos.map((v, i) => v - oldPos[i]);
|
||||||
if (isOnGround) {
|
if (isOnGround) {
|
||||||
params.jumpAmount = 6;
|
params.jumpAmount = 2;
|
||||||
params.camera.velocity = params.camera.velocity.map(v => v * 0.7);
|
params.camera.velocity = params.camera.velocity.map(v => v * 0.7);
|
||||||
}
|
}
|
||||||
params.isOnGround = isOnGround;
|
params.isOnGround = isOnGround;
|
||||||
@ -202,15 +198,21 @@ function tagABlock(gl, params, objects) {
|
|||||||
// [x] generating & loading of more chunks
|
// [x] generating & loading of more chunks
|
||||||
// [x] distance fog
|
// [x] distance fog
|
||||||
// [x] better controls
|
// [x] better controls
|
||||||
|
// [x] non-flowy water
|
||||||
|
// [x] slightly cooler terrain
|
||||||
|
// [ ] fullscreen
|
||||||
|
// [ ] a soundrack
|
||||||
|
// [ ] trees and stuff
|
||||||
// [ ] different biomes (with different noise stats)
|
// [ ] different biomes (with different noise stats)
|
||||||
// [ ] non-flowy water
|
|
||||||
// [ ] flowy water
|
// [ ] flowy water
|
||||||
// [ ] save the world (yay) to local storage (bah)
|
// [ ] save the world (yay) to local storage (bah)
|
||||||
// [ ] mines
|
// [ ] caves
|
||||||
// [ ] crafting
|
// [ ] crafting
|
||||||
// [ ] fix bugs
|
// [ ] fix bugs
|
||||||
// [ ] better light
|
// [ ] better light
|
||||||
// [ ] inventory
|
// [ ] inventory
|
||||||
|
// [ ] monsters
|
||||||
|
// [ ] multi player
|
||||||
|
|
||||||
export function setupParamPanel(params) {
|
export function setupParamPanel(params) {
|
||||||
document.querySelector('#lightx').oninput = e => {
|
document.querySelector('#lightx').oninput = e => {
|
||||||
@ -287,6 +289,16 @@ export function initUiListeners(params, canvas) {
|
|||||||
switch (e.code) {
|
switch (e.code) {
|
||||||
case 'KeyF':
|
case 'KeyF':
|
||||||
params.flying = !params.flying;
|
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 {
|
} else {
|
||||||
params.keys.delete(e.code);
|
params.keys.delete(e.code);
|
||||||
|
2
world.js
2
world.js
@ -334,7 +334,7 @@ export function updateWorldGeometry(gl, world, z, x, timeLimit = 10000) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function checkCollision(curPos, newPos, world) {
|
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 '^_^
|
// he also has a 60x60 cm axis-aligned square section '^_^
|
||||||
// box is centered around the camera
|
// box is centered around the camera
|
||||||
const steveBB = [
|
const steveBB = [
|
||||||
|
Loading…
Reference in New Issue
Block a user