2018-09-13 01:10:00 +08:00
|
|
|
class Controller{
|
|
|
|
constructor(selectedSong, songData, autoPlayEnabled, multiplayer){
|
|
|
|
this.selectedSong = selectedSong
|
|
|
|
this.songData = songData
|
|
|
|
this.autoPlayEnabled = autoPlayEnabled
|
|
|
|
this.multiplayer = multiplayer
|
|
|
|
|
|
|
|
var backgroundURL = "/songs/" + this.selectedSong.folder + "/bg.png"
|
|
|
|
var songParser = new ParseSong(songData)
|
|
|
|
this.parsedSongData = songParser.getData()
|
|
|
|
|
|
|
|
assets.songs.forEach(song => {
|
|
|
|
if(song.id == this.selectedSong.folder){
|
|
|
|
this.mainAsset = song.sound
|
|
|
|
}
|
|
|
|
})
|
2015-07-17 16:22:46 +08:00
|
|
|
|
2018-09-13 01:10:00 +08:00
|
|
|
this.game = new Game(this, this.selectedSong, this.parsedSongData)
|
|
|
|
this.view = new View(this, backgroundURL, this.selectedSong.title, this.selectedSong.difficulty)
|
|
|
|
this.mekadon = new Mekadon(this, this.game)
|
|
|
|
this.keyboard = new Keyboard(this)
|
|
|
|
}
|
|
|
|
run(syncWith){
|
|
|
|
this.loadUIEvents()
|
|
|
|
this.game.run()
|
|
|
|
this.view.run()
|
|
|
|
this.startMainLoop()
|
|
|
|
if(syncWith){
|
|
|
|
syncWith.game.getElapsedTime = () => {
|
|
|
|
return this.game.elapsedTime
|
|
|
|
}
|
|
|
|
this.game.setElapsedTime =
|
|
|
|
syncWith.game.setElapsedTime = time => {
|
|
|
|
this.game.elapsedTime.ms = time
|
|
|
|
syncWith.game.elapsedTime.ms = time
|
|
|
|
}
|
|
|
|
syncWith.run()
|
|
|
|
this.syncWith = syncWith
|
|
|
|
}
|
|
|
|
}
|
|
|
|
loadUIEvents(){
|
2018-09-18 21:59:40 +08:00
|
|
|
this.continueBtn = document.getElementById("continue-butt")
|
|
|
|
this.restartBtn = document.getElementById("restart-butt")
|
2018-09-18 06:37:59 +08:00
|
|
|
this.songSelBtn = document.getElementById("song-selection-butt")
|
|
|
|
pageEvents.add(this.continueBtn, "click", () => {
|
|
|
|
this.togglePauseMenu()
|
2018-09-13 01:10:00 +08:00
|
|
|
})
|
2018-09-18 06:37:59 +08:00
|
|
|
pageEvents.add(this.restartBtn, "click", () => {
|
2018-09-13 01:10:00 +08:00
|
|
|
assets.sounds["don"].play()
|
|
|
|
this.restartSong()
|
|
|
|
})
|
2018-09-18 06:37:59 +08:00
|
|
|
pageEvents.add(this.songSelBtn, "click", () => {
|
|
|
|
assets.sounds["don"].play()
|
|
|
|
this.songSelection()
|
2018-09-13 01:10:00 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
startMainLoop(){
|
|
|
|
this.mainLoopStarted = false
|
|
|
|
this.mainLoopRunning = true
|
|
|
|
this.mainLoop()
|
|
|
|
}
|
2018-09-15 22:34:53 +08:00
|
|
|
stopMainLoop(){
|
|
|
|
this.mainLoopRunning = false
|
|
|
|
this.mainAsset.stop()
|
|
|
|
if(this.syncWith){
|
|
|
|
this.syncWith.stopMainLoop()
|
|
|
|
}
|
|
|
|
}
|
2018-09-13 01:10:00 +08:00
|
|
|
mainLoop(){
|
|
|
|
if(this.mainLoopRunning){
|
2018-09-18 06:37:59 +08:00
|
|
|
if(this.multiplayer !== 2){
|
2018-09-13 01:10:00 +08:00
|
|
|
requestAnimationFrame(() => {
|
|
|
|
if(this.syncWith){
|
|
|
|
this.syncWith.game.elapsedTime.ms = this.game.elapsedTime.ms
|
|
|
|
}
|
|
|
|
this.mainLoop()
|
|
|
|
if(this.syncWith){
|
|
|
|
this.syncWith.mainLoop()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
var ms = this.game.getElapsedTime().ms
|
2018-09-22 04:31:35 +08:00
|
|
|
|
2018-09-13 01:10:00 +08:00
|
|
|
if(!this.game.isPaused()){
|
2018-09-22 04:31:35 +08:00
|
|
|
this.keyboard.checkGameKeys()
|
|
|
|
|
2018-09-13 01:10:00 +08:00
|
|
|
if(ms >= 0 && !this.mainLoopStarted){
|
|
|
|
this.mainLoopStarted = true
|
|
|
|
}
|
|
|
|
if(ms < 0){
|
|
|
|
this.game.updateTime()
|
|
|
|
}
|
|
|
|
if(this.mainLoopStarted){
|
|
|
|
this.game.update()
|
2018-09-18 06:37:59 +08:00
|
|
|
if(!this.mainLoopRunning){
|
|
|
|
return
|
|
|
|
}
|
2018-09-13 01:10:00 +08:00
|
|
|
this.game.playMainMusic()
|
|
|
|
}
|
|
|
|
this.view.refresh()
|
|
|
|
}
|
|
|
|
this.keyboard.checkMenuKeys()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
togglePauseMenu(){
|
|
|
|
this.togglePause()
|
|
|
|
this.view.togglePauseMenu()
|
|
|
|
}
|
2018-09-18 06:37:59 +08:00
|
|
|
gameEnded(){
|
2018-09-26 08:26:42 +08:00
|
|
|
this.view.gameEnded()
|
2018-09-13 01:10:00 +08:00
|
|
|
var score = this.getGlobalScore()
|
|
|
|
var vp
|
2018-09-18 06:37:59 +08:00
|
|
|
if(score.fail === 0){
|
2018-09-13 01:10:00 +08:00
|
|
|
vp = "fullcombo"
|
|
|
|
this.playSoundMeka("fullcombo", 1.350)
|
2018-09-15 22:34:53 +08:00
|
|
|
}else if(score.hp >= 50){
|
2018-09-13 01:10:00 +08:00
|
|
|
vp = "clear"
|
2018-09-15 22:34:53 +08:00
|
|
|
}else{
|
2018-09-13 01:10:00 +08:00
|
|
|
vp = "fail"
|
|
|
|
}
|
|
|
|
assets.sounds["game" + vp].play()
|
2018-09-18 06:37:59 +08:00
|
|
|
}
|
|
|
|
displayResults(){
|
|
|
|
this.clean()
|
|
|
|
if(this.multiplayer !== 2){
|
|
|
|
new Scoresheet(this, this.getGlobalScore(), this.multiplayer)
|
|
|
|
}
|
2018-09-13 01:10:00 +08:00
|
|
|
}
|
|
|
|
displayScore(score, notPlayed){
|
|
|
|
this.view.displayScore(score, notPlayed)
|
|
|
|
}
|
|
|
|
songSelection(){
|
2018-09-18 06:37:59 +08:00
|
|
|
this.clean()
|
2018-09-13 01:10:00 +08:00
|
|
|
new SongSelect()
|
|
|
|
}
|
|
|
|
restartSong(){
|
2018-09-18 06:37:59 +08:00
|
|
|
this.clean()
|
|
|
|
if(this.multiplayer){
|
|
|
|
new loadSong(this.selectedSong, false, true)
|
|
|
|
}else{
|
|
|
|
loader.changePage("game")
|
|
|
|
var taikoGame = new Controller(this.selectedSong, this.songData, this.autoPlayEnabled)
|
|
|
|
taikoGame.run()
|
|
|
|
}
|
2018-09-13 01:10:00 +08:00
|
|
|
}
|
|
|
|
playSoundMeka(soundID, time){
|
|
|
|
var meka = ""
|
|
|
|
if(this.autoPlayEnabled && !this.multiplayer){
|
|
|
|
meka = "-meka"
|
|
|
|
}
|
|
|
|
assets.sounds[soundID + meka].play(time)
|
|
|
|
}
|
|
|
|
togglePause(){
|
|
|
|
if(this.syncWith){
|
|
|
|
this.syncWith.game.togglePause()
|
|
|
|
}
|
|
|
|
this.game.togglePause()
|
|
|
|
}
|
|
|
|
getKeys(){
|
|
|
|
return this.keyboard.getKeys()
|
|
|
|
}
|
2018-09-22 04:31:35 +08:00
|
|
|
setKey(keyCode, down, ms){
|
|
|
|
return this.keyboard.setKey(keyCode, down, ms)
|
2018-09-13 01:10:00 +08:00
|
|
|
}
|
|
|
|
getBindings(){
|
|
|
|
return this.keyboard.getBindings()
|
|
|
|
}
|
|
|
|
getSongData(){
|
|
|
|
return this.game.getSongData()
|
|
|
|
}
|
|
|
|
getElapsedTime(){
|
|
|
|
return this.game.getElapsedTime()
|
|
|
|
}
|
|
|
|
getCircles(){
|
|
|
|
return this.game.getCircles()
|
|
|
|
}
|
|
|
|
getCurrentCircle(){
|
|
|
|
return this.game.getCurrentCircle()
|
|
|
|
}
|
2018-09-19 01:33:18 +08:00
|
|
|
isWaiting(key, type){
|
|
|
|
return this.keyboard.isWaiting(key, type)
|
2018-09-13 01:10:00 +08:00
|
|
|
}
|
|
|
|
waitForKeyup(key, type){
|
|
|
|
this.keyboard.waitForKeyup(key, type)
|
|
|
|
}
|
|
|
|
getKeyTime(){
|
|
|
|
return this.keyboard.getKeyTime()
|
|
|
|
}
|
|
|
|
getCombo(){
|
|
|
|
return this.game.getCombo()
|
|
|
|
}
|
|
|
|
getGlobalScore(){
|
|
|
|
return this.game.getGlobalScore()
|
|
|
|
}
|
|
|
|
autoPlay(circle){
|
|
|
|
if(this.multiplayer){
|
|
|
|
p2.play(circle, this.mekadon)
|
|
|
|
}else{
|
|
|
|
this.mekadon.play(circle)
|
|
|
|
}
|
|
|
|
}
|
2018-09-18 06:37:59 +08:00
|
|
|
clean(){
|
|
|
|
this.stopMainLoop()
|
|
|
|
this.keyboard.clean()
|
|
|
|
this.view.clean()
|
|
|
|
|
|
|
|
pageEvents.remove(this.continueBtn, "click")
|
|
|
|
delete this.continueBtn
|
|
|
|
pageEvents.remove(this.restartBtn, "click")
|
|
|
|
delete this.restartBtn
|
|
|
|
pageEvents.remove(this.songSelBtn, "click")
|
|
|
|
delete this.songSelBtn
|
|
|
|
}
|
2018-09-13 01:10:00 +08:00
|
|
|
}
|