2018-02-12 16:01:20 +00:00
/ * *
* @ author Richard Davey < rich @ photonstorm . com >
2023-01-02 17:36:27 +00:00
* @ copyright 2013 - 2023 Photon Storm Ltd .
2019-05-10 15:15:04 +00:00
* @ license { @ link https : //opensource.org/licenses/MIT|MIT License}
2018-02-12 16:01:20 +00:00
* /
2017-06-30 14:47:51 +00:00
var Class = require ( '../utils/Class' ) ;
2016-11-24 15:40:05 +00:00
var CONST = require ( '../const' ) ;
2022-10-04 17:04:01 +00:00
var DefaultPlugins = require ( '../plugins/DefaultPlugins' ) ;
2018-08-22 16:01:21 +00:00
var Device = require ( '../device' ) ;
2018-05-10 16:15:25 +00:00
var GetFastValue = require ( '../utils/object/GetFastValue' ) ;
2017-04-26 15:03:14 +00:00
var GetValue = require ( '../utils/object/GetValue' ) ;
2018-05-10 16:15:25 +00:00
var IsPlainObject = require ( '../utils/object/IsPlainObject' ) ;
2017-06-30 14:47:51 +00:00
var NOOP = require ( '../utils/NOOP' ) ;
2022-10-04 17:04:01 +00:00
var PhaserMath = require ( '../math/' ) ;
var PIPELINE _CONST = require ( '../renderer/webgl/pipelines/const' ) ;
2017-10-11 16:05:59 +00:00
var ValueToColor = require ( '../display/color/ValueToColor' ) ;
2016-11-24 15:40:05 +00:00
2018-02-07 15:27:21 +00:00
/ * *
* @ classdesc
2019-05-09 10:50:26 +00:00
* The active game configuration settings , parsed from a { @ link Phaser . Types . Core . GameConfig } object .
2018-02-07 15:27:21 +00:00
*
* @ class Config
2019-01-15 16:17:04 +00:00
* @ memberof Phaser . Core
2018-02-07 15:27:21 +00:00
* @ constructor
* @ since 3.0 . 0
*
2019-05-09 10:50:26 +00:00
* @ param { Phaser . Types . Core . GameConfig } [ GameConfig ] - The configuration object for your Phaser Game instance .
2018-09-27 22:37:54 +00:00
*
* @ see Phaser . Game # config
2018-02-07 15:27:21 +00:00
* /
2017-06-30 14:47:51 +00:00
var Config = new Class ( {
initialize :
function Config ( config )
{
if ( config === undefined ) { config = { } ; }
2016-11-24 15:40:05 +00:00
2017-06-30 14:47:51 +00:00
var defaultBannerColor = [
'#ff0000' ,
'#ffff00' ,
'#00ff00' ,
'#00ffff' ,
'#000000'
] ;
2016-11-24 15:40:05 +00:00
2017-06-30 14:47:51 +00:00
var defaultBannerTextColor = '#ffffff' ;
2016-11-24 01:35:02 +00:00
2021-12-21 17:16:15 +00:00
// Scale Manager - Anything set in here over-rides anything set in the core game config
var scaleConfig = GetValue ( config , 'scale' , null ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:32:00 +00:00
* @ const { ( number | string ) } Phaser . Core . Config # width - The width of the underlying canvas , in pixels .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . width = GetValue ( scaleConfig , 'width' , 1024 , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:32:00 +00:00
* @ const { ( number | string ) } Phaser . Core . Config # height - The height of the underlying canvas , in pixels .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . height = GetValue ( scaleConfig , 'height' , 768 , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:32:00 +00:00
* @ const { ( Phaser . Scale . ZoomType | number ) } Phaser . Core . Config # zoom - The zoom factor , as used by the Scale Manager .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . zoom = GetValue ( scaleConfig , 'zoom' , 1 , config ) ;
2016-11-24 15:40:05 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? * } Phaser . Core . Config # parent - A parent DOM element into which the canvas created by the renderer will be injected .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . parent = GetValue ( scaleConfig , 'parent' , undefined , config ) ;
2016-11-24 15:40:05 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-02-04 17:16:08 +00:00
* @ const { Phaser . Scale . ScaleModeType } Phaser . Core . Config # scaleMode - The scale mode as used by the Scale Manager . The default is zero , which is no scaling .
2018-05-08 08:17:13 +00:00
* /
2022-05-06 17:21:14 +00:00
this . scaleMode = GetValue ( scaleConfig , ( scaleConfig ) ? 'mode' : 'scaleMode' , 0 , config ) ;
2018-08-07 15:25:45 +00:00
2018-10-11 16:01:17 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # expandParent - Is the Scale Manager allowed to adjust the CSS height property of the parent to be 100 % ?
2018-10-11 16:01:17 +00:00
* /
2021-12-21 17:16:15 +00:00
this . expandParent = GetValue ( scaleConfig , 'expandParent' , true , config ) ;
2018-10-11 16:01:17 +00:00
2019-01-10 13:40:28 +00:00
/ * *
2021-02-01 15:17:59 +00:00
* @ const { boolean } Phaser . Core . Config # autoRound - Automatically round the display and style sizes of the canvas . This can help with performance in lower - powered devices .
2019-01-10 13:40:28 +00:00
* /
2021-12-21 17:16:15 +00:00
this . autoRound = GetValue ( scaleConfig , 'autoRound' , false , config ) ;
2019-01-10 13:40:28 +00:00
2019-01-11 15:58:33 +00:00
/ * *
2019-02-04 17:16:08 +00:00
* @ const { Phaser . Scale . CenterType } Phaser . Core . Config # autoCenter - Automatically center the canvas within the parent ?
2019-01-11 15:58:33 +00:00
* /
2021-12-21 17:16:15 +00:00
this . autoCenter = GetValue ( scaleConfig , 'autoCenter' , 0 , config ) ;
2019-01-11 15:58:33 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # resizeInterval - How many ms should elapse before checking if the browser size has changed ?
2019-01-11 15:58:33 +00:00
* /
2021-12-21 17:16:15 +00:00
this . resizeInterval = GetValue ( scaleConfig , 'resizeInterval' , 500 , config ) ;
2019-01-31 11:12:00 +00:00
/ * *
* @ const { ? ( HTMLElement | string ) } Phaser . Core . Config # fullscreenTarget - The DOM element that will be sent into full screen mode , or its ` id ` . If undefined Phaser will create its own div and insert the canvas into it when entering fullscreen mode .
* /
2021-12-21 17:16:15 +00:00
this . fullscreenTarget = GetValue ( scaleConfig , 'fullscreenTarget' , null , config ) ;
2019-01-11 15:58:33 +00:00
2018-10-11 16:01:17 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # minWidth - The minimum width , in pixels , the canvas will scale down to . A value of zero means no minimum .
2018-10-11 16:01:17 +00:00
* /
2021-12-21 17:16:15 +00:00
this . minWidth = GetValue ( scaleConfig , 'minWidth' , 0 , config ) ;
2018-10-11 16:01:17 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # maxWidth - The maximum width , in pixels , the canvas will scale up to . A value of zero means no maximum .
2018-10-11 16:01:17 +00:00
* /
2021-12-21 17:16:15 +00:00
this . maxWidth = GetValue ( scaleConfig , 'maxWidth' , 0 , config ) ;
2018-10-11 16:01:17 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # minHeight - The minimum height , in pixels , the canvas will scale down to . A value of zero means no minimum .
2018-10-11 16:01:17 +00:00
* /
2021-12-21 17:16:15 +00:00
this . minHeight = GetValue ( scaleConfig , 'minHeight' , 0 , config ) ;
2018-10-11 16:01:17 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # maxHeight - The maximum height , in pixels , the canvas will scale up to . A value of zero means no maximum .
2018-10-11 16:01:17 +00:00
* /
2021-12-21 17:16:15 +00:00
this . maxHeight = GetValue ( scaleConfig , 'maxHeight' , 0 , config ) ;
2018-08-07 15:25:45 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { number } Phaser . Core . Config # renderType - Force Phaser to use a specific renderer . Can be ` CONST.CANVAS ` , ` CONST.WEBGL ` , ` CONST.HEADLESS ` or ` CONST.AUTO ` ( default )
2018-08-07 15:25:45 +00:00
* /
this . renderType = GetValue ( config , 'type' , CONST . AUTO ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? HTMLCanvasElement } Phaser . Core . Config # canvas - Force Phaser to use your own Canvas element instead of creating one .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . canvas = GetValue ( config , 'canvas' , null ) ;
2018-05-08 08:17:13 +00:00
2018-05-10 11:25:33 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? ( CanvasRenderingContext2D | WebGLRenderingContext ) } Phaser . Core . Config # context - Force Phaser to use your own Canvas context instead of creating one .
2018-05-10 11:25:33 +00:00
* /
2018-05-10 11:42:08 +00:00
this . context = GetValue ( config , 'context' , null ) ;
2018-05-10 11:25:33 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? string } Phaser . Core . Config # canvasStyle - Optional CSS attributes to be set on the canvas object created by the renderer .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . canvasStyle = GetValue ( config , 'canvasStyle' , null ) ;
2016-11-24 15:40:05 +00:00
2018-11-16 10:46:30 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # customEnvironment - Is Phaser running under a custom ( non - native web ) environment ? If so , set this to ` true ` to skip internal Feature detection . If ` true ` the ` renderType ` cannot be left as ` AUTO ` .
2018-11-16 10:46:30 +00:00
* /
this . customEnvironment = GetValue ( config , 'customEnvironment' , false ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? object } Phaser . Core . Config # sceneConfig - The default Scene configuration object .
2018-05-08 08:17:13 +00:00
* /
2017-07-14 13:30:20 +00:00
this . sceneConfig = GetValue ( config , 'scene' , null ) ;
2016-11-24 15:40:05 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string [ ] } Phaser . Core . Config # seed - A seed which the Random Data Generator will use . If not given , a dynamic seed based on the time is used .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . seed = GetValue ( config , 'seed' , [ ( Date . now ( ) * Math . random ( ) ) . toString ( ) ] ) ;
2016-11-24 15:40:05 +00:00
2018-12-13 13:09:14 +00:00
PhaserMath . RND = new PhaserMath . RandomDataGenerator ( this . seed ) ;
2017-01-25 12:01:52 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # gameTitle - The title of the game .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . gameTitle = GetValue ( config , 'title' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # gameURL - The URL of the game .
2018-05-08 08:17:13 +00:00
* /
2018-01-28 04:10:44 +00:00
this . gameURL = GetValue ( config , 'url' , 'https://phaser.io' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # gameVersion - The version of the game .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . gameVersion = GetValue ( config , 'version' , '' ) ;
2016-11-24 15:40:05 +00:00
2018-05-18 16:37:45 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # autoFocus - If ` true ` the window will automatically be given focus immediately and on any future mousedown event .
2018-05-18 16:37:45 +00:00
* /
this . autoFocus = GetValue ( config , 'autoFocus' , true ) ;
2022-09-21 15:34:08 +00:00
/ * *
2022-10-04 16:08:34 +00:00
* @ const { ( number | boolean ) } Phaser . Core . Config # stableSort - ` false ` or ` 0 ` = Use the built - in StableSort ( needed for older browsers ) , ` true ` or ` 1 ` = Rely on ES2019 Array . sort being stable ( modern browsers only ) , or ` -1 ` = Try and determine this automatically based on browser inspection ( not guaranteed to work , errs on side of caution ) .
2022-09-21 15:34:08 +00:00
* /
this . stableSort = GetValue ( config , 'stableSort' , - 1 ) ;
2022-10-04 16:08:34 +00:00
if ( this . stableSort === - 1 )
2022-09-21 15:34:08 +00:00
{
2022-10-04 16:08:34 +00:00
this . stableSort = ( Device . browser . es2019 ) ? 1 : 0 ;
2022-09-21 15:34:08 +00:00
}
2022-10-04 16:08:34 +00:00
Device . features . stableSort = this . stableSort ;
2018-07-18 16:22:52 +00:00
// DOM Element Container
/ * *
2019-04-30 10:08:34 +00:00
* @ const { ? boolean } Phaser . Core . Config # domCreateContainer - Should the game create a div element to act as a DOM Container ? Only enable if you ' re using DOM Element objects . You must provide a parent object if you use this feature .
2018-07-18 16:22:52 +00:00
* /
this . domCreateContainer = GetValue ( config , 'dom.createContainer' , false ) ;
2021-03-30 09:23:45 +00:00
/ * *
* @ const { ? string } Phaser . Core . Config # domPointerEvents - The default ` pointerEvents ` attribute set on the DOM Container .
* /
this . domPointerEvents = GetValue ( config , 'dom.pointerEvents' , 'none' ) ;
2017-06-30 14:47:51 +00:00
// Input
2018-05-10 11:25:33 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # inputKeyboard - Enable the Keyboard Plugin . This can be disabled in games that don ' t need keyboard input .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . inputKeyboard = GetValue ( config , 'input.keyboard' , true ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { * } Phaser . Core . Config # inputKeyboardEventTarget - The DOM Target to listen for keyboard events on . Defaults to ` window ` if not specified .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . inputKeyboardEventTarget = GetValue ( config , 'input.keyboard.target' , window ) ;
2017-02-21 01:04:11 +00:00
2018-11-12 22:22:12 +00:00
/ * *
2020-11-23 10:32:00 +00:00
* @ const { ? number [ ] } Phaser . Core . Config # inputKeyboardCapture - ` preventDefault ` will be called on every non - modified key which has a key code in this array . By default , it is empty .
2018-11-12 22:22:12 +00:00
* /
2018-12-05 16:02:09 +00:00
this . inputKeyboardCapture = GetValue ( config , 'input.keyboard.capture' , [ ] ) ;
2018-11-12 22:22:12 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ( boolean | object ) } Phaser . Core . Config # inputMouse - Enable the Mouse Plugin . This can be disabled in games that don ' t need mouse input .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . inputMouse = GetValue ( config , 'input.mouse' , true ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? * } Phaser . Core . Config # inputMouseEventTarget - The DOM Target to listen for mouse events on . Defaults to the game canvas if not specified .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . inputMouseEventTarget = GetValue ( config , 'input.mouse.target' , null ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-10-07 09:14:28 +00:00
* @ const { boolean } Phaser . Core . Config # inputMousePreventDefaultDown - Should ` mousedown ` DOM events have ` preventDefault ` called on them ?
2018-05-08 08:17:13 +00:00
* /
2020-09-11 09:59:20 +00:00
this . inputMousePreventDefaultDown = GetValue ( config , 'input.mouse.preventDefaultDown' , true ) ;
/ * *
2020-10-07 09:14:28 +00:00
* @ const { boolean } Phaser . Core . Config # inputMousePreventDefaultUp - Should ` mouseup ` DOM events have ` preventDefault ` called on them ?
2020-09-11 09:59:20 +00:00
* /
this . inputMousePreventDefaultUp = GetValue ( config , 'input.mouse.preventDefaultUp' , true ) ;
/ * *
2020-10-07 09:14:28 +00:00
* @ const { boolean } Phaser . Core . Config # inputMousePreventDefaultMove - Should ` mousemove ` DOM events have ` preventDefault ` called on them ?
2020-09-11 09:59:20 +00:00
* /
this . inputMousePreventDefaultMove = GetValue ( config , 'input.mouse.preventDefaultMove' , true ) ;
2017-06-12 23:38:48 +00:00
2020-10-07 09:14:28 +00:00
/ * *
* @ const { boolean } Phaser . Core . Config # inputMousePreventDefaultWheel - Should ` wheel ` DOM events have ` preventDefault ` called on them ?
* /
this . inputMousePreventDefaultWheel = GetValue ( config , 'input.mouse.preventDefaultWheel' , true ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # inputTouch - Enable the Touch Plugin . This can be disabled in games that don ' t need touch input .
2018-05-08 08:17:13 +00:00
* /
2018-08-22 16:01:21 +00:00
this . inputTouch = GetValue ( config , 'input.touch' , Device . input . touch ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ? * } Phaser . Core . Config # inputTouchEventTarget - The DOM Target to listen for touch events on . Defaults to the game canvas if not specified .
2018-05-08 08:17:13 +00:00
* /
2017-07-28 02:28:10 +00:00
this . inputTouchEventTarget = GetValue ( config , 'input.touch.target' , null ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # inputTouchCapture - Should touch events be captured ? I . e . have prevent default called on them .
2018-05-08 08:17:13 +00:00
* /
2017-12-27 23:52:46 +00:00
this . inputTouchCapture = GetValue ( config , 'input.touch.capture' , true ) ;
2017-07-28 02:28:10 +00:00
2018-05-29 23:33:01 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # inputActivePointers - The number of Pointer objects created by default . In a mouse - only , or non - multi touch game , you can leave this as 1.
2018-05-29 23:33:01 +00:00
* /
this . inputActivePointers = GetValue ( config , 'input.activePointers' , 1 ) ;
2018-11-19 15:30:21 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # inputSmoothFactor - The smoothing factor to apply during Pointer movement . See { @ link Phaser . Input . Pointer # smoothFactor } .
2018-11-19 15:30:21 +00:00
* /
this . inputSmoothFactor = GetValue ( config , 'input.smoothFactor' , 0 ) ;
2019-02-22 02:11:13 +00:00
/ * *
2019-02-22 02:26:52 +00:00
* @ const { boolean } Phaser . Core . Config # inputWindowEvents - Should Phaser listen for input events on the Window ? If you disable this , events like 'POINTER_UP_OUTSIDE' will no longer fire .
2019-02-22 02:11:13 +00:00
* /
this . inputWindowEvents = GetValue ( config , 'input.windowEvents' , true ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # inputGamepad - Enable the Gamepad Plugin . This can be disabled in games that don ' t need gamepad input .
2018-05-08 08:17:13 +00:00
* /
2017-09-13 13:18:34 +00:00
this . inputGamepad = GetValue ( config , 'input.gamepad' , false ) ;
2017-09-09 02:17:13 +00:00
2018-06-06 22:03:27 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { * } Phaser . Core . Config # inputGamepadEventTarget - The DOM Target to listen for gamepad events on . Defaults to ` window ` if not specified .
2018-06-06 22:03:27 +00:00
* /
this . inputGamepadEventTarget = GetValue ( config , 'input.gamepad.target' , window ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # disableContextMenu - Set to ` true ` to disable the right - click context menu .
2018-05-08 08:17:13 +00:00
* /
2017-07-25 11:33:37 +00:00
this . disableContextMenu = GetValue ( config , 'disableContextMenu' , false ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-05-09 10:50:26 +00:00
* @ const { Phaser . Types . Core . AudioConfig } Phaser . Core . Config # audio - The Audio Configuration object .
2018-05-08 08:17:13 +00:00
* /
2020-09-10 16:22:44 +00:00
this . audio = GetValue ( config , 'audio' , { } ) ;
2018-01-08 16:39:46 +00:00
2017-06-30 14:47:51 +00:00
// If you do: { banner: false } it won't display any banner at all
2018-05-10 11:25:33 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # hideBanner - Don ' t write the banner line to the console . log .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . hideBanner = ( GetValue ( config , 'banner' , null ) === false ) ;
2016-11-24 15:40:05 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # hidePhaser - Omit Phaser ' s name and version from the banner .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . hidePhaser = GetValue ( config , 'banner.hidePhaser' , false ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # bannerTextColor - The color of the banner text .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . bannerTextColor = GetValue ( config , 'banner.text' , defaultBannerTextColor ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string [ ] } Phaser . Core . Config # bannerBackgroundColor - The background colors of the banner .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . bannerBackgroundColor = GetValue ( config , 'banner.background' , defaultBannerColor ) ;
2017-10-04 22:48:16 +00:00
if ( this . gameTitle === '' && this . hidePhaser )
{
this . hideBanner = true ;
}
2018-01-08 16:39:46 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:19:39 +00:00
* @ const { Phaser . Types . Core . FPSConfig } Phaser . Core . Config # fps - The Frame Rate Configuration object , as parsed by the Timestep class .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . fps = GetValue ( config , 'fps' , null ) ;
2017-02-07 18:41:53 +00:00
2021-12-21 17:16:15 +00:00
// Render Settings - Anything set in here over-rides anything set in the core game config
2018-03-16 13:22:52 +00:00
2021-12-21 17:16:15 +00:00
var renderConfig = GetValue ( config , 'render' , null ) ;
2018-03-16 13:22:52 +00:00
2020-10-27 13:44:58 +00:00
/ * *
2020-11-23 11:01:08 +00:00
* @ const { Phaser . Types . Core . PipelineConfig } Phaser . Core . Config # pipeline - An object mapping WebGL names to WebGLPipeline classes . These should be class constructors , not instances .
2020-10-27 13:44:58 +00:00
* /
2021-12-21 17:16:15 +00:00
this . pipeline = GetValue ( renderConfig , 'pipeline' , null , config ) ;
2020-10-27 13:44:58 +00:00
2022-10-04 16:08:34 +00:00
/ * *
2022-10-04 17:04:01 +00:00
* @ const { boolean } Phaser . Core . Config # autoMobilePipeline - Automatically enable the Mobile Pipeline if iOS or Android detected ?
2022-10-04 16:08:34 +00:00
* /
this . autoMobilePipeline = GetValue ( renderConfig , 'autoMobilePipeline' , true , config ) ;
2022-10-04 17:04:01 +00:00
/ * *
* @ const { string } Phaser . Core . Config # defaultPipeline - The WebGL Pipeline that Game Objects will use by default . Set to 'MultiPipeline' as standard . See also 'autoMobilePipeline' .
* /
this . defaultPipeline = GetValue ( renderConfig , 'defaultPipeline' , PIPELINE _CONST . MULTI _PIPELINE , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # antialias - When set to ` true ` , WebGL uses linear interpolation to draw scaled or rotated textures , giving a smooth appearance . When set to ` false ` , WebGL uses nearest - neighbor interpolation , giving a crisper appearance . ` false ` also disables antialiasing of the game canvas itself , if the browser supports it , when the game canvas is scaled .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . antialias = GetValue ( renderConfig , 'antialias' , true , config ) ;
2018-05-08 08:17:13 +00:00
2019-08-29 10:46:58 +00:00
/ * *
* @ const { boolean } Phaser . Core . Config # antialiasGL - Sets the ` antialias ` property when the WebGL context is created . Setting this value does not impact any subsequent textures that are created , or the canvas style attributes .
* /
2021-12-21 17:16:15 +00:00
this . antialiasGL = GetValue ( renderConfig , 'antialiasGL' , true , config ) ;
2019-08-29 10:46:58 +00:00
2019-11-19 13:00:37 +00:00
/ * *
* @ const { string } Phaser . Core . Config # mipmapFilter - Sets the ` mipmapFilter ` property when the WebGL renderer is created .
* /
2023-01-23 20:58:43 +00:00
this . mipmapFilter = GetValue ( renderConfig , 'mipmapFilter' , '' , config ) ;
2019-11-19 13:00:37 +00:00
2019-06-04 18:13:49 +00:00
/ * *
* @ const { boolean } Phaser . Core . Config # desynchronized - When set to ` true ` it will create a desynchronized context for both 2 D and WebGL . See https : //developers.google.com/web/updates/2019/05/desynchronized for details.
* /
2021-12-21 17:16:15 +00:00
this . desynchronized = GetValue ( renderConfig , 'desynchronized' , false , config ) ;
2019-06-04 18:13:49 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # roundPixels - Draw texture - based Game Objects at only whole - integer positions . Game Objects without textures , like Graphics , ignore this property .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . roundPixels = GetValue ( renderConfig , 'roundPixels' , false , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # pixelArt - Prevent pixel art from becoming blurred when scaled . It will remain crisp ( tells the WebGL renderer to automatically create textures using a linear filter mode ) .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . pixelArt = GetValue ( renderConfig , 'pixelArt' , this . zoom !== 1 , config ) ;
2018-06-27 14:27:16 +00:00
if ( this . pixelArt )
{
this . antialias = false ;
2020-09-22 16:07:46 +00:00
this . antialiasGL = false ;
2018-06-27 14:27:16 +00:00
this . roundPixels = true ;
}
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # transparent - Whether the game canvas will have a transparent background .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . transparent = GetValue ( renderConfig , 'transparent' , false , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # clearBeforeRender - Whether the game canvas will be cleared between each rendering frame . You can disable this if you have a full - screen background image or game object .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . clearBeforeRender = GetValue ( renderConfig , 'clearBeforeRender' , true , config ) ;
2018-05-08 08:17:13 +00:00
2021-02-04 15:58:41 +00:00
/ * *
* @ const { boolean } Phaser . Core . Config # preserveDrawingBuffer - If the value is true the WebGL buffers will not be cleared and will preserve their values until cleared or overwritten by the author .
* /
2021-12-21 17:16:15 +00:00
this . preserveDrawingBuffer = GetValue ( renderConfig , 'preserveDrawingBuffer' , false , config ) ;
2021-02-04 15:58:41 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # premultipliedAlpha - In WebGL mode , sets the drawing buffer to contain colors with pre - multiplied alpha .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . premultipliedAlpha = GetValue ( renderConfig , 'premultipliedAlpha' , true , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # failIfMajorPerformanceCaveat - Let the browser abort creating a WebGL context if it judges performance would be unacceptable .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . failIfMajorPerformanceCaveat = GetValue ( renderConfig , 'failIfMajorPerformanceCaveat' , false , config ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # powerPreference - "high-performance" , "low-power" or "default" . A hint to the browser on how much device power the game might use .
2018-05-08 08:17:13 +00:00
* /
2021-12-21 17:16:15 +00:00
this . powerPreference = GetValue ( renderConfig , 'powerPreference' , 'default' , config ) ;
2018-02-28 21:15:18 +00:00
2018-07-02 11:33:46 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # batchSize - The default WebGL Batch size . Represents the number of _quads _ that can be added to a single batch .
2018-07-02 11:33:46 +00:00
* /
2021-12-21 17:16:15 +00:00
this . batchSize = GetValue ( renderConfig , 'batchSize' , 4096 , config ) ;
2020-07-15 15:51:40 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # maxTextures - When in WebGL mode , this sets the maximum number of GPU Textures to use . The default , - 1 , will use all available units . The WebGL1 spec says all browsers should provide a minimum of 8.
2020-07-15 15:51:40 +00:00
* /
2021-12-21 17:16:15 +00:00
this . maxTextures = GetValue ( renderConfig , 'maxTextures' , - 1 , config ) ;
2018-10-02 10:09:58 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # maxLights - The maximum number of lights allowed to be visible within range of a single Camera in the LightManager .
2018-10-02 10:09:58 +00:00
* /
2021-12-21 17:16:15 +00:00
this . maxLights = GetValue ( renderConfig , 'maxLights' , 10 , config ) ;
2018-07-02 11:33:46 +00:00
2018-02-28 21:15:18 +00:00
var bgc = GetValue ( config , 'backgroundColor' , 0 ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { Phaser . Display . Color } Phaser . Core . Config # backgroundColor - The background color of the game canvas . The default is black . This value is ignored if ` transparent ` is set to ` true ` .
2018-05-08 08:17:13 +00:00
* /
2018-02-28 21:15:18 +00:00
this . backgroundColor = ValueToColor ( bgc ) ;
2020-10-20 13:01:31 +00:00
if ( this . transparent )
2018-02-28 21:15:18 +00:00
{
2020-10-20 13:01:31 +00:00
this . backgroundColor = ValueToColor ( 0x000000 ) ;
2018-02-28 21:15:18 +00:00
this . backgroundColor . alpha = 0 ;
}
2016-11-25 02:08:33 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-05-09 10:50:26 +00:00
* @ const { Phaser . Types . Core . BootCallback } Phaser . Core . Config # preBoot - Called before Phaser boots . Useful for initializing anything not related to Phaser that Phaser may require while booting .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . preBoot = GetValue ( config , 'callbacks.preBoot' , NOOP ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-05-09 10:50:26 +00:00
* @ const { Phaser . Types . Core . BootCallback } Phaser . Core . Config # postBoot - A function to run at the end of the boot sequence . At this point , all the game systems have started and plugins have been loaded .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . postBoot = GetValue ( config , 'callbacks.postBoot' , NOOP ) ;
2017-02-07 12:43:20 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-05-09 10:50:26 +00:00
* @ const { Phaser . Types . Core . PhysicsConfig } Phaser . Core . Config # physics - The Physics Configuration object .
2018-05-08 08:17:13 +00:00
* /
2017-08-18 00:42:14 +00:00
this . physics = GetValue ( config , 'physics' , { } ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ( boolean | string ) } Phaser . Core . Config # defaultPhysicsSystem - The default physics system . It will be started for each scene . Either 'arcade' , 'impact' or 'matter' .
2018-05-08 08:17:13 +00:00
* /
2017-08-18 00:42:14 +00:00
this . defaultPhysicsSystem = GetValue ( this . physics , 'default' , false ) ;
2017-08-15 22:34:39 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # loaderBaseURL - A URL used to resolve paths given to the loader . Example : 'http://labs.phaser.io/assets/' .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderBaseURL = GetValue ( config , 'loader.baseURL' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # loaderPath - A URL path used to resolve relative paths given to the loader . Example : 'images/sprites/' .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderPath = GetValue ( config , 'loader.path' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # loaderMaxParallelDownloads - Maximum parallel downloads allowed for resources ( Default to 32 ) .
2018-05-08 08:17:13 +00:00
* /
2022-05-09 17:34:56 +00:00
this . loaderMaxParallelDownloads = GetValue ( config , 'loader.maxParallelDownloads' , ( Device . os . android ) ? 6 : 32 ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { ( string | undefined ) } Phaser . Core . Config # loaderCrossOrigin - 'anonymous' , 'use-credentials' , or ` undefined ` . If you ' re not making cross - origin requests , leave this as ` undefined ` . See { @ link https : //developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes}.
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderCrossOrigin = GetValue ( config , 'loader.crossOrigin' , undefined ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # loaderResponseType - The response type of the XHR request , e . g . ` blob ` , ` text ` , etc .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderResponseType = GetValue ( config , 'loader.responseType' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { boolean } Phaser . Core . Config # loaderAsync - Should the XHR request use async or not ?
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderAsync = GetValue ( config , 'loader.async' , true ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # loaderUser - Optional username for all XHR requests .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderUser = GetValue ( config , 'loader.user' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # loaderPassword - Optional password for all XHR requests .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderPassword = GetValue ( config , 'loader.password' , '' ) ;
2018-05-08 08:17:13 +00:00
/ * *
2020-11-23 10:22:13 +00:00
* @ const { number } Phaser . Core . Config # loaderTimeout - Optional XHR timeout value , in ms .
2018-05-08 08:17:13 +00:00
* /
2018-01-19 16:56:41 +00:00
this . loaderTimeout = GetValue ( config , 'loader.timeout' , 0 ) ;
2020-01-22 16:30:11 +00:00
/ * *
* @ const { boolean } Phaser . Core . Config # loaderWithCredentials - Optional XHR withCredentials value .
* /
this . loaderWithCredentials = GetValue ( config , 'loader.withCredentials' , false ) ;
2021-06-10 13:24:29 +00:00
/ * *
* @ const { string } Phaser . Core . Config # loaderImageLoadType - Optional load type for image , ` XHR ` is default , or ` HTMLImageElement ` for a lightweight way .
* /
this . loaderImageLoadType = GetValue ( config , 'loader.imageLoadType' , 'XHR' ) ;
2022-05-09 17:34:56 +00:00
// On iOS, Capacitor often runs on a capacitor:// protocol, meaning local files are served from capacitor:// rather than file://
// See: https://github.com/photonstorm/phaser/issues/5685
2022-02-15 11:07:48 +00:00
/ * *
2022-05-09 17:34:56 +00:00
* @ const { string [ ] } Phaser . Core . Config # loaderLocalScheme - An array of schemes that the Loader considers as being 'local' files . Defaults to : ` [ 'file://', 'capacitor://' ] ` .
2022-02-15 11:07:48 +00:00
* /
2022-05-09 17:34:56 +00:00
this . loaderLocalScheme = GetValue ( config , 'loader.localScheme' , [ 'file://' , 'capacitor://' ] ) ;
2022-02-15 11:07:48 +00:00
2018-05-10 16:15:25 +00:00
/ *
* Allows ` plugins ` property to either be an array , in which case it just replaces
2018-05-11 00:50:37 +00:00
* the default plugins like previously , or a config object .
2018-05-10 16:15:25 +00:00
*
* plugins : {
2018-05-11 17:55:44 +00:00
* global : [
2018-07-19 00:21:17 +00:00
* { key : 'TestPlugin' , plugin : TestPlugin , start : true , data : { msg : 'The plugin is alive' } } ,
2018-05-11 17:55:44 +00:00
* ] ,
* scene : [
* { key : 'WireFramePlugin' , plugin : WireFramePlugin , systemKey : 'wireFramePlugin' , sceneKey : 'wireframe' }
2018-05-10 16:15:25 +00:00
* ] ,
* default : [ ] , OR
2018-09-27 22:37:54 +00:00
* defaultMerge : [
2018-05-11 00:50:37 +00:00
* 'ModPlayer'
2018-09-27 22:37:54 +00:00
* ]
2018-05-10 16:15:25 +00:00
* }
* /
2018-05-11 00:50:37 +00:00
2018-05-11 15:01:11 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { any } Phaser . Core . Config # installGlobalPlugins - An array of global plugins to be installed .
2018-05-11 15:01:11 +00:00
* /
this . installGlobalPlugins = [ ] ;
/ * *
2019-01-15 16:17:04 +00:00
* @ const { any } Phaser . Core . Config # installScenePlugins - An array of Scene level plugins to be installed .
2018-05-11 15:01:11 +00:00
* /
this . installScenePlugins = [ ] ;
2018-05-11 00:50:37 +00:00
var plugins = GetValue ( config , 'plugins' , null ) ;
2018-05-11 13:06:13 +00:00
var defaultPlugins = DefaultPlugins . DefaultScene ;
2018-05-11 00:50:37 +00:00
2018-05-10 16:15:25 +00:00
if ( plugins )
{
// Old 3.7 array format?
if ( Array . isArray ( plugins ) )
{
this . defaultPlugins = plugins ;
}
else if ( IsPlainObject ( plugins ) )
{
2018-05-11 15:01:11 +00:00
this . installGlobalPlugins = GetFastValue ( plugins , 'global' , [ ] ) ;
this . installScenePlugins = GetFastValue ( plugins , 'scene' , [ ] ) ;
2018-05-10 16:15:25 +00:00
if ( Array . isArray ( plugins . default ) )
{
2018-05-11 00:50:37 +00:00
defaultPlugins = plugins . default ;
2018-05-10 16:15:25 +00:00
}
else if ( Array . isArray ( plugins . defaultMerge ) )
{
2018-05-11 00:50:37 +00:00
defaultPlugins = defaultPlugins . concat ( plugins . defaultMerge ) ;
2018-05-10 16:15:25 +00:00
}
}
}
2018-01-18 05:16:02 +00:00
2018-05-11 00:50:37 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { any } Phaser . Core . Config # defaultPlugins - The plugins installed into every Scene ( in addition to CoreScene and Global ) .
2018-05-11 00:50:37 +00:00
* /
this . defaultPlugins = defaultPlugins ;
2017-06-30 14:47:51 +00:00
// Default / Missing Images
var pngPrefix = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAg' ;
2017-03-28 22:56:00 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # defaultImage - A base64 encoded PNG that will be used as the default blank texture .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . defaultImage = GetValue ( config , 'images.default' , pngPrefix + 'AQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg==' ) ;
2018-08-12 10:19:48 +00:00
2018-05-08 08:17:13 +00:00
/ * *
2019-01-15 16:17:04 +00:00
* @ const { string } Phaser . Core . Config # missingImage - A base64 encoded PNG that will be used as the default texture when a texture is assigned that is missing or not loaded .
2018-05-08 08:17:13 +00:00
* /
2017-06-30 14:47:51 +00:00
this . missingImage = GetValue ( config , 'images.missing' , pngPrefix + 'CAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg==' ) ;
2018-08-02 14:58:36 +00:00
2020-09-14 13:57:08 +00:00
/ * *
* @ const { string } Phaser . Core . Config # whiteImage - A base64 encoded PNG that will be used as the default texture when a texture is assigned that is white or not loaded .
* /
this . whiteImage = GetValue ( config , 'images.white' , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpi/P//PwMMMDEgAdwcgAADAJZuAwXJYZOzAAAAAElFTkSuQmCC' ) ;
2018-08-02 14:58:36 +00:00
if ( window )
{
if ( window . FORCE _WEBGL )
{
this . renderType = CONST . WEBGL ;
}
else if ( window . FORCE _CANVAS )
{
this . renderType = CONST . CANVAS ;
}
}
2017-06-30 14:47:51 +00:00
}
2016-11-24 01:35:02 +00:00
2017-06-30 14:47:51 +00:00
} ) ;
2016-11-24 01:35:02 +00:00
module . exports = Config ;