let course_db, music_db;
let version_name = ["", "Booth", "Infinite Infection", "Gravity Wars", "Heavenly Haven", "Vividwave", "Exceed Gear"];
let ii = [];
let gw = [];
let hh = [];
let vw = [];
let eg = [];
let special_name = {
"4":{},
"5":{
"13": "U.S.O",
"14": "",
"15": "蘭 華",
"16": "",
},
"6":{
"13": "BMK2021",
},
}
function zeroPad(num, places) {
let zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
function getSkillAsset(skill, special_name) {
// return "static/asset/skill_lv/skill_" + zeroPad(skill, 2) + ".png";
let t = $('
')
let c = $('
![]()
')
let p = "";
if(special_name != undefined){
p = special_name;
}
console.log(p);
let canvas = document.createElement("canvas");
canvas.width = 228;
canvas.height = 66;
loadImage("static/asset/skill_lv/skill_" + zeroPad(skill, 2) + ".png").then(image => {
let ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0);
ctx.font = "40px course";
let gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
gradient.addColorStop("0.2", "grey");
gradient.addColorStop("0.5", "white");
gradient.addColorStop("0.7", "grey");
ctx.fillStyle = gradient;
ctx.textAlign = "center";
ctx.fillText(p, 133, 47);
c.attr("src", canvas.toDataURL());
})
// return t.append(c);
return c;
}
function getMedalAsset(medal) {
return "static/asset/mark_" + medal + ".png";
}
function getRateAsset(rate) {
return "static/asset/skill_num/num_mmscore_" + rate + ".png";
}
function getRate(rate) {
let rateArray = Array.from(rate.toString());
switch (rateArray.length) {
case 1:
rateArray[2] = rateArray[0];
rateArray[0] = rateArray[1] = 0;
break;
case 2:
rateArray[2] = rateArray[1];
rateArray[1] = rateArray[0];
rateArray[0] = 0;
break;
}
let c = $('
![]()
');
let canvas = document.createElement("canvas");
canvas.width = 188;
canvas.height = 52;
loadImage(getRateAsset(rateArray[0])).then(image => {
let ctx = canvas.getContext("2d");
if(rateArray[0] == 0){
ctx.globalAlpha = 0.4;
}else{
ctx.globalAlpha = 1;
}
ctx.drawImage(image, 0, 0);
}).finally(() => {
loadImage(getRateAsset(rateArray[1])).then(image => {
let ctx = canvas.getContext("2d");
ctx.globalAlpha = 1;
ctx.drawImage(image, 52, 0);
}).finally(() => {
loadImage(getRateAsset(rateArray[2])).then(image => {
let ctx = canvas.getContext("2d");
ctx.drawImage(image, 104, 0);
}).finally(() => {
loadImage("static/asset/skill_tex_percent.png").then(image => {
let ctx = canvas.getContext("2d");
ctx.drawImage(image, 156, 24);
c.attr("src", canvas.toDataURL());
})
})
})
})
// return $('
').append(
// $('
').attr('src', getRateAsset(rateArray[0]))
// .attr('style', "height: 50px;")
// ).append(
// $('
').attr('src', getRateAsset(rateArray[1]))
// .attr('style', "height: 50px;")
// ).append(
// $('
').attr('src', getRateAsset(rateArray[2]))
// .attr('style', "height: 50px;")
// ).append(
// $('
').attr('src', "static/asset/skill_tex_percent.png")
// .attr('style', "height: 32px;")
// ).attr('style', "vertical-align: middle;height:100%;")
return c;
}
function getSongLevel(musicid, type) {
let result = music_db["mdb"]["music"].filter(object => object["@id"] == musicid);
let resultDifficulty = result[0]["difficulty"];
console.log(result);
switch (type) {
case 0:
return resultDifficulty["novice"]["difnum"]["#text"];
case 1:
return resultDifficulty["advanced"]["difnum"]["#text"];
case 2:
return resultDifficulty["exhaust"]["difnum"]["#text"];
case 3:
return resultDifficulty["infinite"]["difnum"]["#text"];
case 4:
return resultDifficulty["maximum"]["difnum"]["#text"];
}
//console.log(result);
}
function getSongName(musicid) {
//console.log(music_db["mdb"]["music"])
console.log(musicid);
let result = music_db["mdb"]["music"].filter(object => object["@id"] == musicid);
return result[0]["info"]["title_name"]
//console.log(result);
}
function getDifficulty(musicid, type) {
let result = music_db["mdb"]["music"].filter(object => object["@id"] == musicid);
let inf_ver = result[0]["info"]["inf_ver"]["#text"];
console.log([type, inf_ver]);
switch (type) {
case 0:
return "NOV";
case 1:
return "ADV";
case 2:
return "EXH";
case 3:
{
switch (inf_ver) {
case "2":
return "INF";
case "3":
return "GRV";
case "4":
return "HVN";
case "5":
return "VVD";
case "6":
return "XCD";
}
}
case 4:
return "MXM";
}
}
function loadImage(url) {
return new Promise(resolve => {
const image = new Image();
image.addEventListener('load', () => {
resolve(image);
});
image.src = url;
});
}
function getDifficultyAsset(type, level) {
let t = $('')
let c = $('
![]()
')
// ).append(
// $('
').append(level)
// .attr("style", `position:absolute;
// text-align:right;
// top:1px;
// width: 100%;
// font-family:\"testfont\";
// font-weight:\"bold\";
// color:white;`)
// ).attr("style", "position: relative; width: 100%; contain: size;");
let canvas = document.createElement("canvas");
canvas.width = 108;
canvas.height = 26;
loadImage("static/asset/difficulty/level_small_" + type + ".png").then(image => {
// return new Promise(resolve => {
// let font = new FontFace("number-font", "url(static/asset/css/font/0001.ttf)");
// font.load().then(font => {
// resolve(image, font);
// });
// })
let ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0);
ctx.font = "17px testfont";
ctx.fillStyle = "white";
ctx.textAlign = "center";
ctx.fillText(level, 90, 19.3);
c.attr("src", canvas.toDataURL());
})
// .then((image, font) => {
// });
return t.append(c);
}
function getTrackInfo(track) {
let currentTrack = {};
currentTrack.name = getSongName(track.mid);
currentTrack.mid = track.mid;
currentTrack.type = getDifficulty(track.mid, track.mty);
currentTrack.level = getSongLevel(track.mid, track.mty);
return currentTrack;
}
function getCourseInfo(sid, cid, version) {
let course = {}
let courseVersionFiltered = course_db.courseData.filter(function(a) {
return a.version == version;
});
console.log(courseVersionFiltered);
let courseSeasonFiltered = courseVersionFiltered[0].info.filter(function(a) {
return a.id == sid;
});
console.log(courseSeasonFiltered);
if (courseSeasonFiltered.length == 0) { //custom
course.seasonName = "Custom Season";
course.skillName = "Custom Skill";
course.level = 0;
let tracksInfo = [];
// for (let i in courseLevelFiltered.tracks) {
tracksInfo.push(getTrackInfo(
[{
mid: 2,
type: 0
}, {
mid: 2,
type: 0
}, {
mid: 2,
type: 0
}]
));
// }
course.tracks = tracksInfo;
return course;
}
course.seasonName = courseSeasonFiltered[0].name;
let courseLevelFiltered = courseSeasonFiltered[0].courses.filter(function(a) {
return a.id == cid;
});
courseLevelFiltered = courseLevelFiltered[0] ? courseLevelFiltered[0] : 0;
console.log(courseLevelFiltered);
course.skillName = courseLevelFiltered.name;
let tracksInfo = [];
for (let i in courseLevelFiltered.tracks) {
tracksInfo.push(getTrackInfo(courseLevelFiltered.tracks[i]));
}
course.level = courseLevelFiltered.level;
course.tracks = tracksInfo;
console.log(courseLevelFiltered.special_name);
if(special_name[`${version}`][`${courseLevelFiltered.nameID}`] != undefined){
course.specialName = special_name[`${version}`][`${courseLevelFiltered.nameID}`];
}
console.log(course);
return course;
}
function setCourseInfo(courseArray) {
let courseCtx = $('#course_content');
courseCtx.empty();
console.log(courseArray);
for (let i in courseArray) {
let courseSeason = courseArray[i].sid;
let cid = courseArray[i].cid;
let version = courseArray[i].version;
let score = courseArray[i].score;
let rate = courseArray[i].rate;
let info = getCourseInfo(courseSeason, cid, version);
let clear_medal = courseArray[i].clear;
let clear_rate = Math.trunc(courseArray[i].rate / 100);
courseCtx.append(
$('
').append(
$('
').append(
$('