japanese-drum-game/public/src/js/loadsong.js

110 lines
3.1 KiB
JavaScript
Raw Normal View History

2018-09-11 06:17:13 +08:00
class loadSong{
2018-10-06 01:03:59 +08:00
constructor(selectedSong, autoPlayEnabled, multiplayer, touchEnabled){
2018-09-11 06:17:13 +08:00
this.selectedSong = selectedSong
this.autoPlayEnabled = autoPlayEnabled
2018-10-06 01:03:59 +08:00
this.multiplayer = multiplayer
this.touchEnabled = touchEnabled
2018-09-18 06:37:59 +08:00
loader.changePage("loadsong")
this.run()
2018-09-11 06:17:13 +08:00
}
run(){
var id = this.selectedSong.folder
var promises = []
assets.sounds["start"].play()
2015-07-18 10:57:56 +08:00
2018-09-27 09:04:01 +08:00
promises.push(new Promise((resolve, reject) => {
var img = document.createElement("img")
pageEvents.load(img).then(resolve, () => {
this.selectedSong.defaultBg = true
resolve()
})
img.id = "music-bg"
img.src = "/songs/" + id + "/bg.png"
document.getElementById("assets").appendChild(img)
}))
2015-07-17 16:22:46 +08:00
2018-09-11 06:17:13 +08:00
promises.push(new Promise((resolve, reject) => {
var songObj
assets.songs.forEach(song => {
if(song.id == id){
songObj = song
}
})
if(songObj.sound){
songObj.sound.gain = snd.musicGain
resolve()
}else{
snd.musicGain.load("/songs/" + id + "/main.mp3").then(sound => {
songObj.sound = sound
resolve()
}, reject)
}
2018-09-11 06:17:13 +08:00
}))
2018-10-11 06:13:24 +08:00
promises.push(loader.ajax(this.getSongPath(this.selectedSong)).then(data => {
2018-09-11 06:17:13 +08:00
this.songData = data.replace(/\0/g, "").split("\n")
}))
Promise.all(promises).then(() => {
2018-09-18 06:37:59 +08:00
this.setupMultiplayer()
2018-09-13 01:10:00 +08:00
}, error => {
console.error(error)
2018-09-11 06:17:13 +08:00
alert("An error occurred, please refresh")
})
2015-07-17 16:22:46 +08:00
}
2018-10-11 06:13:24 +08:00
getSongPath(selectedSong){
var directory = "/songs/" + selectedSong.folder + "/"
if(selectedSong.type === "tja"){
return directory + "main.tja"
}else{
return directory + selectedSong.difficulty + ".osu"
}
}
2018-09-13 01:10:00 +08:00
setupMultiplayer(){
if(this.multiplayer){
2018-09-18 06:37:59 +08:00
var loadingText = document.getElementsByClassName("loading-text")[0]
var waitingText = "Waiting for Another Player..."
loadingText.firstChild.data = waitingText
loadingText.setAttribute("alt", waitingText)
2018-09-13 01:10:00 +08:00
this.song2Data = this.songData
this.selectedSong2 = this.selectedSong
2018-09-18 06:37:59 +08:00
pageEvents.add(p2, "message", event => {
if(event.type === "gameload"){
if(event.value === this.selectedSong.difficulty){
2018-09-13 01:10:00 +08:00
p2.send("gamestart")
2018-09-18 06:37:59 +08:00
}else{
this.selectedSong2 = {
title: this.selectedSong.title,
folder: this.selectedSong.folder,
difficulty: event.value
2018-09-18 06:37:59 +08:00
}
loader.ajax(this.getOsuPath(this.selectedSong2)).then(data => {
2018-09-18 06:37:59 +08:00
this.song2Data = data.replace(/\0/g, "").split("\n")
p2.send("gamestart")
}, () => {
p2.send("gamestart")
})
}
}else if(event.type === "gamestart"){
this.clean()
loader.changePage("game")
2018-10-06 01:03:59 +08:00
var taikoGame1 = new Controller(this.selectedSong, this.songData, false, 1, this.touchEnabled)
2018-09-18 06:37:59 +08:00
var taikoGame2 = new Controller(this.selectedSong2, this.song2Data, true, 2)
taikoGame1.run(taikoGame2)
2018-09-13 01:10:00 +08:00
}
2018-09-18 06:37:59 +08:00
})
2018-09-13 01:10:00 +08:00
p2.send("join", {
id: this.selectedSong.folder,
diff: this.selectedSong.difficulty
2018-09-13 01:10:00 +08:00
})
}else{
2018-09-18 06:37:59 +08:00
this.clean()
loader.changePage("game")
2018-10-06 01:03:59 +08:00
var taikoGame = new Controller(this.selectedSong, this.songData, this.autoPlayEnabled, false, this.touchEnabled)
2018-09-13 01:10:00 +08:00
taikoGame.run()
}
}
2018-09-18 06:37:59 +08:00
clean(){
pageEvents.remove(p2, "message")
}
2018-09-13 01:10:00 +08:00
}