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];
if (!explosionType.update(explosion)) {
for (let player of players) {
if (player.energy > 0) {
player.energy -= explosionType.damage(explosion, player) || 0;
}
}
explosion = null;
state = 'land-collapse';
}
@@ -128,7 +133,11 @@ function update() {
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') {
@@ -143,6 +152,10 @@ function update() {
state = 'start-turn';
}
else {
throw new Error(`Invalid state, ${state}`);
}
}
function draw() {
@@ -154,7 +167,8 @@ function draw() {
}
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);
drawLine(foreground, x, y-3, Math.round(px), Math.round(py), 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;
}
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) {
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;
+7
View File
@@ -1,5 +1,6 @@
import {drawCircle} from './gfx.js';
import {clipTerrain} from './terrain.js';
import {within} from './math.js';
export function drawExplosion(ctx, x, y, r) {
const color = 255 - (16 * (r % 16));
@@ -29,6 +30,11 @@ export const EXPLOSION_TYPES = {
drawExplosion(foreground, 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: {
create(spec, x, y) {
@@ -43,5 +49,6 @@ export const EXPLOSION_TYPES = {
drawExplosion(foreground, x, y, cr);
drawExplosion(terrain, x, y, cr);
},
damage(explosion, player) {}
},
}