kill notes one by one

This commit is contained in:
Adrien MALINGREY 2024-08-27 02:09:18 +02:00
parent fd8d1ba292
commit f7d08e84fd

32
app.js
View File

@ -1,6 +1,6 @@
const MAX_LEVEL = 3 const MAX_LEVEL = 3
const DRAW_PERIOD = 0.04 // s const DRAW_PERIOD = 0.04 // s
const UPDATE_PERIOD = 0.01 // s const UPDATE_PERIOD = 0.04 // s
const FLOOR = 400 // px const FLOOR = 400 // px
const FIRST_NOTE = 48 // C2 const FIRST_NOTE = 48 // C2
const LAST_NOTE = 73 // C4 const LAST_NOTE = 73 // C4
@ -420,7 +420,7 @@ async function nextLevel() {
midiSong = await Midi.fromUrl(`midi/${level}.mid`) midiSong = await Midi.fromUrl(`midi/${level}.mid`)
levelTitle.innerText = `Niveau ${level}` levelTitle.innerText = `Niveau ${level}`
songNameTitle.innerText = midiSong.name songNameTitle.innerText = midiSong.name
speed = 0.04 * FLOOR / midiSong.header.tempos[0].bpm speed = UPDATE_PERIOD * FLOOR / midiSong.header.tempos[0].bpm
noteSprites = [] noteSprites = []
midiSong.tracks.forEach(track => { midiSong.tracks.forEach(track => {
//console.log(track.name) //console.log(track.name)
@ -460,35 +460,11 @@ function update() {
}) })
noteSprites = noteSprites.filter(note => note.y < FLOOR) noteSprites = noteSprites.filter(note => note.y < FLOOR)
/*cannonSprites.forEach(cannonSprite => {
let noteSprite = noteSprites.find(noteSprite => noteSprite.note == cannonSprite.note)
if (noteSprite) {
noteSprite.shot = cannonSprite.shooting
if (noteSprite.shot) {
noteSprite.duration -= UPDATE_PERIOD
if (noteSprite.duration > 0) {
playNote(cannonSprite.note)
cannonSprite.impactY = noteSprite.y
} else {
stopNote(cannonSprite.note)
let explosionSprite = noteSprite.explose()
explosionSprites.push(explosionSprite)
explosionSprite.play().then(() => explosionSprites.remove(explosionSprite))
noteSprites.remove(noteSprite)
}
} else {
stopNote(cannonSprite.note)
}
} else {
stopNote(cannonSprite.note)
cannonSprite.impactY = 0
}
})*/
cannonSprites.filter(cannonSprite => cannonSprite.shooting).forEach(cannonSprite => { cannonSprites.filter(cannonSprite => cannonSprite.shooting).forEach(cannonSprite => {
let noteSprite = noteSprites.find(noteSprite => noteSprite.note == cannonSprite.note) let noteSprite = noteSprites.find(noteSprite => noteSprite.note == cannonSprite.note)
if (noteSprite) { if (noteSprite && !noteSprite.shot) {
playNote(noteSprite.note, noteSprite.velocity, noteSprite.duration) playNote(noteSprite.note, noteSprite.velocity, noteSprite.duration)
cannonSprite.impactY = noteSprite.y
noteSprite.shot = true noteSprite.shot = true
window.setTimeout(() => { window.setTimeout(() => {
noteSprites.remove(noteSprite) noteSprites.remove(noteSprite)