2024-05-23 16:03:10 +01:00
import Phaser from "phaser" ;
import BattleScene from "./battle-scene" ;
import InvertPostFX from "./pipelines/invert" ;
import { version } from "../package.json" ;
import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin" ;
import BBCodeTextPlugin from "phaser3-rex-plugins/plugins/bbcodetext-plugin" ;
import InputTextPlugin from "phaser3-rex-plugins/plugins/inputtext-plugin.js" ;
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 ) {
2024-05-23 16:03:10 +01:00
console . error ( error ) ;
// const 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 ;
2024-05-02 13:44:10 +01:00
} ;
// Catch global promise rejections and display them in an alert so users can report the issue.
2024-05-24 00:45:04 +01:00
window . addEventListener ( "unhandledrejection" , ( event ) = > {
2024-05-23 16:03:10 +01:00
// const errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`;
console . error ( event . reason ) ;
//alert(errorString);
2024-05-02 14:00:36 +01:00
} ) ;
2024-05-02 13:44:10 +01:00
2023-03-28 19:54:52 +01:00
const config : Phaser.Types.Core.GameConfig = {
2024-05-23 16:03:10 +01:00
type : Phaser . WEBGL ,
parent : "app" ,
scale : {
width : 1920 ,
height : 1080 ,
mode : Phaser.Scale.FIT
} ,
plugins : {
global : [ {
key : "rexInputTextPlugin" ,
plugin : InputTextPlugin ,
start : true
} , {
key : "rexBBCodeTextPlugin" ,
plugin : BBCodeTextPlugin ,
start : true
} , {
key : "rexTransitionImagePackPlugin" ,
plugin : TransitionImagePackPlugin ,
start : true
} ] ,
scene : [ {
key : "rexUI" ,
plugin : UIPlugin ,
mapping : "rexUI"
} ]
} ,
input : {
mouse : {
target : "app"
} ,
touch : {
target : "app"
} ,
gamepad : true
} ,
dom : {
createContainer : true
} ,
pixelArt : true ,
pipeline : [ InvertPostFX ] as unknown as Phaser . Types . Core . PipelineConfig ,
scene : [ LoadingScene , BattleScene ] ,
version : version
2023-03-28 19:54:52 +01:00
} ;
2024-05-28 22:16:14 +01:00
/ * *
* Sets this object ' s position relative to another object with a given offset
* /
2024-08-24 20:46:16 +01:00
const setPositionRelative = function ( guideObject : Phaser.GameObjects.GameObject , x : number , y : number ) {
2024-05-28 22:16:14 +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 ) ;
2023-03-28 19:54:52 +01:00
} ;
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-01-08 04:17:24 +00:00
Phaser . GameObjects . Rectangle . prototype . setPositionRelative = setPositionRelative ;
2023-03-28 19:54:52 +01:00
2024-05-23 16:03:10 +01:00
document . fonts . load ( "16px emerald" ) . then ( ( ) = > document . fonts . load ( "10px pkmnems" ) ) ;
2023-03-28 19:54:52 +01:00
2024-04-24 03:00:23 +01:00
let game ;
const startGame = ( ) = > {
2024-05-23 16:03:10 +01:00
game = new Phaser . Game ( config ) ;
game . sound . pauseOnBlur = false ;
2024-04-24 03:00:23 +01:00
} ;
2024-05-23 16:03:10 +01:00
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 ;