Commit b0f7f685 authored by bui's avatar bui Committed by Gitea

Merge branch 'songselect-translatable-song-titles' of LoveEevee/taiko-web into master

parents 93d70dab 6dc555ee
......@@ -166,7 +166,7 @@ def route_api_songs():
categories = {}
def_category = {'title': None, 'title_en': None}
for cat in raw_categories:
categories[cat[0]] = {'title': cat[1], 'title_en': cat[2]}
categories[cat[0]] = cat[1]
raw_song_skins = query_db('select * from song_skins')
song_skins = {}
......@@ -185,15 +185,14 @@ def route_api_songs():
songs_out.append({
'id': song_id,
'title': song[1],
'title_en': song[2],
'title_lang': song[2],
'subtitle': song[3],
'subtitle_en': song[4],
'subtitle_lang': song[4],
'stars': [
song[5], song[6], song[7], song[8], song[9]
],
'preview': preview,
'category': category_out['title'],
'category_en': category_out['title_en'],
'category': category_out,
'type': song_type,
'offset': song[13],
'song_skin': song_skin_out
......
......@@ -33,7 +33,8 @@
max-height: calc(50% + 24vw);
}
.touchp2 #songbg{
height: calc(50% - 5.5vw);
height: calc(50% - 5.9vw);
min-height: 39.5%;
}
.multiplayer.portrait #songbg{
height: calc(50% - 37vw);
......@@ -89,6 +90,9 @@
height: calc(50% - 13.7vw);
min-height: 25.6%;
}
.multiplayer .donbg{
min-height: 27.2%;
}
.portrait .donbg{
height: calc(50% - 48.9vw);
min-height: 22.5%;
......
......@@ -11,7 +11,7 @@
if(touchEnabled){
this.tutorialOuter.classList.add("touch-enabled")
}
this.linkGithub = document.getElementById("link-github")
this.linkIssues = document.getElementById("link-issues")
this.linkEmail = document.getElementById("link-email")
var tutorialTitle = document.getElementById("tutorial-title")
......@@ -29,7 +29,13 @@
this.endButton.innerText = strings.tutorial.ok
this.endButton.setAttribute("alt", strings.tutorial.ok)
pageEvents.add(this.linkGithub, ["click", "touchend"], this.linkButton.bind(this))
var versionUrl = "https://github.com/bui/taiko-web/"
if(gameConfig._version){
versionUrl = gameConfig._version.url
}
this.getLink(this.linkIssues).href = versionUrl + "issues"
pageEvents.add(this.linkIssues, ["click", "touchend"], this.linkButton.bind(this))
pageEvents.add(this.linkEmail, ["click", "touchend"], this.linkButton.bind(this))
pageEvents.once(this.endButton, ["mousedown", "touchstart"]).then(this.onEnd.bind(this))
pageEvents.keyOnce(this, 13, "down").then(this.onEnd.bind(this))
......@@ -141,7 +147,6 @@
}
var issueBody = strings.issueTemplate + "\n\n\n\n" + diag
this.getLink(this.linkGithub).href += "?body=" + encodeURIComponent(issueBody)
this.getLink(this.linkEmail).href += "?body=" + encodeURIComponent(issueBody.replace(/\n/g, "<br>\r\n"))
}
getLink(target){
......@@ -153,7 +158,7 @@
clean(){
cancelTouch = true
this.gamepad.clean()
pageEvents.remove(this.linkGithub, ["click", "touchend"])
pageEvents.remove(this.linkIssues, ["click", "touchend"])
pageEvents.remove(this.linkEmail, ["click", "touchend"])
pageEvents.remove(this.endButton, ["mousedown", "touchstart"])
if(this.textarea){
......@@ -164,7 +169,7 @@
delete this.diagTxt
delete this.version
delete this.tutorialOuter
delete this.linkGithub
delete this.linkIssues
delete this.linkEmail
delete this.textarea
}
......
......@@ -32,13 +32,15 @@ class Controller{
this.playedSounds = {}
}
run(syncWith){
if(syncWith){
this.syncWith = syncWith
}
this.game.run()
this.view.run()
if(syncWith){
syncWith.run()
if(this.multiplayer === 1){
syncWith.run(this)
syncWith.game.elapsedTime = this.game.elapsedTime
syncWith.game.startDate = this.game.startDate
this.syncWith = syncWith
}
requestAnimationFrame(() => {
this.startMainLoop()
......@@ -54,16 +56,20 @@ class Controller{
this.mainLoopRunning = true
this.gameLoop()
this.viewLoop()
this.gameInterval = setInterval(this.gameLoop.bind(this), 1000 / 60)
if(this.multiplayer !== 2){
this.gameInterval = setInterval(this.gameLoop.bind(this), 1000 / 60)
}
}
stopMainLoop(){
this.mainLoopRunning = false
this.mainAsset.stop()
clearInterval(this.gameInterval)
if(this.multiplayer !== 2){
clearInterval(this.gameInterval)
}
}
gameLoop(){
if(this.mainLoopRunning){
if(this.syncWith){
if(this.multiplayer === 1){
this.syncWith.game.elapsedTime = this.game.elapsedTime
this.syncWith.game.startDate = this.game.startDate
}
......@@ -83,6 +89,9 @@ class Controller{
this.game.playMainMusic()
}
}
if(this.multiplayer === 1){
this.syncWith.gameLoop()
}
}
}
viewLoop(){
......@@ -90,7 +99,7 @@ class Controller{
if(this.multiplayer !== 2){
requestAnimationFrame(() => {
this.viewLoop()
if(this.syncWith){
if(this.multiplayer === 1){
this.syncWith.viewLoop()
}
if(this.scoresheet){
......@@ -161,7 +170,7 @@ class Controller{
this.playSound(soundID + meka, time)
}
togglePause(){
if(this.syncWith){
if(this.multiplayer === 1){
this.syncWith.game.togglePause()
}
this.game.togglePause()
......@@ -207,7 +216,7 @@ class Controller{
}
}
clean(){
if(this.syncWith){
if(this.multiplayer === 1){
this.syncWith.clean()
}
this.stopMainLoop()
......
......@@ -43,6 +43,12 @@ class Game{
initTiming(){
// Date when the chrono is started (before the game begins)
var offsetTime = Math.max(0, this.timeForDistanceCircle - this.songData.circles[0].ms) |0
if(this.controller.multiplayer){
var syncWith = this.controller.syncWith
var syncCircles = syncWith.game.songData.circles
var syncOffsetTime = Math.max(0, this.timeForDistanceCircle - syncCircles[0].ms) |0
offsetTime = Math.max(offsetTime, syncOffsetTime)
}
this.elapsedTime = -offsetTime
// The real start for the game will start when chrono will reach 0
this.startDate = Date.now() + offsetTime
......@@ -320,7 +326,7 @@ class Game{
this.musicFadeOut++
}else if(this.musicFadeOut === 1 && ms >= started + 1600){
this.controller.gameEnded()
if(!p2.session){
if(!p2.session && this.controller.multiplayer === 1){
p2.send("gameend")
}
this.musicFadeOut++
......
......@@ -35,33 +35,23 @@
"ura": 4
}
this.categories = {
"j-pop": "J-POP",
"pop": "J-POP",
"アニメ": "アニメ",
"anime": "アニメ",
"アニメ": "アニメ",
"ボーカロイド™曲": "ボーカロイド™曲",
"ボーカロイド曲": "ボーカロイド™曲",
"ボーカロイド": "ボーカロイド™曲",
"vocaloid™ music": "ボーカロイド™曲",
"vocaloid music": "ボーカロイド™曲",
"vocaloid": "ボーカロイド™曲",
"バラエティ": "バラエティ",
"バラエティー": "バラエティ",
"どうよう": "バラエティ",
"童謡・民謡": "バラエティ",
"variety": "バラエティ",
"children": "バラエティ",
"children/folk": "バラエティ",
"children-folk": "バラエティ",
"クラシック": "クラシック",
"クラッシック": "クラシック",
"classical": "クラシック",
"classic": "クラシック",
"ゲームミュージック": "ゲームミュージック",
"game music": "ゲームミュージック",
"ナムコオリジナル": "ナムコオリジナル",
"namco original": "ナムコオリジナル"
"classic": "クラシック"
}
for(var i in allStrings){
for(var ja in allStrings[i].categories){
this.categories[allStrings[i].categories[ja].toLowerCase()] = ja
}
}
for(var i = 0; i < files.length; i++){
......
......@@ -94,11 +94,12 @@ class SongSelect{
this.songs = []
for(let song of assets.songs){
var en = strings.id === "en" && song.title_en
var title = this.getLocalTitle(song.title, song.title_lang)
var subtitle = this.getLocalTitle(title === song.title ? song.subtitle : "", song.subtitle_lang)
this.songs.push({
id: song.id,
title: en ? song.title_en : song.title,
subtitle: en ? song.subtitle_en : song.subtitle,
title: title,
subtitle: subtitle,
skin: song.category in this.songSkin ? this.songSkin[song.category] : this.songSkin.default,
stars: song.stars,
category: song.category,
......@@ -1325,7 +1326,7 @@ class SongSelect{
if(this.selectedDiff === 4 + this.diffOptions.length){
currentDiff = 3
}
if(i === currentSong.p2Cursor){
if(i === currentSong.p2Cursor && p2.socket.readyState === 1){
this.draw.diffCursor({
ctx: ctx,
font: this.font,
......@@ -1349,7 +1350,7 @@ class SongSelect{
font: this.font,
x: _x,
y: _y - 65,
side: currentSong.p2Cursor === currentDiff
side: currentSong.p2Cursor === currentDiff && p2.socket.readyState === 1
})
}
if(highlight){
......@@ -1664,7 +1665,7 @@ class SongSelect{
})
}
this.draw.songFrame(config)
if(config.song.p2Cursor){
if(config.song.p2Cursor && p2.socket.readyState === 1){
this.draw.diffCursor({
ctx: ctx,
font: this.font,
......@@ -1853,6 +1854,22 @@ class SongSelect{
return ((index % length) + length) % length
}
getLocalTitle(title, titleLang){
if(titleLang){
titleLang = titleLang.split("\n")
titleLang.forEach(line => {
var space = line.indexOf(" ")
var id = line.slice(0, space)
if(id === strings.id){
title = line.slice(space + 1)
}else if(titleLang.length === 1 && strings.id === "en" && !(id in allStrings)){
title = line
}
})
}
return title
}
getMS(){
return Date.now()
}
......
......@@ -78,7 +78,7 @@
bugReporting: [
"このシミュレータは現在開発中です。",
"バグが発生した場合は、報告してください。",
"GitHubかメールでバグを報告してください。"
"Gitリポジトリかメールでバグを報告してください。"
],
diagnosticWarning: "以下の端末診断情報も併せて報告してください!",
issueTemplate: "###### 下記の問題を説明してください。 スクリーンショットと診断情報を含めてください。"
......@@ -169,7 +169,7 @@ function StringsEn(){
bugReporting: [
"This simulator is still in development.",
"Please report any bugs you find.",
"You can report bugs either via GitHub or email."
"You can report bugs either via our Git repository or email."
],
diagnosticWarning: "Be sure to include the following diagnostic data!",
issueTemplate: "###### Describe the problem you are having below. Please include a screenshot and the diagnostic information."
......@@ -260,7 +260,7 @@ function StringsCn(){
bugReporting: [
"This simulator is still in development.",
"Please report any bugs you find.",
"You can report bugs either via GitHub or email."
"You can report bugs either via our Git repository or email."
],
diagnosticWarning: "Be sure to include the following diagnostic data!",
issueTemplate: "###### Describe the problem you are having below. Please include a screenshot and the diagnostic information."
......@@ -351,7 +351,7 @@ function StringsTw(){
bugReporting: [
"This simulator is still in development.",
"Please report any bugs you find.",
"You can report bugs either via GitHub or email."
"You can report bugs either via our Git repository or email."
],
diagnosticWarning: "Be sure to include the following diagnostic data!",
issueTemplate: "###### Describe the problem you are having below. Please include a screenshot and the diagnostic information."
......@@ -442,7 +442,7 @@ function StringsKo(){
bugReporting: [
"This simulator is still in development.",
"Please report any bugs you find.",
"You can report bugs either via GitHub or email."
"You can report bugs either via our Git repository or email."
],
diagnosticWarning: "Be sure to include the following diagnostic data!",
issueTemplate: "###### Describe the problem you are having below. Please include a screenshot and the diagnostic information."
......
......@@ -220,7 +220,7 @@
this.drawGogoTime()
if(!touchMultiplayer){
if(!touchMultiplayer || this.multiplayer === 1 && frameTop >= 0){
this.assets.drawAssets("background")
}
......
......@@ -4,8 +4,8 @@
<div id="tutorial-content"></div>
<div id="diag-txt"></div>
<div id="about-link-btns">
<div id="link-github" class="taibtn stroke-sub link-btn" alt="GitHub">
<a href="https://github.com/bui/taiko-web/issues/new" target="_blank">GitHub</a>
<div id="link-issues" class="taibtn stroke-sub link-btn" alt="Issues">
<a target="_blank">Issues</a>
</div>
<div id="link-email" class="taibtn stroke-sub link-btn" alt="taiko@bui.pm">
<a href="mailto:taiko@bui.pm">taiko@bui.pm</a>
......
......@@ -23,7 +23,7 @@
<div id="screen" class="pattern-bg"></div>
<div id="version">
{% if version %}
<a href="https://github.com/bui/taiko-web/commit/{{version.commit}}" target="_blank" id="version-link" class="stroke-sub" alt="taiko-web ver.{{version.version}} ({{version.commit_short}})">taiko-web ver.{{version.version}} ({{version.commit_short}})</a>
<a href="{{version.url}}commit/{{version.commit}}" target="_blank" id="version-link" class="stroke-sub" alt="taiko-web ver.{{version.version}} ({{version.commit_short}})">taiko-web ver.{{version.version}} ({{version.commit_short}})</a>
{% else %}
<a href="https://github.com/bui/taiko-web" target="_blank" id="version-link" class="stroke-sub" alt="taiko-web (unknown version)">taiko-web (unknown version)</a>
{% endif %}
......
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