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
+38 -15

No files matched your search

+13 -9
View File
@@ -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}},
+2 -3
View File
@@ -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)
);
.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);
}
+23 -3
View File
@@ -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<n; i++) {
projectiles.push(
normalType.create(
{}, player, weapon, ox, oy, a, p, wind-s*i
)[0]
);
}
return projectiles;
},
stop() {},
update() {},
},
}