Energy and damage

This commit is contained in:
zenoamaro committed 2019-06-26 03:05:48 +02:00
1 parent 521ec559bf
commit 9b9bbc70e8
3 files changed
+27 -2

No files matched your search

+16 -2
View File
@@ -108,6 +108,11 @@ function update() {
const explosionType = EXPLOSION_TYPES[weapon.explosion.type]; const explosionType = EXPLOSION_TYPES[weapon.explosion.type];
if (!explosionType.update(explosion)) { if (!explosionType.update(explosion)) {
for (let player of players) {
if (player.energy > 0) {
player.energy -= explosionType.damage(explosion, player) || 0;
}
}
explosion = null; explosion = null;
state = 'land-collapse'; state = 'land-collapse';
} }
@@ -128,7 +133,11 @@ function update() {
stable = false; stable = false;
} }
} }
if (stable) state = 'end-turn'; if (stable) state = 'destroy-players';
}
else if (state === 'destroy-players') {
state = 'end-turn';
} }
else if (state === 'end-turn') { else if (state === 'end-turn') {
@@ -143,6 +152,10 @@ function update() {
state = 'start-turn'; state = 'start-turn';
} }
else {
throw new Error(`Invalid state, ${state}`);
}
} }
function draw() { function draw() {
@@ -154,7 +167,8 @@ function draw() {
} }
function drawPlayer(player) { function drawPlayer(player) {
const {x, y, a, c} = player; const {x, y, a, c, energy} = player;
if (energy <= 0) return;
const [px, py] = vec(x, y-3, a+180, 3); const [px, py] = vec(x, y-3, a+180, 3);
drawLine(foreground, x, y-3, Math.round(px), Math.round(py), c); drawLine(foreground, x, y-3, Math.round(px), Math.round(py), c);
drawRect(foreground, x-3, y-2, 6, 3, c); drawRect(foreground, x-3, y-2, 6, 3, c);
+4
View File
@@ -27,6 +27,10 @@ export function wrap(min, x, max) {
return ((x-min + max-min) % (max-min)) + min; return ((x-min + max-min) % (max-min)) + min;
} }
export function within(x, y, tx, ty, r) {
return Math.abs(x-tx) < r && Math.abs(y-ty) < r;
}
export function parable(t, x, y, a, v, w=0, g=9.8) { export function parable(t, x, y, a, v, w=0, g=9.8) {
const fx = x + t*v * Math.cos(a) - 0.5 * -w * t*t; const fx = x + t*v * Math.cos(a) - 0.5 * -w * t*t;
const fy = y + t*v * Math.sin(a) - 0.5 * -g * t*t; const fy = y + t*v * Math.sin(a) - 0.5 * -g * t*t;
+7
View File
@@ -1,5 +1,6 @@
import {drawCircle} from './gfx.js'; import {drawCircle} from './gfx.js';
import {clipTerrain} from './terrain.js'; import {clipTerrain} from './terrain.js';
import {within} from './math.js';
export function drawExplosion(ctx, x, y, r) { export function drawExplosion(ctx, x, y, r) {
const color = 255 - (16 * (r % 16)); const color = 255 - (16 * (r % 16));
@@ -29,6 +30,11 @@ export const EXPLOSION_TYPES = {
drawExplosion(foreground, x, y, cr); drawExplosion(foreground, x, y, cr);
clipTerrain(terrain, (ctx) => drawExplosion(ctx, x, y, cr)); clipTerrain(terrain, (ctx) => drawExplosion(ctx, x, y, cr));
}, },
damage(explosion, player) {
if (within(explosion.x, explosion.y, player.x, player.y, explosion.r)) {
return 100;
}
}
}, },
dirt: { dirt: {
create(spec, x, y) { create(spec, x, y) {
@@ -43,5 +49,6 @@ export const EXPLOSION_TYPES = {
drawExplosion(foreground, x, y, cr); drawExplosion(foreground, x, y, cr);
drawExplosion(terrain, x, y, cr); drawExplosion(terrain, x, y, cr);
}, },
damage(explosion, player) {}
}, },
} }