Explosion sounds
This commit is contained in:
1 parent
512b256e2e
commit
ea89cbc2cc
3 files changed
+31
-10
No files matched your search
@@ -105,6 +105,7 @@ function update() {
|
|||||||
|
|
||||||
if (!explosionType.update(explosion)) {
|
if (!explosionType.update(explosion)) {
|
||||||
explosionType.clip(explosion, terrain);
|
explosionType.clip(explosion, terrain);
|
||||||
|
explosionType.stop(explosion);
|
||||||
for (let player of players) {
|
for (let player of players) {
|
||||||
if (player.energy > 0) {
|
if (player.energy > 0) {
|
||||||
player.energy -= explosionType.damage(explosion, player) || 0;
|
player.energy -= explosionType.damage(explosion, player) || 0;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
export function index2coords(width, i) {
|
export function index2coords(width, i) {
|
||||||
return [i % width, Math.floor(i/width)];
|
return [i % width, Math.floor(i/width)];
|
||||||
}
|
}
|
||||||
@@ -27,6 +26,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 cycle(x, d) {
|
||||||
|
return Math.floor(x / d);
|
||||||
|
}
|
||||||
|
|
||||||
export function within(x, y, tx, ty, r) {
|
export function within(x, y, tx, ty, r) {
|
||||||
return Math.abs(x-tx) < r && Math.abs(y-ty) < r;
|
return Math.abs(x-tx) < r && Math.abs(y-ty) < r;
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-9
@@ -1,6 +1,7 @@
|
|||||||
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';
|
import {within, cycle} from './math.js';
|
||||||
|
import {createOsc, audio} from './sound.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));
|
||||||
@@ -8,10 +9,10 @@ export function drawExplosion(ctx, x, y, r) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const WEAPON_TYPES = [
|
export const WEAPON_TYPES = [
|
||||||
{id:'baby-missile', name:'Baby Missile', explosion:{type:'blast', r:5}},
|
// {id:'baby-missile', name:'Baby Missile', explosion:{type:'blast', r:5}},
|
||||||
{id:'missile', name:'Missile', explosion:{type:'blast', r:10}},
|
// {id:'missile', name:'Missile', explosion:{type:'blast', r:10}},
|
||||||
{id:'baby-nuke', name:'Baby Nuke', explosion:{type:'blast', r:50}},
|
// {id:'baby-nuke', name:'Baby Nuke', explosion:{type:'blast', r:50}},
|
||||||
{id:'nuke', name:'Nuke', explosion:{type:'blast', r:100}},
|
// {id:'nuke', name:'Nuke', explosion:{type:'blast', r:100}},
|
||||||
{id:'dirt', name:'Dirt', explosion:{type:'dirt', r:25}},
|
{id:'dirt', name:'Dirt', explosion:{type:'dirt', r:25}},
|
||||||
{id:'large-dirt', name:'Ton of Dirt', explosion:{type:'dirt', r:75}},
|
{id:'large-dirt', name:'Ton of Dirt', explosion:{type:'dirt', r:75}},
|
||||||
];
|
];
|
||||||
@@ -20,15 +21,23 @@ export const EXPLOSION_TYPES = {
|
|||||||
blast: {
|
blast: {
|
||||||
create(spec, x, y) {
|
create(spec, x, y) {
|
||||||
const {r} = spec;
|
const {r} = spec;
|
||||||
return {x, y, r, cr:0};
|
const osc = createOsc();
|
||||||
|
osc.start();
|
||||||
|
return {x, y, r, cr:0, osc};
|
||||||
},
|
},
|
||||||
update(explosion) {
|
update(explosion) {
|
||||||
return ++explosion.cr < explosion.r;
|
return ++explosion.cr < explosion.r;
|
||||||
},
|
},
|
||||||
draw(explosion, foreground) {
|
draw(explosion, foreground) {
|
||||||
const {x, y, cr} = explosion;
|
const {x, y, cr, osc} = explosion;
|
||||||
|
const f = cycle(explosion.cr, 6) % 2 === 0 ? 220 : 440;
|
||||||
|
osc.frequency.setValueAtTime(f, audio.currentTime);
|
||||||
drawExplosion(foreground, x, y, cr);
|
drawExplosion(foreground, x, y, cr);
|
||||||
},
|
},
|
||||||
|
stop(explosion) {
|
||||||
|
const {osc} = explosion;
|
||||||
|
osc.stop();
|
||||||
|
},
|
||||||
clip(explosion, terrain) {
|
clip(explosion, terrain) {
|
||||||
const {x, y, cr} = explosion;
|
const {x, y, cr} = explosion;
|
||||||
clipTerrain(terrain, (ctx) => drawExplosion(ctx, x, y, cr));
|
clipTerrain(terrain, (ctx) => drawExplosion(ctx, x, y, cr));
|
||||||
@@ -42,13 +51,21 @@ export const EXPLOSION_TYPES = {
|
|||||||
dirt: {
|
dirt: {
|
||||||
create(spec, x, y) {
|
create(spec, x, y) {
|
||||||
const {r} = spec;
|
const {r} = spec;
|
||||||
return {x, y, r, cr:0};
|
const osc = createOsc();
|
||||||
|
osc.start();
|
||||||
|
return {x, y, r, cr:0, osc};
|
||||||
|
},
|
||||||
|
stop(explosion) {
|
||||||
|
const {osc} = explosion;
|
||||||
|
osc.stop();
|
||||||
},
|
},
|
||||||
update(explosion) {
|
update(explosion) {
|
||||||
return ++explosion.cr < explosion.r;
|
return ++explosion.cr < explosion.r;
|
||||||
},
|
},
|
||||||
draw(explosion, foreground) {
|
draw(explosion, foreground) {
|
||||||
const {x, y, cr} = explosion;
|
const {x, y, cr, osc} = explosion;
|
||||||
|
const f = explosion.cr % 2 === 0 ? 220 + explosion.cr : 0;
|
||||||
|
osc.frequency.setValueAtTime(f, audio.currentTime);
|
||||||
drawExplosion(foreground, x, y, cr);
|
drawExplosion(foreground, x, y, cr);
|
||||||
},
|
},
|
||||||
clip(explosion, terrain) {
|
clip(explosion, terrain) {
|
||||||
|
|||||||
Reference in new issue
Block a user