From a573f42366dff983980062582b077eec171f567b Mon Sep 17 00:00:00 2001 From: landgreen Date: Sun, 10 Jan 2021 09:58:19 -0800 Subject: [PATCH] diffuse beam optimizations --- js/bullet.js | 95 ++++++++++++++++++++++++++++------------------------ js/level.js | 1 + js/tech.js | 34 +++++++++---------- 3 files changed, 69 insertions(+), 61 deletions(-) diff --git a/js/bullet.js b/js/bullet.js index b5e71b3..0eaf526 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -4000,55 +4000,62 @@ const b = { } else { mech.fireCDcycle = mech.cycle mech.energy -= mech.fieldRegen + tech.laserFieldDrain * tech.isLaserDiode + const range = { + x: 5000 * Math.cos(mech.angle), + y: 5000 * Math.sin(mech.angle) + } + const rangeOffPlus = { + x: 7.5 * Math.cos(mech.angle + Math.PI / 2), + y: 7.5 * Math.sin(mech.angle + Math.PI / 2) + } + const rangeOffMinus = { + x: 7.5 * Math.cos(mech.angle - Math.PI / 2), + y: 7.5 * Math.sin(mech.angle - Math.PI / 2) + } const dmg = 0.55 * tech.laserDamage // 3.5 * 0.55 = 200% more damage + const where = { x: mech.pos.x + 30 * Math.cos(mech.angle), y: mech.pos.y + 30 * Math.sin(mech.angle) } const eye = { - x: mech.pos.x + 16 * Math.cos(mech.angle), - y: mech.pos.y + 16 * Math.sin(mech.angle) + x: mech.pos.x + 15 * Math.cos(mech.angle), + y: mech.pos.y + 15 * Math.sin(mech.angle) } - const wideLaser = function(where = { - x: mech.pos.x + 30 * Math.cos(mech.angle), - y: mech.pos.y + 30 * Math.sin(mech.angle) - }, angle = mech.angle) { - ctx.strokeStyle = "#f00"; - ctx.lineWidth = 8 - ctx.globalAlpha = 0.5; - ctx.beginPath(); - const off = 7.5 - b.laser(where, { - x: eye.x + 3000 * Math.cos(angle), - y: eye.y + 3000 * Math.sin(angle) + ctx.strokeStyle = "#f00"; + ctx.lineWidth = 8 + ctx.globalAlpha = 0.5; + ctx.beginPath(); + if (Matter.Query.ray(map, eye, where).length === 0 && Matter.Query.ray(body, eye, where).length === 0) { + b.laser(eye, { + x: eye.x + range.x, + y: eye.y + range.y }, dmg, 0, true, 0.3) - - for (let i = 1; i < tech.wideLaser; i++) { - let whereOff = Vector.add(where, { - x: i * off * Math.cos(angle + Math.PI / 2), - y: i * off * Math.sin(angle + Math.PI / 2) - }) - if (Matter.Query.ray(map, eye, whereOff).length === 0) { - ctx.moveTo(eye.x, eye.y) - ctx.lineTo(whereOff.x, whereOff.y) - b.laser(whereOff, { - x: whereOff.x + 3000 * Math.cos(angle), - y: whereOff.y + 3000 * Math.sin(angle) - }, dmg, 0, true, 0.3) - } - whereOff = Vector.add(where, { - x: i * off * Math.cos(angle - Math.PI / 2), - y: i * off * Math.sin(angle - Math.PI / 2) - }) - if (Matter.Query.ray(map, eye, whereOff).length === 0) { - ctx.moveTo(eye.x, eye.y) - ctx.lineTo(whereOff.x, whereOff.y) - b.laser(whereOff, { - x: whereOff.x + 3000 * Math.cos(angle), - y: whereOff.y + 3000 * Math.sin(angle) - }, dmg, 0, true, 0.3) - } - } - ctx.stroke(); - ctx.globalAlpha = 1; } - wideLaser(); + for (let i = 1; i < tech.wideLaser; i++) { + let whereOff = Vector.add(where, { + x: i * rangeOffPlus.x, + y: i * rangeOffPlus.y + }) + if (Matter.Query.ray(map, eye, whereOff).length === 0 && Matter.Query.ray(body, eye, whereOff).length === 0) { + ctx.moveTo(eye.x, eye.y) + ctx.lineTo(whereOff.x, whereOff.y) + b.laser(whereOff, { + x: whereOff.x + range.x, + y: whereOff.y + range.y + }, dmg, 0, true, 0.3) + } + whereOff = Vector.add(where, { + x: i * rangeOffMinus.x, + y: i * rangeOffMinus.y + }) + if (Matter.Query.ray(map, eye, whereOff).length === 0 && Matter.Query.ray(body, eye, whereOff).length === 0) { + ctx.moveTo(eye.x, eye.y) + ctx.lineTo(whereOff.x, whereOff.y) + b.laser(whereOff, { + x: whereOff.x + range.x, + y: whereOff.y + range.y + }, dmg, 0, true, 0.3) + } + } + ctx.stroke(); + ctx.globalAlpha = 1; } }, fireHistory() { diff --git a/js/level.js b/js/level.js index 6e24bd8..0e8212d 100644 --- a/js/level.js +++ b/js/level.js @@ -20,6 +20,7 @@ const level = { // b.giveGuns("laser") // tech.isMineSentry = true // tech.giveTech("diffuse beam") + // for (let i = 0; i < 60; i++) tech.giveTech("output coupler") // tech.giveTech("missile-bot") // tech.giveTech("nail-bot") // for (let i = 0; i < 15; i++) tech.giveTech("plasma jet") diff --git a/js/tech.js b/js/tech.js index 8a668cc..40813b8 100644 --- a/js/tech.js +++ b/js/tech.js @@ -2092,6 +2092,23 @@ const tech = { tech.isAoESlow = false } }, + { + name: "radioactive contamination", + description: "after a mob or shield dies,
leftover radiation spreads to a nearby mob", + isGunTech: true, + maxCount: 1, + count: 0, + allowed() { + return tech.haveGunCheck("flechettes") || tech.isNailPoison || tech.isWormholeDamage || tech.isNeutronBomb + }, + requires: "radiation damage source", + effect() { + tech.isRadioactive = true + }, + remove() { + tech.isRadioactive = false + } + }, { name: "anti-shear topology", description: "some bullets last 30% longer
drones, spores, missiles, foam, wave, neutron", @@ -2452,23 +2469,6 @@ const tech = { tech.isFlechetteExplode = false } }, - { - name: "radioactive contamination", - description: "after a mob or shield dies,
leftover radiation spreads to a nearby mob", - isGunTech: true, - maxCount: 1, - count: 0, - allowed() { - return tech.haveGunCheck("flechettes") || tech.isNailPoison || tech.isWormholeDamage || tech.isNeutronBomb - }, - requires: "radiation damage source", - effect() { - tech.isRadioactive = true - }, - remove() { - tech.isRadioactive = false - } - }, { name: "piercing needles", description: "needles penetrate mobs and blocks
potentially hitting multiple targets",