From 5329ecfdcc333c75d430b6f2216394d87c905577 Mon Sep 17 00:00:00 2001 From: esterTion Date: Sun, 28 Mar 2021 18:58:02 +0800 Subject: [PATCH] support reverse section --- main.js | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 4a5a9d1..c660ccb 100644 --- a/main.js +++ b/main.js @@ -33,6 +33,9 @@ let noteList = []; * 2: bpm * 3: met * 5: sfl + * 6: reverse start + * 7: reverse point + * 8: reverse end */ let controlList = []; let noteListForPlayback = []; @@ -42,6 +45,7 @@ let prevIdMap = {} let startedHoldList = {} let startedHoldReverseList = {} let chartHeader = {} +let reverseSection = [] const arrowCanvas = { in: document.createElement('canvas'), @@ -150,6 +154,20 @@ function loadUsingPath() { parseNotesFromFile(music_input.value) setBgm(bgm_input.value) } +music_select.addEventListener('change', e => { + if (!musicTable[music_select.value]) return + const music = musicTable[music_select.value] + diffi_select.children[0].textContent = `Normal (${music.DifficultyNormalLv}) - ${music.NotesDesignerNormal}` + diffi_select.children[1].textContent = `Hard (${music.DifficultyHardLv}) - ${music.NotesDesignerHard}` + diffi_select.children[2].textContent = `Expert (${music.DifficultyExtremeLv}) - ${music.NotesDesignerExpert}` + if (music.DifficultyInfernoLv == "0") { + diffi_select.children[3].setAttribute('disabled', '') + diffi_select.children[3].textContent = 'Inferno' + } else { + diffi_select.children[3].removeAttribute('disabled') + diffi_select.children[3].textContent = `Inferno (${music.DifficultyInfernoLv}) - ${music.NotesDesignerInferno}` + } +}) function setBgm(path) { bgm.src = path @@ -170,6 +188,7 @@ function parseNotesFromText(text) {noteList = []; startedHoldList = {} startedHoldReverseList = {} chartHeader = {} + reverseSection = [] const controlDupFix = {} const lines = text.trim().replace(/ +/g, '\t').split('\n'); @@ -331,6 +350,18 @@ function parseNotesFromText(text) {noteList = []; } }) + // reverse section + const reverseStartList = controlList.filter(i => i.cmdType === '6') + const reversePointList = controlList.filter(i => i.cmdType === '7') + const reverseEndList = controlList.filter(i => i.cmdType === '8') + for (let i=0; i sflTsList[sflOffset].timestamp && (sflOffset === sflTsList.length - 1 || currentTs <= sflTsList[sflOffset + 1].timestamp))) { - for (sflOffset = 0; sflOffset < sflTsList.length - 2; sflOffset++) { + for (sflOffset = 0; sflOffset < sflTsList.length - 1; sflOffset++) { if (currentTs > sflTsList[sflOffset].timestamp && currentTs <= sflTsList[sflOffset + 1].timestamp) { break; } @@ -425,7 +456,14 @@ function render(now) { sfl = sflTsList[sflOffset].sfl } currentTs = now - startTs - currentDistance = (currentTs - sflTsList[sflOffset].timestamp) * sfl + sflTsList[sflOffset].distance + let calcBaseTs = currentTs + for (let i=0; i reverseSection[i][0] && calcBaseTs < reverseSection[i][1]) { + calcBaseTs = reverseSection[i][1] + (reverseSection[i][1] - calcBaseTs) * (reverseSection[i][1] - reverseSection[i][0]) / (reverseSection[i][2] - reverseSection[i][1]) + break + } + } + currentDistance = (calcBaseTs - sflTsList[sflOffset].timestamp) * sfl + sflTsList[sflOffset].distance } previousTs = now const notesToRenderArr = getNotesForDraw(currentDistance)