MIRV weapons

This commit is contained in:
zenoamaro committed 2019-06-30 22:08:54 +02:00
1 parent f3561d8baf
commit 7fabcd386d
3 files changed
+40 -17

No files matched your search

+13 -9
View File
@@ -25,15 +25,17 @@ export const PLAYER_COLORS = [
export const PLAYER_STARTING_WEAPONS = [ export const PLAYER_STARTING_WEAPONS = [
{type: 'babyMissile', ammo:Infinity}, {type: 'babyMissile', ammo:Infinity},
{type: 'missile', ammo:5}, {type: 'missile', ammo:5},
// {type: 'babyNuke', ammo:3}, {type: 'babyNuke', ammo:3},
// {type: 'nuke', ammo:1}, {type: 'nuke', ammo:1},
// {type: 'smallDirt', ammo:5}, {type: 'mirv', ammo:5},
// {type: 'dirt', ammo:3}, {type: 'xmirv', ammo:3},
// {type: 'largeDirt', ammo:1}, {type: 'smallDirt', ammo:5},
// {type: 'smallDigBomb', ammo:5}, {type: 'dirt', ammo:3},
// {type: 'digBomb', ammo:3}, {type: 'largeDirt', ammo:1},
// {type: 'largeDigBomb', ammo:1}, {type: 'smallDigBomb', ammo:5},
// {type: 'tracer', ammo:Infinity}, {type: 'digBomb', ammo:3},
{type: 'largeDigBomb', ammo:1},
{type: 'tracer', ammo:Infinity},
] ]
export const WEAPON_TYPES = { export const WEAPON_TYPES = {
@@ -42,6 +44,8 @@ export const WEAPON_TYPES = {
missile: {id:'missile', name:'Missile', projectile:{type:'normal'}, explosion:{type:'blast', r:20}}, missile: {id:'missile', name:'Missile', projectile:{type:'normal'}, explosion:{type:'blast', r:20}},
babyNuke: {id:'babyNuke', name:'Baby Nuke', projectile:{type:'normal'}, explosion:{type:'blast', r:50}}, babyNuke: {id:'babyNuke', name:'Baby Nuke', projectile:{type:'normal'}, explosion:{type:'blast', r:50}},
nuke: {id:'nuke', name:'Nuke', projectile:{type:'normal'}, explosion:{type:'blast', r:100}}, nuke: {id:'nuke', name:'Nuke', projectile:{type:'normal'}, explosion:{type:'blast', r:100}},
mirv: {id:'mirv', name:'MIRV', projectile:{type:'mirv', n:3, s:8}, explosion:{type:'blast', r:35}},
xmirv: {id:'xmirv', name:'X-MIRV', projectile:{type:'mirv', n:5, s:8}, explosion:{type:'blast', r:45}},
smallDirt: {id:'smallDirt', name:'Small Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:25}}, smallDirt: {id:'smallDirt', name:'Small Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:25}},
dirt: {id:'dirt', name:'Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:50}}, dirt: {id:'dirt', name:'Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:50}},
largeDirt: {id:'largeDirt', name:'Ton of Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:75}}, largeDirt: {id:'largeDirt', name:'Ton of Dirt', projectile:{type:'normal'}, explosion:{type:'dirt', r:75}},
+3 -4
View File
@@ -140,9 +140,8 @@ function update() {
const projectileType = PROJECTILE_TYPES[projectile.type]; const projectileType = PROJECTILE_TYPES[projectile.type];
weapon.ammo -= 1; weapon.ammo -= 1;
projectiles.push( projectileType.create(projectile, player, weapon, px, py, a, p, wind)
projectileType.create(projectile, player, weapon, px, py, a, p, wind) .forEach(x => projectiles.push(x));
);
state = 'shoot'; state = 'shoot';
} }
@@ -152,7 +151,7 @@ function update() {
for (let i=projectiles.length-1; i>=0; i--) { for (let i=projectiles.length-1; i>=0; i--) {
const projectile = projectiles[i]; const projectile = projectiles[i];
const projectileType = PROJECTILE_TYPES[projectile.type]; const projectileType = PROJECTILE_TYPES[projectile.type];
if (projectileType.update(projectile, terrain, trajectories, explosions)) continue; if (projectileType.update(projectile, terrain, projectiles, trajectories, explosions)) continue;
projectileType.stop(projectile); projectileType.stop(projectile);
projectiles.splice(i, 1); projectiles.splice(i, 1);
} }
+24 -4
View File
@@ -13,17 +13,17 @@ export const PROJECTILE_TYPES = {
const osc = createOsc('sine'); const osc = createOsc('sine');
osc.start(); osc.start();
return { return [{
type: 'normal', type: 'normal',
player, weapon, player, weapon,
x:ox, y:oy, ox, oy, a, p, x:ox, y:oy, ox, oy, a, p,
t: 0, osc, wind, t: 0, osc, wind,
}; }];
}, },
stop(projectile) { stop(projectile) {
projectile.osc.stop(0); projectile.osc.stop(0);
}, },
update(projectile, terrain, trajectories, explosions) { update(projectile, terrain, projectiles, trajectories, explosions) {
const prevProjectile = {...projectile}; const prevProjectile = {...projectile};
const {weapon, player, wind} = projectile; const {weapon, player, wind} = projectile;
const weaponType = WEAPON_TYPES[weapon.type]; const weaponType = WEAPON_TYPES[weapon.type];
@@ -75,5 +75,25 @@ export const PROJECTILE_TYPES = {
return !exploded; return !exploded;
}, },
} },
mirv: {
create(spec, player, weapon, ox, oy, a, p, wind) {
const {n, s} = spec;
const projectiles = [];
const normalType = PROJECTILE_TYPES.normal;
for (let i=0; i<n; i++) {
projectiles.push(
normalType.create(
{}, player, weapon, ox, oy, a, p, wind-s*i
)[0]
);
}
return projectiles;
},
stop() {},
update() {},
},
} }