diff --git a/src/constants.js b/src/constants.js index 8ca9423..3e6c3bd 100644 --- a/src/constants.js +++ b/src/constants.js @@ -25,15 +25,17 @@ export const PLAYER_COLORS = [ export const PLAYER_STARTING_WEAPONS = [ {type: 'babyMissile', ammo:Infinity}, {type: 'missile', ammo:5}, - // {type: 'babyNuke', ammo:3}, - // {type: 'nuke', ammo:1}, - // {type: 'smallDirt', ammo:5}, - // {type: 'dirt', ammo:3}, - // {type: 'largeDirt', ammo:1}, - // {type: 'smallDigBomb', ammo:5}, - // {type: 'digBomb', ammo:3}, - // {type: 'largeDigBomb', ammo:1}, - // {type: 'tracer', ammo:Infinity}, + {type: 'babyNuke', ammo:3}, + {type: 'nuke', ammo:1}, + {type: 'mirv', ammo:5}, + {type: 'xmirv', ammo:3}, + {type: 'smallDirt', ammo:5}, + {type: 'dirt', ammo:3}, + {type: 'largeDirt', ammo:1}, + {type: 'smallDigBomb', ammo:5}, + {type: 'digBomb', ammo:3}, + {type: 'largeDigBomb', ammo:1}, + {type: 'tracer', ammo:Infinity}, ] 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}}, 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}}, + 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}}, 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}}, diff --git a/src/main.js b/src/main.js index 5148e9f..e75e0d4 100644 --- a/src/main.js +++ b/src/main.js @@ -140,9 +140,8 @@ function update() { const projectileType = PROJECTILE_TYPES[projectile.type]; 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'; } @@ -152,7 +151,7 @@ function update() { for (let i=projectiles.length-1; i>=0; i--) { const projectile = projectiles[i]; 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); projectiles.splice(i, 1); } diff --git a/src/projectiles.js b/src/projectiles.js index e5e54b0..059552a 100644 --- a/src/projectiles.js +++ b/src/projectiles.js @@ -13,17 +13,17 @@ export const PROJECTILE_TYPES = { const osc = createOsc('sine'); osc.start(); - return { + return [{ type: 'normal', player, weapon, x:ox, y:oy, ox, oy, a, p, t: 0, osc, wind, - }; + }]; }, stop(projectile) { projectile.osc.stop(0); }, - update(projectile, terrain, trajectories, explosions) { + update(projectile, terrain, projectiles, trajectories, explosions) { const prevProjectile = {...projectile}; const {weapon, player, wind} = projectile; const weaponType = WEAPON_TYPES[weapon.type]; @@ -75,5 +75,25 @@ export const PROJECTILE_TYPES = { 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