2023-03-28 11:54:52 -07:00
import Phaser from 'phaser' ;
import BattleScene from './battle-scene' ;
2023-11-07 19:23:42 -08:00
import InvertPostFX from './pipelines/invert' ;
2023-12-13 21:41:35 -08:00
import { version } from '../package.json' ;
2023-12-30 15:41:25 -08:00
import UIPlugin from 'phaser3-rex-plugins/templates/ui/ui-plugin' ;
2023-12-19 20:51:48 -08:00
import BBCodeTextPlugin from 'phaser3-rex-plugins/plugins/bbcodetext-plugin' ;
2023-12-30 15:41:25 -08:00
import InputTextPlugin from 'phaser3-rex-plugins/plugins/inputtext-plugin.js' ;
2024-03-14 18:49:49 -07:00
import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext' ;
2024-04-01 16:56:46 -07:00
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js' ;
import { LoadingScene } from './loading-scene' ;
2023-03-28 11:54:52 -07:00
2024-05-02 05:44:10 -07:00
// Catch global errors and display them in an alert so users can report the issue.
window . onerror = function ( message , source , lineno , colno , error ) {
console . error ( error ) ;
let errorString = ` Received unhandled error. Open browser console and click OK to see details. \ nError: ${ message } \ nSource: ${ source } \ nLine: ${ lineno } \ nColumn: ${ colno } \ nStack: ${ error . stack } ` ;
alert ( errorString ) ;
// Avoids logging the error a second time.
return true ;
} ;
// Catch global promise rejections and display them in an alert so users can report the issue.
window . addEventListener ( 'unhandledrejection' , ( event ) = > {
let errorString = ` Received unhandled promise rejection. Open browser console and click OK to see details. \ nReason: ${ event . reason } ` ;
alert ( errorString ) ;
} ) ;
2023-03-28 11:54:52 -07:00
const config : Phaser.Types.Core.GameConfig = {
2023-04-03 17:47:41 -07:00
type : Phaser . WEBGL ,
2023-03-28 11:54:52 -07:00
parent : 'app' ,
scale : {
width : 1920 ,
height : 1080 ,
mode : Phaser.Scale.FIT
} ,
2023-12-19 20:51:48 -08:00
plugins : {
global : [ {
2023-12-30 15:41:25 -08:00
key : 'rexInputTextPlugin' ,
plugin : InputTextPlugin ,
start : true
} , {
2023-12-19 20:51:48 -08:00
key : 'rexBBCodeTextPlugin' ,
plugin : BBCodeTextPlugin ,
start : true
2024-04-01 16:56:46 -07:00
} , {
key : 'rexTransitionImagePackPlugin' ,
plugin : TransitionImagePackPlugin ,
start : true
2023-12-30 15:41:25 -08:00
} ] ,
scene : [ {
key : 'rexUI' ,
plugin : UIPlugin ,
mapping : 'rexUI'
2023-12-19 20:51:48 -08:00
} ]
} ,
2023-12-30 15:41:25 -08:00
input : {
mouse : {
target : 'app'
} ,
touch : {
target : 'app'
} ,
2024-04-15 16:44:30 -07:00
gamepad : true
2023-12-30 15:41:25 -08:00
} ,
dom : {
createContainer : true
} ,
2023-03-28 11:54:52 -07:00
pixelArt : true ,
2023-11-07 19:23:42 -08:00
pipeline : [ InvertPostFX ] as unknown as Phaser . Types . Core . PipelineConfig ,
2024-04-01 16:56:46 -07:00
scene : [ LoadingScene , BattleScene ] ,
2023-12-13 21:41:35 -08:00
version : version
2023-03-28 11:54:52 -07:00
} ;
2023-04-14 15:21:33 -07:00
const setPositionRelative = function ( guideObject : any , x : number , y : number ) {
2023-06-16 09:13:52 -07:00
if ( guideObject && guideObject instanceof Phaser . GameObjects . GameObject ) {
2023-03-28 11:54:52 -07:00
const offsetX = guideObject . width * ( - 0.5 + ( 0.5 - guideObject . originX ) ) ;
const offsetY = guideObject . height * ( - 0.5 + ( 0.5 - guideObject . originY ) ) ;
this . setPosition ( guideObject . x + offsetX + x , guideObject . y + offsetY + y ) ;
return ;
}
this . setPosition ( x , y ) ;
} ;
2024-04-05 07:14:49 -07:00
Phaser . GameObjects . Container . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 11:54:52 -07:00
Phaser . GameObjects . Sprite . prototype . setPositionRelative = setPositionRelative ;
Phaser . GameObjects . Image . prototype . setPositionRelative = setPositionRelative ;
2023-06-16 09:13:52 -07:00
Phaser . GameObjects . NineSlice . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 11:54:52 -07:00
Phaser . GameObjects . Text . prototype . setPositionRelative = setPositionRelative ;
2024-03-14 18:49:49 -07:00
BBCodeText . prototype . setPositionRelative = setPositionRelative ;
2024-01-07 20:17:24 -08:00
Phaser . GameObjects . Rectangle . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 11:54:52 -07:00
document . fonts . load ( '16px emerald' ) . then ( ( ) = > document . fonts . load ( '10px pkmnems' ) ) ;
2024-04-23 19:00:23 -07:00
let game ;
const startGame = ( ) = > {
game = new Phaser . Game ( config ) ;
game . sound . pauseOnBlur = false ;
} ;
fetch ( '/manifest.json' )
. then ( res = > res . json ( ) )
. then ( jsonResponse = > {
startGame ( ) ;
game [ 'manifest' ] = jsonResponse . manifest ;
} ) . catch ( ( ) = > {
// Manifest not found (likely local build)
startGame ( ) ;
} ) ;
2023-03-28 11:54:52 -07:00
2024-04-15 15:55:03 -07:00
export default game ;