refactor: remove tjaf dependency; add local TJA parser
This commit is contained in:
146
public/src/js/titlescreen.js
Normal file
146
public/src/js/titlescreen.js
Normal file
@@ -0,0 +1,146 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
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(() => {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
setLang(lang, noEvent){
|
||||
settings.setLang(lang, true)
|
||||
if(this.songId){
|
||||
return
|
||||
}
|
||||
this.proceed.innerText = strings.titleProceed
|
||||
this.proceed.setAttribute("alt", strings.titleProceed)
|
||||
|
||||
this.disclaimerText.innerText = strings.titleDisclaimer
|
||||
this.disclaimerText.setAttribute("alt", strings.titleDisclaimer)
|
||||
this.disclaimerCopyright.innerText = strings.titleCopyright
|
||||
this.disclaimerCopyright.setAttribute("alt", strings.titleCopyright)
|
||||
|
||||
this.logo.updateSubtitle()
|
||||
}
|
||||
clean(){
|
||||
this.keyboard.clean()
|
||||
this.gamepad.clean()
|
||||
this.logo.clean()
|
||||
assets.sounds["v_title"].stop()
|
||||
pageEvents.remove(this.titleScreen, ["mousedown", "touchstart"])
|
||||
delete this.titleScreen
|
||||
delete this.proceed
|
||||
delete this.titleDisclaimer
|
||||
delete this.titleCopyright
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user