Commit 3c701dc2 authored by Bui's avatar Bui Committed by GitHub

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

View: Add category info
parents a3ebf990 0533ae77
...@@ -3,17 +3,17 @@ A web version of Taiko no Tatsujin ...@@ -3,17 +3,17 @@ 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 )
When inserting song rows, leave any difficulty columns as NULL if you don't intend to add notecharts for them. When inserting song rows, leave any difficulty columns as NULL if you don't intend to add note charts for them.
Each song's data is contained within a directory under `public/songs/`. For example: Each song's data is contained within a directory under `public/songs/`. For example:
......
...@@ -48,6 +48,7 @@ ...@@ -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){
......
...@@ -68,8 +68,7 @@ ...@@ -68,8 +68,7 @@
em: /[mwmw]/, em: /[mwmw]/,
emCap: /[MWMW]/, emCap: /[MWMW]/,
rWidth: /[abdfIjo-rtvabdfIjo-rtv]/, rWidth: /[abdfIjo-rtvabdfIjo-rtv]/,
lWidth: /[ilil]/, lWidth: /[ilil]/
uppercaseDigit: /[A-ZA-Z0-90-9]/
} }
var numbersFull = "0123456789" var numbersFull = "0123456789"
...@@ -548,6 +547,9 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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
}, [ }, [
......
...@@ -16,6 +16,40 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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, var bg = assets.image["bg_genre_" + catId].src
"ゲームミュージック": 5,
"ナムコオリジナル": 6
}
var catId = 7
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 + "')"
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment