2018-09-11 06:17:13 +08:00
|
|
|
class loadSong{
|
2018-09-13 01:10:00 +08:00
|
|
|
constructor(selectedSong, autoPlayEnabled, multiplayer){
|
2018-09-11 06:17:13 +08:00
|
|
|
this.selectedSong = selectedSong
|
2018-09-13 01:10:00 +08:00
|
|
|
this.multiplayer = multiplayer
|
2018-09-11 06:17:13 +08:00
|
|
|
this.autoPlayEnabled = autoPlayEnabled
|
2018-09-13 01:10:00 +08:00
|
|
|
this.diff = this.selectedSong.difficulty.slice(0, -4)
|
2018-09-11 06:17:13 +08:00
|
|
|
this.songFilePath = "/songs/" + this.selectedSong.folder + "/" + this.selectedSong.difficulty
|
|
|
|
$("#screen").load("/src/views/loadsong.html", () => {
|
|
|
|
this.run()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
run(){
|
|
|
|
var id = this.selectedSong.folder
|
|
|
|
var promises = []
|
|
|
|
assets.sounds["start"].play()
|
2015-07-18 10:57:56 +08:00
|
|
|
|
2018-09-11 06:17:13 +08:00
|
|
|
var img = document.createElement("img")
|
|
|
|
promises.push(promiseLoad(img))
|
|
|
|
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-08-29 13:55:16 +08:00
|
|
|
}
|
2018-09-11 06:17:13 +08:00
|
|
|
}))
|
2018-08-29 13:55:16 +08:00
|
|
|
|
2018-09-11 06:17:13 +08:00
|
|
|
promises.push(ajax(this.songFilePath).then(data => {
|
|
|
|
this.songData = data.replace(/\0/g, "").split("\n")
|
|
|
|
}))
|
2015-07-17 16:22:46 +08:00
|
|
|
|
2018-09-11 06:17:13 +08:00
|
|
|
Promise.all(promises).then(() => {
|
|
|
|
$("#screen").load("/src/views/game.html", () => {
|
2018-09-13 01:10:00 +08:00
|
|
|
this.setupMultiplayer()
|
2018-09-11 06:17:13 +08:00
|
|
|
})
|
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-09-13 01:10:00 +08:00
|
|
|
setupMultiplayer(){
|
|
|
|
if(this.multiplayer){
|
|
|
|
this.song2Data = this.songData
|
|
|
|
this.selectedSong2 = this.selectedSong
|
|
|
|
p2.onmessage("gamestart", () => {
|
|
|
|
var taikoGame1 = new Controller(this.selectedSong, this.songData, false, 1)
|
|
|
|
var taikoGame2 = new Controller(this.selectedSong2, this.song2Data, true, 2)
|
|
|
|
taikoGame1.run(taikoGame2)
|
|
|
|
}, true)
|
|
|
|
p2.onmessage("gameload", response => {
|
|
|
|
if(response == this.diff){
|
|
|
|
p2.send("gamestart")
|
|
|
|
}else{
|
|
|
|
this.selectedSong2 = {
|
|
|
|
title: this.selectedSong.title,
|
|
|
|
folder: this.selectedSong.folder,
|
|
|
|
difficulty: response + ".osu"
|
|
|
|
}
|
|
|
|
ajax("/songs/" + this.selectedSong2.folder + "/" + this.selectedSong2.difficulty).then(data => {
|
|
|
|
this.song2Data = data.replace(/\0/g, "").split("\n")
|
|
|
|
p2.send("gamestart")
|
|
|
|
}, () => {
|
|
|
|
p2.send("gamestart")
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}, true)
|
|
|
|
p2.send("join", {
|
|
|
|
id: this.selectedSong.folder,
|
|
|
|
diff: this.diff
|
|
|
|
})
|
|
|
|
}else{
|
|
|
|
var taikoGame = new Controller(this.selectedSong, this.songData, this.autoPlayEnabled)
|
|
|
|
taikoGame.run()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|