taiko-web/public/src/js/titlescreen.js

147 lines
4.1 KiB
JavaScript
Raw Normal View History

2018-09-18 00:37:59 +02:00
class Titlescreen{
constructor(...args){
this.init(...args)
}
init(songId){
this.songId = songId
db.getItem("customFolder").then(folder => this.customFolder = folder)
if(!songId){
loader.changePage("titlescreen", false)
loader.screen.style.backgroundImage = ""
this.titleScreen = document.getElementById("title-screen")
this.proceed = document.getElementById("title-proceed")
this.disclaimerText = document.getElementById("title-disclaimer-text")
this.disclaimerCopyright = document.getElementById("title-disclaimer-copyright")
this.logo = new Logo()
}
this.setLang(allStrings[settings.getItem("language")])
if(songId){
if(localStorage.getItem("tutorial") === "true"){
new SongSelect(false, false, this.touched, this.songId)
}else{
new SettingsView(false, true, this.songId)
}
}else{
pageEvents.add(this.titleScreen, ["mousedown", "touchstart"], event => {
if(event.type === "touchstart"){
event.preventDefault()
this.touched = true
}else if(event.type === "mousedown" && event.which !== 1){
return
}
this.onPressed(true)
})
assets.sounds["v_title"].play()
this.keyboard = new Keyboard({
confirm: ["enter", "space", "don_l", "don_r"]
}, this.onPressed.bind(this))
this.gamepad = new Gamepad({
gamepadConfirm: ["a", "b", "x", "y", "start", "ls", "rs"]
}, this.onPressed.bind(this))
if(p2.session){
pageEvents.add(p2, "message", response => {
if(response.type === "songsel"){
this.goNext(true)
}
})
}
pageEvents.send("title-screen")
2018-11-01 23:05:18 +01:00
}
2015-07-17 10:22:46 +02:00
}
onPressed(pressed, name){
if(pressed){
if(name === "gamepadConfirm" && (snd.buffer.context.state === "suspended" || this.customFolder)){
return
}
this.titleScreen.style.cursor = "auto"
this.clean()
if(!this.customFolder || assets.customSongs){
assets.sounds["se_don"].play()
}
this.goNext()
}
2018-09-26 20:30:57 +02:00
}
2018-11-01 23:05:18 +01:00
goNext(fromP2){
if(p2.session && !fromP2){
p2.send("songsel")
}else{
if(fromP2 || this.customFolder || localStorage.getItem("tutorial") === "true"){
if(this.touched){
localStorage.setItem("tutorial", "true")
}
pageEvents.remove(p2, "message")
if(this.customFolder && !fromP2 && !assets.customSongs){
var customSongs = new CustomSongs(this.touched, true, true)
var soundPlayed = false
var noError = true
var promises = []
var allFiles = []
this.customFolder.forEach(file => {
promises.push(customSongs.walkFilesystem(file, undefined, allFiles))
})
Promise.all(promises).then(() => {
assets.sounds["se_don"].play()
soundPlayed = true
return customSongs.importLocal(allFiles)
}).catch(() => {
localStorage.removeItem("customSelected")
db.removeItem("customFolder")
if(!soundPlayed){
assets.sounds["se_don"].play()
}
setTimeout(() => {
new SongSelect(false, false, this.touched, this.songId)
}, 500)
noError = false
}).then(() => {
if(noError){
setTimeout(() => {
Lyrics, search, and other fixes - #LYRIC - Parse #LYRIC commands and apply them to all difficulties that do not have them - #LYRIC command now supports branches - Fix last #LYRIC at the end of the chart getting ignored - Fix the glitchy dragging and dropping of files on the custom song importing page - Fix Ctrl and Shift keys getting stuck on song select when switching tabs with Ctrl(+Shift)+Tab - Search - Fix the search box "random:yes" query to randomize the entire results and not just the first 50 - Add "all:yes" query to the search box to remove the result limit and display all of the results - Fix searching for an invalid query (like "cleared:yes" or ":") unexpectedly returning all the songs - Fix pressing Q then jumping to a song through search not unmuting the sound - Pressing the search key on mobile will hide the keyboard - Fix search tips changing rapidly when the window is resized - Use comments instead of `######` in the issue template so that the warning does not appear in the issue - Fix TJA MAKER: url between angle brackets not working - Add a check for Class field declarations in the browser support warning - Fix gpicker getting stuck if a network error occurs - Fix not being able to replace some assets using a "taiko-web assets" folder - Fix selectable song title not being aligned with the game if the game window is too wide - Allow plugin developers to use the "select" type for the settings options - It uses "options" array and "options_lang" object - Fix plugins not getting removed from the plugin list on syntax error - Fix error messages not working if a default plugin is broken - Fix the start of default plugins not stopping the page from loading on error - Fix not being able to scroll the plugins screen on mobile
2022-07-15 16:00:43 +02:00
new SongSelect("customSongs", false, this.touched)
}, 500)
}
})
}else{
setTimeout(() => {
new SongSelect(false, false, this.touched, this.songId)
}, 500)
}
}else{
setTimeout(() => {
new SettingsView(this.touched, true, this.songId)
}, 500)
}
2018-09-18 00:37:59 +02:00
}
}
2019-04-06 12:19:10 +02:00
setLang(lang, noEvent){
settings.setLang(lang, true)
if(this.songId){
return
}
this.proceed.innerText = strings.titleProceed
this.proceed.setAttribute("alt", strings.titleProceed)
2019-01-28 12:43:18 +01:00
this.disclaimerText.innerText = strings.titleDisclaimer
this.disclaimerText.setAttribute("alt", strings.titleDisclaimer)
this.disclaimerCopyright.innerText = strings.titleCopyright
this.disclaimerCopyright.setAttribute("alt", strings.titleCopyright)
2019-01-28 02:57:18 +01:00
this.logo.updateSubtitle()
}
2018-09-18 00:37:59 +02:00
clean(){
this.keyboard.clean()
2018-09-26 20:30:57 +02:00
this.gamepad.clean()
2019-01-28 02:57:18 +01:00
this.logo.clean()
2019-02-04 10:14:42 +01:00
assets.sounds["v_title"].stop()
2018-10-12 20:04:28 +02:00
pageEvents.remove(this.titleScreen, ["mousedown", "touchstart"])
2018-09-18 00:37:59 +02:00
delete this.titleScreen
delete this.proceed
2019-01-28 12:50:22 +01:00
delete this.titleDisclaimer
delete this.titleCopyright
2018-09-18 00:37:59 +02:00
}
}