From 3c5dd9764141967c13be9395f736ca230e55f94f Mon Sep 17 00:00:00 2001 From: zenoamaro Date: Sun, 30 Jun 2019 22:42:36 +0200 Subject: [PATCH] Leapfrogs --- src/constants.js | 2 ++ src/projectiles.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/constants.js b/src/constants.js index 3e6c3bd..2c4b124 100644 --- a/src/constants.js +++ b/src/constants.js @@ -29,6 +29,7 @@ export const PLAYER_STARTING_WEAPONS = [ {type: 'nuke', ammo:1}, {type: 'mirv', ammo:5}, {type: 'xmirv', ammo:3}, + {type: 'leapfrog', ammo:3}, {type: 'smallDirt', ammo:5}, {type: 'dirt', ammo:3}, {type: 'largeDirt', ammo:1}, @@ -44,6 +45,7 @@ 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}}, + leapfrog: {id:'leapfrog', name:'Leapfrog', projectile:{type:'leapfrog', n:3, s:10}, explosion:{type:'blast', r:35}}, 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}}, diff --git a/src/projectiles.js b/src/projectiles.js index 059552a..4fafcca 100644 --- a/src/projectiles.js +++ b/src/projectiles.js @@ -96,4 +96,45 @@ export const PROJECTILE_TYPES = { stop() {}, update() {}, }, + + leapfrog: { + create(spec, player, weapon, ox, oy, a, p, wind) { + const {n, s} = spec; + + return [{ + type:'leapfrog', + n, s, payload:null, + player, weapon, ox, oy, a, p, wind, + }]; + }, + stop() {}, + update(projectile, terrain, projectiles, trajectories, explosions) { + const {player, weapon, ox, oy, a, p, wind, n, s} = projectile; + const projectileType = PROJECTILE_TYPES.normal; + + // FIXME: Ugly + if (!projectile.payload) { + projectile.n--; + projectile.payload = projectileType.create( + {}, player, weapon, ox, oy, a, p, wind, + )[0]; + } + + const alive = projectileType.update( + projectile.payload, terrain, projectiles, trajectories, explosions + ); + + if (!alive) { + projectileType.stop(projectile.payload) + if (n <= 0) return; + + projectile.n--; + projectile.payload = projectileType.create( + {}, player, weapon, projectile.payload.x, projectile.payload.y-2, a, p-s*n, wind, // FIXME: Y Hack + )[0]; + } + + return true; + }, + }, }