diff --git a/public/src/js/parsetja.js b/public/src/js/parsetja.js index 6979c81..767456f 100644 --- a/public/src/js/parsetja.js +++ b/public/src/js/parsetja.js @@ -25,6 +25,7 @@ "A": {name: "daiDon", txt: strings.note.daiDon}, "B": {name: "daiKa", txt: strings.note.daiKa} } + this.noteTypes_ex = strings.ex_note; this.courseTypes = { "0": "easy", "1": "normal", @@ -148,7 +149,32 @@ var circles = [] var circleID = 0 var regexAZ = /[A-Z]/ - + var isAllDon = (note_chain, start_pos) => { + for (var i = start_pos; i < note_chain.length; ++i) { + var note = note_chain[i]; + if (note && note.type !== "don" && note.type !== "daiDon") { + return false; + } + } + return true; + } + var checkChain = (note_chain, measure_length, is_last) => { + //console.log(note_chain, measure_length, is_last); + /*if (measure_length >= 24) { + for (var note of note_chain) { + note.text = this.noteTypes_ex[note.type][0]; + } + } else { */ + var alldon_pos = null; + for (var i = 0; i < note_chain.length - (is_last ? 1 : 0); ++i) { + var note = note_chain[i]; + if (alldon_pos === null && is_last && isAllDon(note_chain, i)) { + alldon_pos = i; + } + note.text = this.noteTypes_ex[note.type][alldon_pos != null ? (i - alldon_pos) % 2 : 0]; + } + //} + } var pushMeasure = () => { var note = currentMeasure[0] if(note){ @@ -183,9 +209,11 @@ var msPerMeasure = 60000 * measure / note.bpm ms += msPerMeasure / currentMeasure.length } - for(var i = 0; i < currentMeasure.length; i++){ + var note_chain = []; + for (var i = 0; i < currentMeasure.length; i++){ + //console.log(note_chain.length); var note = currentMeasure[i] - if(note.type){ + if (note.type) { circleID++ var circleObj = new Circle({ id: circleID, @@ -200,13 +228,30 @@ branch: currentBranch, section: note.section }) - if(lastDrumroll === note){ + if (note.type === "don" || note.type === "ka" || note.type === "daiDon" || note.type === "daiKa") { + note_chain.push(circleObj); + } else { + if (note_chain.length > 1 && currentMeasure.length >= 8) { + checkChain(note_chain, currentMeasure.length, false); + } + note_chain = []; + } + if (lastDrumroll === note) { lastDrumroll = circleObj } circles.push(circleObj) + } else if (!(currentMeasure.length >= 24 && (!currentMeasure[i + 1] || currentMeasure[i + 1].type)) + && !(currentMeasure.length >= 48 && (!currentMeasure[i + 2] || currentMeasure[i + 2].type || !currentMeasure[i + 3] || currentMeasure[i + 3].type))) { + if (note_chain.length > 1 && currentMeasure.length >= 8) { + checkChain(note_chain, currentMeasure.length, true); + } + note_chain = []; } } + if (note_chain.length > 1 && currentMeasure.length >= 8) { + checkChain(note_chain, currentMeasure.length, false); + } }else{ var msPerMeasure = 60000 * measure / bpm ms += msPerMeasure diff --git a/public/src/js/strings.js b/public/src/js/strings.js index 5bed612..40a4792 100644 --- a/public/src/js/strings.js +++ b/public/src/js/strings.js @@ -50,6 +50,22 @@ daiDrumroll: "連打(大)ーっ!!", balloon: "ふうせん" } + this.ex_note = { + don: [ + "ド", + "コ" + ], + ka: [ + "カ" + ], + daiDon: [ + "ドン(大)", + "ドン(大)" + ], + daiKa: [ + "カッ(大)" + ] + } this.combo = "コンボ" this.clear = "クリア" this.good = "良" @@ -194,6 +210,22 @@ function StringsEn(){ daiDrumroll: "DRUM ROLLー!!", balloon: "Balloon" } + this.ex_note = { + don: [ + "Do", + "Do" + ], + ka: [ + "Ka" + ], + daiDon: [ + "DON", + "DON" + ], + daiKa: [ + "KA" + ] + } this.combo = "Combo" this.clear = "Clear" this.good = "GOOD" @@ -338,6 +370,22 @@ function StringsCn(){ daiDrumroll: "连打(大)ー!!", balloon: "气球" } + this.ex_note = { + don: [ + "咚", + "咚" + ], + ka: [ + "咔" + ], + daiDon: [ + "咚(大)", + "咚(大)" + ], + daiKa: [ + "咔(大)" + ] + } this.combo = "连段" this.clear = "通关" this.good = "良" @@ -482,6 +530,22 @@ function StringsTw(){ daiDrumroll: "連打(大)ー!!", balloon: "氣球" } + this.ex_note = { + don: [ + "咚", + "咚" + ], + ka: [ + "咔" + ], + daiDon: [ + "咚(大)", + "咚(大)" + ], + daiKa: [ + "咔(大)" + ] + } this.combo = "連段" this.clear = "通關" this.good = "良" @@ -626,6 +690,22 @@ function StringsKo(){ daiDrumroll: "연타(대)ー!!", balloon: "풍선" } + this.ex_note = { + don: [ + "쿠", + "쿠" + ], + ka: [ + "딱" + ], + daiDon: [ + "쿵(대)", + "쿵(대)" + ], + daiKa: [ + "딱(대)" + ] + } this.combo = "콤보" this.clear = "클리어" this.good = "얼쑤"