Merge pull request #77 from LoveEevee/view-add-category-info

View: Add category info
This commit is contained in:
Bui 2018-11-21 10:01:55 +00:00 committed by GitHub
commit 3c701dc22e
4 changed files with 95 additions and 27 deletions

View File

@ -3,12 +3,12 @@ A web version of Taiko no Tatsujin
Running instance: https://taiko.bui.pm Running instance: https://taiko.bui.pm
Still in developement. Works best with Chrome. Still in development. Works best with Chrome.
## Setup ## Setup
**Requirements**: Python 2.7, [Flask](https://pypi.org/project/Flask/) **Requirements**: Python 2.7, [Flask](https://pypi.org/project/Flask/)
Create a SQLite databse named `taiko.db` with the following schema: Create a SQLite database named `taiko.db` with the following schema:
CREATE TABLE "songs" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `title_en` TEXT, `subtitle` TEXT, `subtitle_en` TEXT, `easy` INTEGER, `normal` INTEGER, `hard` INTEGER, `oni` INTEGER, `ura` INTEGER, `enabled` INTEGER NOT NULL, `category` INTEGER, `type` TEXT , `offset` REAL NOT NULL ) CREATE TABLE "songs" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `title_en` TEXT, `subtitle` TEXT, `subtitle_en` TEXT, `easy` INTEGER, `normal` INTEGER, `hard` INTEGER, `oni` INTEGER, `ura` INTEGER, `enabled` INTEGER NOT NULL, `category` INTEGER, `type` TEXT , `offset` REAL NOT NULL )
CREATE TABLE "categories" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `title_en` TEXT NOT NULL ) CREATE TABLE "categories" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `title_en` TEXT NOT NULL )

View File

@ -48,6 +48,7 @@
diag.push("```") diag.push("```")
diag.push("Taiko-Web version: " + this.version) diag.push("Taiko-Web version: " + this.version)
diag.push("URL: " + location.href)
diag.push("User agent: " + navigator.userAgent) diag.push("User agent: " + navigator.userAgent)
diag.push("Screen size: " + innerWidth + "x" + innerHeight + ", outer: " + outerWidth + "x" + outerHeight + ", ratio: " + (window.devicePixelRatio || 1).toFixed(2)) diag.push("Screen size: " + innerWidth + "x" + innerHeight + ", outer: " + outerWidth + "x" + outerHeight + ", ratio: " + (window.devicePixelRatio || 1).toFixed(2))
if(this.touchEnabled){ if(this.touchEnabled){

View File

@ -68,8 +68,7 @@
em: /[mw]/, em: /[mw]/,
emCap: /[MW]/, emCap: /[MW]/,
rWidth: /[abdfIjo-rtv-]/, rWidth: /[abdfIjo-rtv-]/,
lWidth: /[il]/, lWidth: /[il]/
uppercaseDigit: /[A-Z-0-9-]/
} }
var numbersFull = "" var numbersFull = ""
@ -548,6 +547,9 @@
drawn.push({text: ",", x: 0, y: -15, w: 7, scale: [1, 0.7]}) drawn.push({text: ",", x: 0, y: -15, w: 7, scale: [1, 0.7]})
}else if(symbol === "∀"){ }else if(symbol === "∀"){
drawn.push({text: symbol, x: -3, y: 0, w: 55}) drawn.push({text: symbol, x: -3, y: 0, w: 55})
}else if(r.comma.test(symbol)){
// Comma, full stop
drawn.push({text: symbol, x: 0, y: 0, w: 13})
}else if(r.en.test(symbol)){ }else if(r.en.test(symbol)){
// n-width // n-width
drawn.push({text: symbol, x: 0, y: 0, w: 28}) drawn.push({text: symbol, x: 0, y: 0, w: 28})
@ -563,11 +565,15 @@
}else if(r.emCap.test(symbol)){ }else if(r.emCap.test(symbol)){
// m-width uppercase // m-width uppercase
drawn.push({text: symbol, x: 0, y: 0, w: 38}) drawn.push({text: symbol, x: 0, y: 0, w: 38})
}else if(r.numbers.test(symbol)){
// Numbers
var number = this.numbersFullToHalf[symbol]
drawn.push({text: number, x: 0, y: 0, w: 32})
}else if(r.degree.test(symbol)){ }else if(r.degree.test(symbol)){
// Degree // Degree
drawn.push({text: symbol, x: 5, y: 0, w: 0}) drawn.push({text: symbol, x: 5, y: 0, w: 0})
}else if(r.uppercaseDigit.test(symbol)){ }else if(r.uppercase.test(symbol)){
// Latin script uppercase, digits // Latin script uppercase
drawn.push({text: symbol, x: 0, y: 0, w: 32}) drawn.push({text: symbol, x: 0, y: 0, w: 32})
}else if(r.exclamation.test(symbol)){ }else if(r.exclamation.test(symbol)){
// Exclamation mark // Exclamation mark
@ -598,7 +604,7 @@
if(config.letterSpacing){ if(config.letterSpacing){
symbol.w += config.letterSpacing symbol.w += config.letterSpacing
} }
drawnWidth += symbol.w drawnWidth += symbol.w * mul
} }
ctx.translate(config.x, config.y) ctx.translate(config.x, config.y)
@ -651,7 +657,7 @@
var offsetX = 0 var offsetX = 0
for(let symbol of drawn){ for(let symbol of drawn){
var saved = false var saved = false
var currentX = offsetX + symbol.x + (layer.x || 0) + symbol.w / 2 var currentX = offsetX + symbol.x * mul + (layer.x || 0) + symbol.w * mul / 2
var currentY = symbol.y + (layer.y || 0) var currentY = symbol.y + (layer.y || 0)
var isLatin = r.latin.test(symbol.text) var isLatin = r.latin.test(symbol.text)
@ -1104,7 +1110,7 @@
text: "クリア", text: "クリア",
fontSize: 18, fontSize: 18,
fontFamily: config.font, fontFamily: config.font,
x: gaugeClear - 6, x: gaugeClear + 3,
y: config.multiplayer ? 22 : 11, y: config.multiplayer ? 22 : 11,
letterSpacing: -2 letterSpacing: -2
}, [ }, [

View File

@ -16,6 +16,40 @@
"はじめからやりなおす", "はじめからやりなおす",
"「曲をえらぶ」にもどる" "「曲をえらぶ」にもどる"
] ]
this.categories = {
"J-POP": {
sort: 0,
infoFill: "#004d68"
},
"アニメ": {
sort: 1,
infoFill: "#9c4002"
},
"ボーカロイド™曲": {
sort: 2,
infoFill: "#546184"
},
"バラエティ": {
sort: 3,
infoFill: "#3c6800"
},
"クラシック": {
sort: 4,
infoFill: "#865800"
},
"ゲームミュージック": {
sort: 5,
infoFill: "#4f2886"
},
"ナムコオリジナル": {
sort: 6,
infoFill: "#961e00"
},
"default": {
sort: 7,
infoFill: "#656565"
}
}
this.currentScore = { this.currentScore = {
ms: -Infinity, ms: -Infinity,
@ -128,7 +162,7 @@
this.canvas.style.width = (winW / this.pixelRatio) + "px" this.canvas.style.width = (winW / this.pixelRatio) + "px"
this.canvas.style.height = (winH / this.pixelRatio) + "px" this.canvas.style.height = (winH / this.pixelRatio) + "px"
this.titleCache.resize(640, 80, ratio) this.titleCache.resize(640, 90, ratio)
} }
if(!this.multiplayer){ if(!this.multiplayer){
this.pauseCache.resize(81 * this.pauseOptions.length * 2, 464, ratio) this.pauseCache.resize(81 * this.pauseOptions.length * 2, 464, ratio)
@ -179,12 +213,14 @@
x: winW - (touchMultiplayer && fullScreenSupported ? 750 : 650), x: winW - (touchMultiplayer && fullScreenSupported ? 750 : 650),
y: touchMultiplayer ? 75 : 10, y: touchMultiplayer ? 75 : 10,
w: 640, w: 640,
h: 80, h: 90,
id: "title" id: "title"
}, ctx => { }, ctx => {
var selectedSong = this.controller.selectedSong
this.draw.layeredText({ this.draw.layeredText({
ctx: ctx, ctx: ctx,
text: this.controller.selectedSong.title, text: selectedSong.title,
fontSize: 40, fontSize: 40,
fontFamily: this.font, fontFamily: this.font,
x: 620, x: 620,
@ -195,6 +231,38 @@
{outline: "#000", letterBorder: 10}, {outline: "#000", letterBorder: 10},
{fill: "#fff"} {fill: "#fff"}
]) ])
if(selectedSong.category){
var _w = 142
var _h = 22
var _x = 628 - _w
var _y = 88 - _h
if(selectedSong.category in this.categories){
ctx.fillStyle = this.categories[selectedSong.category].infoFill
}else{
ctx.fillStyle = this.categories.default.infoFill
}
this.draw.roundedRect({
ctx: ctx,
x: _x, y: _y,
w: _w, h: _h,
radius: 11
})
ctx.fill()
this.draw.layeredText({
ctx: ctx,
text: selectedSong.category,
fontSize: 15,
fontFamily: this.font,
align: "center",
x: _x + _w / 2,
y: _y + 3,
width: 122
}, [
{fill: "#fff"}
])
}
}) })
} }
@ -885,23 +953,16 @@
setBackground(){ setBackground(){
var gameDiv = document.getElementById("game") var gameDiv = document.getElementById("game")
var selectedSong = this.controller.selectedSong var selectedSong = this.controller.selectedSong
var bg = gameConfig.songs_baseurl + selectedSong.folder + "/bg.png"
if(selectedSong.defaultBg){ if(selectedSong.defaultBg){
var categories = { if(selectedSong.category in this.categories){
"J-POP": 0, var catId = this.categories[selectedSong.category].sort
"アニメ": 1, }else{
"ボーカロイド™曲": 2, var catId = this.categories.default.sort
"バラエティ": 3,
"クラシック": 4,
"ゲームミュージック": 5,
"ナムコオリジナル": 6
} }
var catId = 7 var bg = assets.image["bg_genre_" + catId].src
if(selectedSong.category in categories){
catId = categories[selectedSong.category]
}
bg = assets.image["bg_genre_" + catId].src
gameDiv.classList.add("default-bg") gameDiv.classList.add("default-bg")
}else{
var bg = gameConfig.songs_baseurl + selectedSong.folder + "/bg.png"
} }
gameDiv.style.backgroundImage = "url('" + bg + "')" gameDiv.style.backgroundImage = "url('" + bg + "')"
} }