Energy and damage
This commit is contained in:
1 parent
521ec559bf
commit
9b9bbc70e8
3 files changed
+27
-2
No files matched your search
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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) {}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user