Fix tank landing
This commit is contained in:
1 parent
7224ce629a
commit
521ec559bf
2 files changed
+12
-3
No files matched your search
@@ -4,7 +4,7 @@ import {key} from './input.js';
|
|||||||
import {clamp, deg2rad, parable, randomInt, vec, wrap} from './math.js';
|
import {clamp, deg2rad, parable, randomInt, vec, wrap} from './math.js';
|
||||||
import {createSky} from './sky.js';
|
import {createSky} from './sky.js';
|
||||||
import {audio, createOsc} from './sound.js';
|
import {audio, createOsc} from './sound.js';
|
||||||
import {clipTerrain, collapseTerrain, createTerrain, isTerrain, landHeight} from './terrain.js';
|
import {clipTerrain, collapseTerrain, createTerrain, isTerrain, landHeight, closestLand} from './terrain.js';
|
||||||
import {drawExplosion, WEAPON_TYPES, EXPLOSION_TYPES} from './weapons.js';
|
import {drawExplosion, WEAPON_TYPES, EXPLOSION_TYPES} from './weapons.js';
|
||||||
|
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ for (let color of PLAYER_COLORS) {
|
|||||||
const x = Math.round(50 + (W-100) / 5 * i);
|
const x = Math.round(50 + (W-100) / 5 * i);
|
||||||
const a = x > W/2 ? 45 : 180-45;
|
const a = x > W/2 ? 45 : 180-45;
|
||||||
players.push({
|
players.push({
|
||||||
x, y: landHeight(terrain, x), a,
|
x, y: landHeight(terrain, x)+1, a,
|
||||||
p: PLAYER_INITIAL_POWER, c: color,
|
p: PLAYER_INITIAL_POWER, c: color,
|
||||||
weapon: WEAPON_TYPES[i % WEAPON_TYPES.length],
|
weapon: WEAPON_TYPES[i % WEAPON_TYPES.length],
|
||||||
energy: PLAYER_MAX_ENERGY,
|
energy: PLAYER_MAX_ENERGY,
|
||||||
@@ -122,7 +122,7 @@ function update() {
|
|||||||
else if (state === 'land-players') {
|
else if (state === 'land-players') {
|
||||||
let stable = true;
|
let stable = true;
|
||||||
for (let player of players) {
|
for (let player of players) {
|
||||||
const y = landHeight(terrain, player.x);
|
const y = closestLand(terrain, player.x, player.y);
|
||||||
if (player.y !== y) {
|
if (player.y !== y) {
|
||||||
player.y++;
|
player.y++;
|
||||||
stable = false;
|
stable = false;
|
||||||
|
|||||||
@@ -37,6 +37,15 @@ export function isTerrain(ctx, x, y) {
|
|||||||
return imageData.data[3] > 0;
|
return imageData.data[3] > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function closestLand(ctx, x, y) {
|
||||||
|
const {height} = ctx.canvas;
|
||||||
|
const imageData = ctx.getImageData(x, 0, 1, height);
|
||||||
|
for (let i=y; i<height; i++) {
|
||||||
|
if (imageData.data[i*4+3] !== 0) return i;
|
||||||
|
}
|
||||||
|
return height-1;
|
||||||
|
}
|
||||||
|
|
||||||
export function landHeight(ctx, x) {
|
export function landHeight(ctx, x) {
|
||||||
const {height} = ctx.canvas;
|
const {height} = ctx.canvas;
|
||||||
const imageData = ctx.getImageData(x, 0, 1, height);
|
const imageData = ctx.getImageData(x, 0, 1, height);
|
||||||
|
|||||||
Reference in new issue
Block a user