2023-03-28 19:54:52 +01:00
import Phaser from 'phaser' ;
import BattleScene from './battle-scene' ;
2023-11-08 03:23:42 +00:00
import InvertPostFX from './pipelines/invert' ;
2023-12-14 05:41:35 +00:00
import { version } from '../package.json' ;
2023-12-30 23:41:25 +00:00
import UIPlugin from 'phaser3-rex-plugins/templates/ui/ui-plugin' ;
2023-12-20 04:51:48 +00:00
import BBCodeTextPlugin from 'phaser3-rex-plugins/plugins/bbcodetext-plugin' ;
2023-12-30 23:41:25 +00:00
import InputTextPlugin from 'phaser3-rex-plugins/plugins/inputtext-plugin.js' ;
2024-03-15 01:49:49 +00:00
import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext' ;
2024-04-02 00:56:46 +01:00
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js' ;
import { LoadingScene } from './loading-scene' ;
2023-03-28 19:54:52 +01:00
2024-05-02 13:44:10 +01: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 19:54:52 +01:00
const config : Phaser.Types.Core.GameConfig = {
2023-04-04 01:47:41 +01:00
type : Phaser . WEBGL ,
2023-03-28 19:54:52 +01:00
parent : 'app' ,
scale : {
width : 1920 ,
height : 1080 ,
mode : Phaser.Scale.FIT
} ,
2023-12-20 04:51:48 +00:00
plugins : {
global : [ {
2023-12-30 23:41:25 +00:00
key : 'rexInputTextPlugin' ,
plugin : InputTextPlugin ,
start : true
} , {
2023-12-20 04:51:48 +00:00
key : 'rexBBCodeTextPlugin' ,
plugin : BBCodeTextPlugin ,
start : true
2024-04-02 00:56:46 +01:00
} , {
key : 'rexTransitionImagePackPlugin' ,
plugin : TransitionImagePackPlugin ,
start : true
2023-12-30 23:41:25 +00:00
} ] ,
scene : [ {
key : 'rexUI' ,
plugin : UIPlugin ,
mapping : 'rexUI'
2023-12-20 04:51:48 +00:00
} ]
} ,
2023-12-30 23:41:25 +00:00
input : {
mouse : {
target : 'app'
} ,
touch : {
target : 'app'
} ,
2024-04-16 00:44:30 +01:00
gamepad : true
2023-12-30 23:41:25 +00:00
} ,
dom : {
createContainer : true
} ,
2023-03-28 19:54:52 +01:00
pixelArt : true ,
2023-11-08 03:23:42 +00:00
pipeline : [ InvertPostFX ] as unknown as Phaser . Types . Core . PipelineConfig ,
2024-04-02 00:56:46 +01:00
scene : [ LoadingScene , BattleScene ] ,
2023-12-14 05:41:35 +00:00
version : version
2023-03-28 19:54:52 +01:00
} ;
2023-04-14 23:21:33 +01:00
const setPositionRelative = function ( guideObject : any , x : number , y : number ) {
2023-06-16 17:13:52 +01:00
if ( guideObject && guideObject instanceof Phaser . GameObjects . GameObject ) {
2023-03-28 19:54:52 +01: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 15:14:49 +01:00
Phaser . GameObjects . Container . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 19:54:52 +01:00
Phaser . GameObjects . Sprite . prototype . setPositionRelative = setPositionRelative ;
Phaser . GameObjects . Image . prototype . setPositionRelative = setPositionRelative ;
2023-06-16 17:13:52 +01:00
Phaser . GameObjects . NineSlice . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 19:54:52 +01:00
Phaser . GameObjects . Text . prototype . setPositionRelative = setPositionRelative ;
2024-03-15 01:49:49 +00:00
BBCodeText . prototype . setPositionRelative = setPositionRelative ;
2024-01-08 04:17:24 +00:00
Phaser . GameObjects . Rectangle . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 19:54:52 +01:00
document . fonts . load ( '16px emerald' ) . then ( ( ) = > document . fonts . load ( '10px pkmnems' ) ) ;
2024-04-24 03:00:23 +01: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 19:54:52 +01:00
2024-04-15 23:55:03 +01:00
export default game ;