2024-04-10 01:32:49 -04:00
import BattleScene from "../battle-scene" ;
import { ModalConfig , ModalUiHandler } from "./modal-ui-handler" ;
import { addTextObject , TextStyle } from "./text" ;
import { Mode } from "./ui" ;
import { updateUserInfo } from "#app/account" ;
export default class UnavailableModalUiHandler extends ModalUiHandler {
private reconnectTimer : number ;
private reconnectCallback : ( ) = > void ;
constructor ( scene : BattleScene , mode? : Mode ) {
super ( scene , mode ) ;
}
getModalTitle ( ) : string {
2024-05-23 17:03:10 +02:00
return "" ;
2024-04-10 01:32:49 -04:00
}
getWidth ( ) : number {
return 160 ;
}
getHeight ( ) : number {
return 64 ;
}
getMargin ( ) : [ number , number , number , number ] {
return [ 0 , 0 , 48 , 0 ] ;
}
getButtonLabels ( ) : string [ ] {
return [ ] ;
}
setup ( ) : void {
super . setup ( ) ;
2024-05-23 17:03:10 +02:00
const label = addTextObject ( this . scene , this . getWidth ( ) / 2 , this . getHeight ( ) / 2 , "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect." , TextStyle . WINDOW , { fontSize : "48px" , align : "center" } ) ;
2024-04-10 01:32:49 -04:00
label . setOrigin ( 0.5 , 0.5 ) ;
this . modalContainer . add ( label ) ;
}
show ( args : any [ ] ) : boolean {
if ( args . length >= 1 && args [ 0 ] instanceof Function ) {
const config : ModalConfig = {
buttonActions : [ ]
} ;
this . reconnectCallback = args [ 0 ] ;
this . reconnectTimer = setInterval ( ( ) = > {
updateUserInfo ( ) . then ( response = > {
if ( response [ 0 ] || [ 200 , 400 ] . includes ( response [ 1 ] ) ) {
clearInterval ( this . reconnectTimer ) ;
this . reconnectTimer = null ;
2024-05-23 17:03:10 +02:00
this . scene . playSound ( "pb_bounce_1" ) ;
2024-04-10 01:32:49 -04:00
this . reconnectCallback ( ) ;
}
2024-05-23 17:03:10 +02:00
} ) ;
2024-04-10 01:32:49 -04:00
} , 5000 ) ;
return super . show ( [ config ] ) ;
}
return false ;
}
2024-05-23 17:03:10 +02:00
}