diff --git a/constants.js b/constants.js index 57f915d..51af68f 100644 --- a/constants.js +++ b/constants.js @@ -31,6 +31,7 @@ export const PLAYER_FALL_DAMAGE_HEIGHT = 50; export const PLAYER_FALL_DAMAGE_FACTOR = 3; export const PLAYER_WEAPON_CHANGE_DELAY = 150; export const PLAYER_EXPLOSION_PARTICLE_POWER = 500; +export const PLAYER_TANK_BOUNDING_RADIUS = 3; export const PROJECTILE_POWER_REDUCTION_FACTOR = 10; export const PROJECTILE_WIND_REDUCTION_FACTOR = 10; diff --git a/main.js b/main.js index c3cb109..66a20aa 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ -import {H, PROJECTILE_MAX_SOUND_FREQUENCY, MAX_WIND, PROJECTILE_MIN_SOUND_FREQUENCY, PLAYER_COLORS, PLAYER_INITIAL_POWER, PROJECTILE_POWER_REDUCTION_FACTOR, W, Z, PROJECTILE_ITERATIONS_PER_FRAME, PROJECTILE_ITERATION_PROGRESS, PLAYER_MAX_ENERGY, PLAYER_ENERGY_POWER_MULTIPLIER, PLAYER_FALL_DAMAGE_FACTOR, PLAYER_FALL_DAMAGE_HEIGHT, PLAYER_WEAPON_CHANGE_DELAY, PARTICLE_AMOUNT, PROJECTILE_WIND_REDUCTION_FACTOR, PARTICLE_POWER_REDUCTION_FACTOR, PARTICLE_WIND_REDUCTION_FACTOR, PARTICLE_MIN_POWER_FACTOR, PARTICLE_MAX_POWER_FACTOR, PARTICLE_MIN_LIFETIME, PARTICLE_TIME_FACTOR, PLAYER_EXPLOSION_PARTICLE_POWER, EXPLOSION_SHAKE_REDUCTION_FACTOR, MAX_EXPLOSION_SHAKE_FACTOR, TRAJECTORY_FADE_SPEED, PARTICLE_FADE_AMOUNT, TRAJECTORY_FLOAT_SPEED} from './constants.js'; +import {H, PROJECTILE_MAX_SOUND_FREQUENCY, MAX_WIND, PROJECTILE_MIN_SOUND_FREQUENCY, PLAYER_COLORS, PLAYER_INITIAL_POWER, PROJECTILE_POWER_REDUCTION_FACTOR, W, Z, PROJECTILE_ITERATIONS_PER_FRAME, PROJECTILE_ITERATION_PROGRESS, PLAYER_MAX_ENERGY, PLAYER_ENERGY_POWER_MULTIPLIER, PLAYER_FALL_DAMAGE_FACTOR, PLAYER_FALL_DAMAGE_HEIGHT, PLAYER_WEAPON_CHANGE_DELAY, PARTICLE_AMOUNT, PROJECTILE_WIND_REDUCTION_FACTOR, PARTICLE_POWER_REDUCTION_FACTOR, PARTICLE_WIND_REDUCTION_FACTOR, PARTICLE_MIN_POWER_FACTOR, PARTICLE_MAX_POWER_FACTOR, PARTICLE_MIN_LIFETIME, PARTICLE_TIME_FACTOR, PLAYER_EXPLOSION_PARTICLE_POWER, EXPLOSION_SHAKE_REDUCTION_FACTOR, MAX_EXPLOSION_SHAKE_FACTOR, TRAJECTORY_FADE_SPEED, PARTICLE_FADE_AMOUNT, TRAJECTORY_FLOAT_SPEED, PLAYER_TANK_BOUNDING_RADIUS} from './constants.js'; import {createCanvas, drawLine, drawRect, drawText, loop, plot, drawLineVirtual} from './gfx.js'; import {key} from './input.js'; -import {clamp, deg2rad, parable, randomInt, vec, wrap, random} from './math.js'; +import {clamp, deg2rad, parable, randomInt, vec, wrap, random, within} from './math.js'; import {createSky} from './sky.js'; import {audio, createOsc, playTickSound} from './sound.js'; import {collapseTerrain, createTerrain, isTerrain, landHeight, closestLand, clipTerrain} from './terrain.js'; @@ -160,7 +160,11 @@ function update() { projectile.y = y; projectile.osc.frequency.setValueAtTime(f, audio.currentTime); - if (projectile.y > H || isTerrain(terrain, projectile.x, projectile.y)) { + if ( + projectile.y > H || + isTank(projectile.x, projectile.y) || + isTerrain(terrain, projectile.x, projectile.y) + ) { projectile.osc.stop(); const explosionSpec = weapon.explosion; const explosionType = EXPLOSION_TYPES[explosionSpec.type]; @@ -325,6 +329,14 @@ function updateParticles() { } } +function isTank(x, y) { + for (let player of players) { + if (within(x, y, player.x, player.y, PLAYER_TANK_BOUNDING_RADIUS)) { + return true; + } + } +} + function draw() { if (idle && particles.length===0) return; foreground.clearRect(0, 0, W, H); diff --git a/weapons.js b/weapons.js index 544b270..95b7282 100644 --- a/weapons.js +++ b/weapons.js @@ -77,8 +77,13 @@ export const EXPLOSION_TYPES = { clipTerrain(terrain, (ctx) => drawExplosion(ctx, x, y, cr)); }, damage(explosion, player) { - if (within(explosion.x, explosion.y, player.x, player.y, explosion.r)) { + if (within(explosion.x, explosion.y, player.x-3, player.y, explosion.r)) { return 100; + } else if ( + within(explosion.x, explosion.y, player.x-3, player.y, explosion.r) || + within(explosion.x, explosion.y, player.x+3, player.y, explosion.r) + ) { + return 50; } } },