mirror of
https://github.com/He4eT/DotDashPit.git
synced 2026-05-04 17:37:23 +00:00
game: move effectHandlers
This commit is contained in:
parent
727ea7a260
commit
43e6198e6e
1 changed files with 64 additions and 62 deletions
126
game.js
126
game.js
|
|
@ -232,6 +232,51 @@ const enemyTypes = {
|
||||||
/** @type {Effect[]} */
|
/** @type {Effect[]} */
|
||||||
let effects = []
|
let effects = []
|
||||||
|
|
||||||
|
const effectHandlers = {
|
||||||
|
flash: ({ frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
cls(color)
|
||||||
|
},
|
||||||
|
laser: ({ from, to, frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
line(from.x, from.y, to.x, to.y, color)
|
||||||
|
circ(from.x, from.y, frames.length / 3, color)
|
||||||
|
circ(to.x, to.y, frames.length / 2, color)
|
||||||
|
circb(to.x, to.y, frames.length, color + 3)
|
||||||
|
},
|
||||||
|
nuke: ({ to, frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
circ(to.x, to.y, Math.pow(frames.length, 5), color)
|
||||||
|
},
|
||||||
|
verticalLine: ({ to, frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
rect(0, to.y - frames.length, SCREEN_W, frames.length * 2, color)
|
||||||
|
},
|
||||||
|
horizontalLine: ({ to, frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
rect(to.x - frames.length, 0, frames.length * 2, SCREEN_W, color)
|
||||||
|
},
|
||||||
|
detection: ({ to, frames }) => {
|
||||||
|
const color = frames.shift()
|
||||||
|
const w = arena.spriteHalfSize
|
||||||
|
const d = frames.length + 2 * w
|
||||||
|
const corners = [
|
||||||
|
[+1, +1],
|
||||||
|
[+1, -1],
|
||||||
|
[-1, +1],
|
||||||
|
[-1, -1],
|
||||||
|
]
|
||||||
|
|
||||||
|
corners.forEach(([dx, dy]) => {
|
||||||
|
const x = to.x + dx * d
|
||||||
|
const y = to.y + dy * d
|
||||||
|
|
||||||
|
line(x, y, x - dx * w, y, color)
|
||||||
|
line(x, y, x, y - dy * w, color)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
/* Main Menu */
|
/* Main Menu */
|
||||||
|
|
||||||
function startScreen() {
|
function startScreen() {
|
||||||
|
|
@ -310,6 +355,22 @@ function drawInterface() {
|
||||||
print(player.score.toString().padStart(14, ' '), 152, 125, 6, true)
|
print(player.score.toString().padStart(14, ' '), 152, 125, 6, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function drawMorse(codeString, x, y, color, width) {
|
||||||
|
const code = codeString.slice(-7).split('')
|
||||||
|
const l = code.reduce((acc, c) => acc + (c === '-' ? 4 : 2), 0)
|
||||||
|
let offset = x + 1 + (width ? width / 2 - Math.floor((l - 1) / 2) - 1 : 0)
|
||||||
|
|
||||||
|
code.forEach((c) => {
|
||||||
|
if (c === '-') {
|
||||||
|
rect(offset, y, 3, 1, color)
|
||||||
|
offset += 4
|
||||||
|
} else {
|
||||||
|
rect(offset, y, 1, 1, color)
|
||||||
|
offset += 2
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/* Player */
|
/* Player */
|
||||||
|
|
||||||
function handleMoves() {
|
function handleMoves() {
|
||||||
|
|
@ -463,7 +524,9 @@ function spawnEnemies() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function moveEnemies() {
|
function moveEnemies() {
|
||||||
enemies.forEach((enemy) => enemyTypes[enemy.type].behaviour(enemy))
|
enemies.forEach((enemy) => {
|
||||||
|
enemyTypes[enemy.type].behaviour(enemy)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function destroyEnemiesByLetter(letter) {
|
function destroyEnemiesByLetter(letter) {
|
||||||
|
|
@ -545,69 +608,8 @@ function drawLetters() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawMorse(codeString, x, y, color, width) {
|
|
||||||
const code = codeString.slice(-7).split('')
|
|
||||||
const l = code.reduce((acc, c) => acc + (c === '-' ? 4 : 2), 0)
|
|
||||||
let offset = x + 1 + (width ? width / 2 - Math.floor((l - 1) / 2) - 1 : 0)
|
|
||||||
|
|
||||||
code.forEach((c) => {
|
|
||||||
if (c === '-') {
|
|
||||||
rect(offset, y, 3, 1, color)
|
|
||||||
offset += 4
|
|
||||||
} else {
|
|
||||||
rect(offset, y, 1, 1, color)
|
|
||||||
offset += 2
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Effects */
|
/* Effects */
|
||||||
|
|
||||||
const effectHandlers = {
|
|
||||||
flash: ({ frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
cls(color)
|
|
||||||
},
|
|
||||||
laser: ({ from, to, frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
line(from.x, from.y, to.x, to.y, color)
|
|
||||||
circ(from.x, from.y, frames.length / 3, color)
|
|
||||||
circ(to.x, to.y, frames.length / 2, color)
|
|
||||||
circb(to.x, to.y, frames.length, color + 3)
|
|
||||||
},
|
|
||||||
nuke: ({ to, frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
circ(to.x, to.y, Math.pow(frames.length, 5), color)
|
|
||||||
},
|
|
||||||
verticalLine: ({ to, frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
rect(0, to.y - frames.length, SCREEN_W, frames.length * 2, color)
|
|
||||||
},
|
|
||||||
horizontalLine: ({ to, frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
rect(to.x - frames.length, 0, frames.length * 2, SCREEN_W, color)
|
|
||||||
},
|
|
||||||
detection: ({ to, frames }) => {
|
|
||||||
const color = frames.shift()
|
|
||||||
const w = arena.spriteHalfSize
|
|
||||||
const d = frames.length + 2 * w
|
|
||||||
const corners = [
|
|
||||||
[+1, +1],
|
|
||||||
[+1, -1],
|
|
||||||
[-1, +1],
|
|
||||||
[-1, -1],
|
|
||||||
]
|
|
||||||
|
|
||||||
corners.forEach(([dx, dy]) => {
|
|
||||||
const x = to.x + dx * d
|
|
||||||
const y = to.y + dy * d
|
|
||||||
|
|
||||||
line(x, y, x - dx * w, y, color)
|
|
||||||
line(x, y, x, y - dy * w, color)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawFX() {
|
function drawFX() {
|
||||||
effects
|
effects
|
||||||
.map((effect) => ({
|
.map((effect) => ({
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue