Screen shake
This commit is contained in:
1 parent
0cc5857061
commit
c58749e30f
2 files changed
+19
-1
No files matched your search
@@ -37,3 +37,6 @@ export const PARTICLE_TIME_FACTOR = 13;
|
|||||||
export const PARTICLE_POWER_REDUCTION_FACTOR = 15;
|
export const PARTICLE_POWER_REDUCTION_FACTOR = 15;
|
||||||
export const PARTICLE_WIND_REDUCTION_FACTOR = 3;
|
export const PARTICLE_WIND_REDUCTION_FACTOR = 3;
|
||||||
export const PLAYER_WEAPON_CHANGE_DELAY = 150;
|
export const PLAYER_WEAPON_CHANGE_DELAY = 150;
|
||||||
|
|
||||||
|
export const MAX_EXPLOSION_SHAKE_FACTOR = 60;
|
||||||
|
export const EXPLOSION_SHAKE_REDUCTION_FACTOR = 10;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
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} 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} from './constants.js';
|
||||||
import {createCanvas, drawLine, drawRect, drawText, loop, plot} from './gfx.js';
|
import {createCanvas, drawLine, drawRect, drawText, loop, plot} from './gfx.js';
|
||||||
import {key} from './input.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} from './math.js';
|
||||||
@@ -21,6 +21,7 @@ let wind = 0;
|
|||||||
let fadeCount = 0;
|
let fadeCount = 0;
|
||||||
let lastWeaponChangeTime = 0;
|
let lastWeaponChangeTime = 0;
|
||||||
let particles = [];
|
let particles = [];
|
||||||
|
let screenShake = 0;
|
||||||
|
|
||||||
// Init layers
|
// Init layers
|
||||||
const sky = createSky(W, H);
|
const sky = createSky(W, H);
|
||||||
@@ -173,8 +174,13 @@ function update() {
|
|||||||
|
|
||||||
else if (state === 'explosion') {
|
else if (state === 'explosion') {
|
||||||
const explosionType = EXPLOSION_TYPES[explosion.type];
|
const explosionType = EXPLOSION_TYPES[explosion.type];
|
||||||
|
screenShake = (
|
||||||
|
clamp(0, explosion.r, MAX_EXPLOSION_SHAKE_FACTOR) /
|
||||||
|
EXPLOSION_SHAKE_REDUCTION_FACTOR
|
||||||
|
);
|
||||||
|
|
||||||
if (!explosionType.update(explosion)) {
|
if (!explosionType.update(explosion)) {
|
||||||
|
screenShake = 0;
|
||||||
explosionType.clip(explosion, terrain);
|
explosionType.clip(explosion, terrain);
|
||||||
explosionType.stop(explosion);
|
explosionType.stop(explosion);
|
||||||
for (let player of players) if (!player.dead) {
|
for (let player of players) if (!player.dead) {
|
||||||
@@ -304,6 +310,7 @@ function draw() {
|
|||||||
drawExplosions();
|
drawExplosions();
|
||||||
drawParticles();
|
drawParticles();
|
||||||
drawStatus();
|
drawStatus();
|
||||||
|
drawScreenShake();
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawPlayers() {
|
function drawPlayers() {
|
||||||
@@ -343,6 +350,14 @@ function drawParticles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function drawScreenShake() {
|
||||||
|
const x = randomInt(-screenShake, screenShake);
|
||||||
|
const y = randomInt(-screenShake, screenShake);
|
||||||
|
for (let c of [sky, terrain, projectiles, foreground]) {
|
||||||
|
c.canvas.style.transform = `translate(${x}px, ${y}px)`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function drawStatus() {
|
function drawStatus() {
|
||||||
if (state === 'player-win') {
|
if (state === 'player-win') {
|
||||||
const player = players[currentPlayer];
|
const player = players[currentPlayer];
|
||||||
|
|||||||
Reference in new issue
Block a user