diff --git a/src/util/phaser-input-master/Gruntfile.js b/src/util/phaser-input-master/Gruntfile.js
new file mode 100755
index 0000000..272acc8
--- /dev/null
+++ b/src/util/phaser-input-master/Gruntfile.js
@@ -0,0 +1,104 @@
+module.exports = function (grunt) {
+ 'use strict';
+
+ grunt.initConfig({
+ //Get some details from the package.json
+ pkg: grunt.file.readJSON('package.json'),
+ banner: '/*!\n' +
+ ' * <%= pkg.config.name %> - version <%= pkg.version %> \n' +
+ ' * <%= pkg.description %>\n' +
+ ' *\n' +
+ ' * <%= pkg.author %>\n' +
+ ' * Build at <%= grunt.template.today("dd-mm-yyyy") %>\n' +
+ ' * Released under MIT License \n' +
+ ' */\n',
+ usebanner: {
+ dist: {
+ options: {
+ position: 'top',
+ banner: '<%= banner %>'
+ },
+ files: {
+ src: [ 'build/*.js' ]
+ }
+ }
+ },
+ //Typescript settings per build
+ ts: {
+ options: {
+ module: 'amd',
+ target: 'es5',
+ sourceMap: true,
+ declaration: true,
+ noImplicitAny: true
+ },
+ dist: {
+ src: ['ts/**/*.ts'],
+ dest: 'build/<%= pkg.config.name %>.js'
+ }
+ },
+ watch: {
+ files: ['ts/**/*.ts'],
+ tasks: ['ts'],
+ options: {
+ livereload: true
+ }
+ },
+ connect: {
+ server: {
+ options: {
+ base: ['./build', './example'],
+ port: 8080
+ }
+ }
+ },
+ uglify: {
+ options: {
+ compress: {
+ sequences: true,
+ dead_code: true,
+ conditionals: true,
+ booleans: true,
+ unused: true,
+ if_return: true,
+ join_vars: true,
+ drop_console: true
+ },
+ mangle: true,
+ beautify: false
+ },
+ dist: {
+ files: {
+ 'build/<%= pkg.config.name %>.min.js': [
+ 'build/<%= pkg.config.name %>.js'
+ ]
+ }
+ }
+ },
+ clean: {
+ dist: ['build']
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-clean');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-banner');
+ grunt.loadNpmTasks('grunt-ts');
+ grunt.loadNpmTasks('grunt-contrib-connect');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+
+ //dist Build
+ grunt.registerTask('dist', [
+ 'clean:dist', //Clean the dist folder
+ 'ts:dist',//Run typescript on the preprocessed files, for dist (client)
+ 'uglify:dist', //Minify everything
+ 'usebanner:dist' //Minify everything
+ ]);
+
+ grunt.registerTask('dev', [
+ 'ts:dist',
+ 'connect',
+ 'watch'
+ ]);
+
+};
diff --git a/src/util/phaser-input-master/LICENSE b/src/util/phaser-input-master/LICENSE
new file mode 100755
index 0000000..c297e70
--- /dev/null
+++ b/src/util/phaser-input-master/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Orange Games
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/src/util/phaser-input-master/README.md b/src/util/phaser-input-master/README.md
new file mode 100755
index 0000000..fc9dc04
--- /dev/null
+++ b/src/util/phaser-input-master/README.md
@@ -0,0 +1,192 @@
+Phaser Input
+============
+Phaser Input is a plugin for Phaser that allows you to use html input fields as Phaser object inside your Phaser game. It fills the blanks of CanvasInput (that only works on a canvas renderer) and appends it with full Phaser support!
+The best part is that it will also work on mobile devices!
+
+Key features:
+
+* Works on mobile and Desktop
+* Included TypeScript support
+* Also runs under WebGL renderer
+* Pure Phaser implementation
+* Easy configurable
+* Production hardened
+
+*Imporant*
+From here on this library will be published and updated under [@orange-games/phaser-input](https://www.npmjs.com/package/@orange-games/phaser-input) at NPM, the old [phaser-input](https://www.npmjs.com/package/phaser-input) will no longer be maintained.
+If you are comming from v1 you can read the migration guide at the bottom
+
+Getting Started
+---------------
+First you want to get a fresh copy of the plugin. You can get it from this repo or from npm, ain't that handy.
+```
+npm install @orange-games/phaser-input --save-dev
+```
+
+Next up you'd want to add it to your list of js sources you load into your game
+```html
+
+```
+
+After adding the script to the page you can activate it by enabling the plugin:
+```javascript
+game.add.plugin(PhaserInput.Plugin);
+```
+
+Usage
+-----
+### Adding a InputField
+The simplest way of adding a input field is:
+```javascript
+var input = game.add.inputField(10, 90);
+```
+
+Ofcourse there are options available that can be used to style the input. They can be passes as an object as the third parameter.
+
+```javascript
+var password = game.add.inputField(10, 90, {
+ font: '18px Arial',
+ fill: '#212121',
+ fontWeight: 'bold',
+ width: 150,
+ padding: 8,
+ borderWidth: 1,
+ borderColor: '#000',
+ borderRadius: 6,
+ placeHolder: 'Password',
+ type: PhaserInput.InputType.password
+});
+```
+
+### Using zoom
+Zooming is easy to enable on an input field, it can be passed to the InputField as a setting. But there are some caveats:
+
+First of all, it's only meant for mobile. Second; it modifies the scale and pivot of the world, and that might interfere with your resize.
+
+Also, when the keyboard is shown, sometimes a resize event will be triggered.
+
+Ideally you use a custom resize event, check for the static property `PhaserInput.KeyboardOpen` and don't resize when it's set to true.
+
+### Using keyboard open/close signals
+Current version includes two event dispatchers that notify when a device keyboard is opened or closed.
+
+You can add listeners which trigger events based on this feedback.
+
+```javascript
+PhaserInput.onKeyboardClose.addOnce(function() {
+ this.resizeBackgroundImage();
+});
+```
+
+### Capture input events
+By default, input event will not bubble up to other elements
+This is controlled by an InputField property called `blockInput`.
+When set to false, the input event will trigger on the input element and move up to other elements listening for the event.
+
+e.g. An in-game sprite might be listening for keyboard events (W, A, S, D).
+If set to false, typing in input field will not trigger keyboard events for the sprite.
+So the sprite will not move when typing into input field.
+
+
+### Toggle Enter key
+InputField has a property (`focusOutOnEnter`) that controls whether the input field will lose focus on pressing Enter.
+If set to true, pressing enter will end focus on the field (default is true).
+
+
+### Current Limitations
+ - Updates are slow when typing fast (type slower you!!)
+ - Zoom modifies the pivot and scale of the world, so it might interfere with some stuff
+
+## Properties
+ - **x**: number (0 by default) The X-coordinate in the game
+ - **y**: number (0 by default) The Y-coordinate in the game
+ - **fill**: string (#fff by default) The color of the inputted text
+ - **fillAlpha**: number (1 by default) Alpha of the textbox, 0 will hide the textbox and only show the text/placeholder/cursor
+ - **width**: number (150 by default) The width of the text box (just like in the DOM, padding, borders add onto this width)
+ - **height**: number (14 by default) The height of the text box (just like in the DOM, padding, borders add onto this height)
+ - **padding**: number (0 by default) The padding in pixels around all 4 sides of the text input area.
+ - **borderWidth**: number (1 by default) Size of the border
+ - **borderColor**: string (#000 by default) Color of the border
+ - **forceCase**: ForceCase (none by default) If we should force a certain case (either upper or lower)
+ - **borderRadius**: number (0 by default) Create rounded corners by setting a border radius
+ - **placeHolder**: string ('' by default) Text that will be shown before the user input's anything
+ - **placeHolderColor**: string (#bfbebd by default) The color of the placeholder text
+ - **type**: InputType (text by default) Either text, password or numeric
+ - **backgroundColor**: string (#fff by default) The background color of the input box
+ - **cursorColor**: string (#000 by default) The color of the blinking cursor
+ - **font**: string (14px Arial by default) The font that is used for the input box, covers the input text, placeholder and cursor
+ - **min**: string (none by default) The minimum number for the input field, only for number input fields
+ - **max**: string (none by default) The maximum number for the number input field, or the maxLength for other input fields
+ - **selectionColor**: string (rgba(179, 212, 253, 0.8) by default) The default color for the text selection highlight.
+ - **zoom**: boolean (false by default) if we need to zoom onto the input field (mobile only).
+
+### Browser Support
+Tested on:
+ - Desktop
+ * Chrome 48+
+ * FireFox 44+
+ * Safari 9+
+ - Mobile
+ * Chrome 48+
+ * iOS 9+
+
+Migrating from v1
+-----------------
+the API of the objects is the same as before but the namespace changed. We decided to remove the Fabrique namespace, and house the plugin in it's own (PhaserInput).
+so:
+Fabrique.Plugins.Input
+becomes:
+PhaserInput.Plugin
+
+and all other references of Fabrique.Plugins can be replaced with PhaserInput.
+If you are still unsure how or what, both the example and this readme have been adjusted to work with the new namespace.
+
+FAQ
+---
+### I Don't see the cursor blinking!
+This is most likely due to you adding the input field to a custom Phaser object. According to the [Phaser docs](http://phaser.io/docs/2.6.2/Phaser.Sprite.html#update) the update function needs to be called manually in these cases.
+
+So add the following to your object and the cursor should work :)
+
+```javascript
+update: function () {
+ this._inputField.update();
+},
+```
+
+### How do I focus on the element?!
+Normally the element is only focused trough user interaction (due to mobile limitations) you can get around this by manually calling the focus method yourself:
+```javascript
+var input = game.add.inputField(10, 90);
+//start with focus on the element
+input.startFocus();
+
+//and then end the focus
+input.endFocus();
+```
+Please note that this will not work on mobile wihtout a user interaction
+
+### Can I change the width later on in the code?
+Well thanks for asking, yes you can!
+```javascript
+var input = game.add.inputField(10, 90);
+input.width = 200;
+```
+
+### Well then, is it also possible to set the value in code?
+Yes you can! The Inputfield has a setText function you can call to set any value you want!
+```javascript
+var input = game.add.inputField(10, 90);
+input.setText("My custom text");
+```
+
+Credits
+-------
+phaser-input is inspired by [CanvasInput](https://github.com/goldfire/CanvasInput)
+
+Disclaimer
+----------
+We at OrangeGames just love playing and creating awesome games. We aren't affiliated with Phaser.io. We just needed some awesome input boxes in our awesome HTML5 games. Feel free to use it for enhancing your own awesome games!
+
+Phaser Input is distributed under the MIT license. All 3rd party libraries and components are distributed under their
+respective license terms.
diff --git a/src/util/phaser-input-master/build/phaser-input.d.ts b/src/util/phaser-input-master/build/phaser-input.d.ts
new file mode 100755
index 0000000..50e3ed0
--- /dev/null
+++ b/src/util/phaser-input-master/build/phaser-input.d.ts
@@ -0,0 +1,162 @@
+declare module PhaserInput {
+ enum InputType {
+ text = 0,
+ password = 1,
+ number = 2,
+ }
+ class InputElement {
+ private element;
+ private keyUpCallback;
+ private inputChangeCallback;
+ private type;
+ private id;
+ private game;
+ private focusIn;
+ private focusOut;
+ constructor(game: Phaser.Game, id: string, type?: InputType, value?: string, focusIn?: Phaser.Signal, focusOut?: Phaser.Signal);
+ addKeyUpListener(callback: () => void): void;
+ blockKeyDownEvents(): void;
+ private preventKeyPropagation(evt);
+ unblockKeyDownEvents(): void;
+ removeEventListener(): void;
+ destroy(): void;
+ setMax(max: string, min?: string): void;
+ value: string;
+ focus(): void;
+ blur(): void;
+ readonly hasSelection: boolean;
+ readonly caretStart: number;
+ readonly caretEnd: number;
+ getCaretPosition(): number;
+ setCaretPosition(pos: number): void;
+ }
+}
+declare module PhaserInput {
+ enum ForceCase {
+ none = 0,
+ lower = 1,
+ upper = 2,
+ }
+ interface InputOptions extends Phaser.PhaserTextStyle {
+ x?: number;
+ y?: number;
+ placeHolder?: string;
+ fillAlpha?: number;
+ width?: number;
+ height?: number;
+ padding?: number;
+ borderWidth?: number;
+ borderColor?: string;
+ borderRadius?: number;
+ cursorColor?: string;
+ placeHolderColor?: string;
+ type?: InputType;
+ forceCase?: ForceCase;
+ min?: string;
+ max?: string;
+ textAlign?: string;
+ selectionColor?: string;
+ zoom?: boolean;
+ }
+ class InputField extends Phaser.Sprite {
+ focusOutOnEnter: boolean;
+ private placeHolder;
+ private box;
+ private textMask;
+ private focus;
+ private cursor;
+ private text;
+ private offscreenText;
+ value: string;
+ private inputOptions;
+ private domElement;
+ private selection;
+ private windowScale;
+ blockInput: boolean;
+ focusIn: Phaser.Signal;
+ focusOut: Phaser.Signal;
+ width: number;
+ constructor(game: Phaser.Game, x: number, y: number, inputOptions?: InputOptions);
+ private updateTextAlignment();
+ private checkDown(e);
+ private blink;
+ private cnt;
+ update(): number;
+ endFocus(): void;
+ startFocus(): void;
+ private keyUpProcessor();
+ private updateText();
+ private updateCursor();
+ private getCaretPosition();
+ private setCaretOnclick(e);
+ private updateSelection();
+ private zoomIn();
+ private zoomOut();
+ private keyListener(evt);
+ destroy(destroyChildren?: boolean): void;
+ resetText(): void;
+ setText(text?: string): void;
+ private getFormattedText(text);
+ }
+}
+declare module PhaserInput {
+ class InputBox extends Phaser.Graphics {
+ private bgColor;
+ private borderRadius;
+ private borderColor;
+ private borderWidth;
+ private boxAlpha;
+ private boxHeight;
+ private padding;
+ private boxWidth;
+ constructor(game: Phaser.Game, inputOptions: InputOptions);
+ resize(newWidth: number): void;
+ private drawBox();
+ }
+}
+declare module PhaserInput {
+ class SelectionHighlight extends Phaser.Graphics {
+ private inputOptions;
+ constructor(game: Phaser.Game, inputOptions: InputOptions);
+ updateSelection(rect: PIXI.Rectangle): void;
+ static rgb2hex(color: {
+ r: number;
+ g: number;
+ b: number;
+ a: number;
+ }): number;
+ }
+}
+declare module PhaserInput {
+ class TextMask extends Phaser.Graphics {
+ private maskWidth;
+ private maskHeight;
+ constructor(game: Phaser.Game, inputOptions: InputOptions);
+ resize(newWidth: number): void;
+ private drawMask();
+ }
+}
+declare module PhaserInput {
+ var Zoomed: boolean;
+ var KeyboardOpen: boolean;
+ const onKeyboardOpen: Phaser.Signal;
+ const onKeyboardClose: Phaser.Signal;
+ interface InputFieldObjectFactory extends Phaser.GameObjectFactory {
+ inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions, group?: Phaser.Group) => PhaserInput.InputField;
+ }
+ interface InputFieldObjectCreator extends Phaser.GameObjectCreator {
+ inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions) => PhaserInput.InputField;
+ }
+ interface InputFieldGame extends Phaser.Game {
+ add: InputFieldObjectFactory;
+ make: InputFieldObjectCreator;
+ }
+ class Plugin extends Phaser.Plugin {
+ static Zoomed: boolean;
+ static KeyboardOpen: boolean;
+ static onKeyboardOpen: Phaser.Signal;
+ static onKeyboardClose: Phaser.Signal;
+ constructor(game: Phaser.Game, parent: Phaser.PluginManager);
+ private addInputFieldFactory();
+ }
+}
diff --git a/src/util/phaser-input-master/build/phaser-input.js b/src/util/phaser-input-master/build/phaser-input.js
new file mode 100755
index 0000000..1ff8d1f
--- /dev/null
+++ b/src/util/phaser-input-master/build/phaser-input.js
@@ -0,0 +1,720 @@
+/*!
+ * phaser-input - version 2.0.5
+ * Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only.
+ *
+ * OrangeGames
+ * Build at 02-06-2017
+ * Released under MIT License
+ */
+
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+var PhaserInput;
+(function (PhaserInput) {
+ var InputType;
+ (function (InputType) {
+ InputType[InputType["text"] = 0] = "text";
+ InputType[InputType["password"] = 1] = "password";
+ InputType[InputType["number"] = 2] = "number";
+ })(InputType = PhaserInput.InputType || (PhaserInput.InputType = {}));
+ var InputElement = (function () {
+ function InputElement(game, id, type, value, focusIn, focusOut) {
+ if (type === void 0) { type = InputType.text; }
+ if (value === void 0) { value = ''; }
+ var _this = this;
+ this.id = id;
+ this.type = type;
+ this.game = game;
+ this.focusIn = focusIn;
+ this.focusOut = focusOut;
+ var canvasTopX = this.game.canvas.getBoundingClientRect().top + document.body.scrollTop;
+ this.element = document.createElement('input');
+ this.element.id = id;
+ this.element.style.position = 'absolute';
+ this.element.style.top = canvasTopX + 'px';
+ this.element.style.left = (-40).toString() + 'px';
+ this.element.style.width = (10).toString() + 'px';
+ this.element.style.height = (10).toString() + 'px';
+ this.element.style.border = '0px';
+ this.element.value = this.value;
+ this.element.type = InputType[type];
+ this.element.addEventListener('focusin', function () {
+ if (_this.focusIn instanceof Phaser.Signal) {
+ _this.focusIn.dispatch();
+ }
+ });
+ this.element.addEventListener('focusout', function () {
+ if (_this.focusOut instanceof Phaser.Signal) {
+ _this.focusOut.dispatch();
+ }
+ });
+ document.body.appendChild(this.element);
+ }
+ InputElement.prototype.addKeyUpListener = function (callback) {
+ this.keyUpCallback = callback;
+ document.addEventListener('keyup', this.keyUpCallback);
+ this.element.addEventListener('input', this.keyUpCallback);
+ };
+ InputElement.prototype.blockKeyDownEvents = function () {
+ document.addEventListener('keydown', this.preventKeyPropagation);
+ };
+ InputElement.prototype.preventKeyPropagation = function (evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ };
+ InputElement.prototype.unblockKeyDownEvents = function () {
+ document.removeEventListener('keydown', this.preventKeyPropagation);
+ };
+ InputElement.prototype.removeEventListener = function () {
+ document.removeEventListener('keyup', this.keyUpCallback);
+ this.element.removeEventListener('input', this.keyUpCallback);
+ };
+ InputElement.prototype.destroy = function () {
+ document.body.removeChild(this.element);
+ };
+ InputElement.prototype.setMax = function (max, min) {
+ if (max === undefined) {
+ return;
+ }
+ if (this.type === InputType.text || this.type === InputType.password) {
+ this.element.maxLength = parseInt(max, 10);
+ }
+ else if (this.type === InputType.number) {
+ this.element.max = max;
+ if (min === undefined) {
+ return;
+ }
+ this.element.min = min;
+ }
+ };
+ Object.defineProperty(InputElement.prototype, "value", {
+ get: function () {
+ return this.element.value;
+ },
+ set: function (value) {
+ this.element.value = value;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ InputElement.prototype.focus = function () {
+ var _this = this;
+ this.element.focus();
+ if (!this.game.device.desktop && this.game.device.chrome) {
+ var originalWidth_1 = window.innerWidth, originalHeight_1 = window.innerHeight;
+ var kbAppeared_1 = false;
+ var interval_1 = setInterval(function () {
+ if (originalWidth_1 > window.innerWidth || originalHeight_1 > window.innerHeight) {
+ kbAppeared_1 = true;
+ }
+ if (kbAppeared_1 && originalWidth_1 === window.innerWidth && originalHeight_1 === window.innerHeight) {
+ if (_this.focusOut instanceof Phaser.Signal) {
+ _this.focusOut.dispatch();
+ }
+ clearInterval(interval_1);
+ }
+ }, 50);
+ }
+ };
+ InputElement.prototype.blur = function () {
+ this.element.blur();
+ };
+ Object.defineProperty(InputElement.prototype, "hasSelection", {
+ get: function () {
+ if (this.type === InputType.number) {
+ return false;
+ }
+ return this.element.selectionStart !== this.element.selectionEnd;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(InputElement.prototype, "caretStart", {
+ get: function () {
+ return this.element.selectionEnd;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(InputElement.prototype, "caretEnd", {
+ get: function () {
+ return this.element.selectionStart;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ InputElement.prototype.getCaretPosition = function () {
+ if (this.type === InputType.number) {
+ return -1;
+ }
+ return this.element.selectionStart;
+ };
+ InputElement.prototype.setCaretPosition = function (pos) {
+ if (this.type === InputType.number) {
+ return;
+ }
+ this.element.setSelectionRange(pos, pos);
+ };
+ return InputElement;
+ }());
+ PhaserInput.InputElement = InputElement;
+})(PhaserInput || (PhaserInput = {}));
+var PhaserInput;
+(function (PhaserInput) {
+ var ForceCase;
+ (function (ForceCase) {
+ ForceCase[ForceCase["none"] = 0] = "none";
+ ForceCase[ForceCase["lower"] = 1] = "lower";
+ ForceCase[ForceCase["upper"] = 2] = "upper";
+ })(ForceCase = PhaserInput.ForceCase || (PhaserInput.ForceCase = {}));
+ var InputField = (function (_super) {
+ __extends(InputField, _super);
+ function InputField(game, x, y, inputOptions) {
+ if (inputOptions === void 0) { inputOptions = {}; }
+ var _this = _super.call(this, game, x, y) || this;
+ _this.focusOutOnEnter = true;
+ _this.placeHolder = null;
+ _this.box = null;
+ _this.focus = false;
+ _this.value = '';
+ _this.windowScale = 1;
+ _this.blockInput = true;
+ _this.focusIn = new Phaser.Signal();
+ _this.focusOut = new Phaser.Signal();
+ _this.blink = true;
+ _this.cnt = 0;
+ _this.inputOptions = inputOptions;
+ _this.inputOptions.width = (typeof inputOptions.width === 'number') ? inputOptions.width : 150;
+ _this.inputOptions.padding = (typeof inputOptions.padding === 'number') ? inputOptions.padding : 0;
+ _this.inputOptions.textAlign = inputOptions.textAlign || 'left';
+ _this.inputOptions.type = inputOptions.type || PhaserInput.InputType.text;
+ _this.inputOptions.forceCase = (inputOptions.forceCase) ? inputOptions.forceCase : ForceCase.none;
+ _this.inputOptions.borderRadius = (typeof inputOptions.borderRadius === 'number') ? inputOptions.borderRadius : 0;
+ _this.inputOptions.height = (typeof inputOptions.height === 'number') ? inputOptions.height : 14;
+ _this.inputOptions.fillAlpha = (inputOptions.fillAlpha === undefined) ? 1 : inputOptions.fillAlpha;
+ _this.inputOptions.selectionColor = inputOptions.selectionColor || 'rgba(179, 212, 253, 0.8)';
+ _this.inputOptions.zoom = (!game.device.desktop) ? inputOptions.zoom || false : false;
+ _this.box = new PhaserInput.InputBox(_this.game, inputOptions);
+ _this.setTexture(_this.box.generateTexture());
+ _this.textMask = new PhaserInput.TextMask(_this.game, inputOptions);
+ _this.addChild(_this.textMask);
+ _this.domElement = new PhaserInput.InputElement(_this.game, 'phaser-input-' + (Math.random() * 10000 | 0).toString(), _this.inputOptions.type, _this.value, _this.focusIn, _this.focusOut);
+ _this.domElement.setMax(_this.inputOptions.max, _this.inputOptions.min);
+ _this.selection = new PhaserInput.SelectionHighlight(_this.game, _this.inputOptions);
+ _this.selection.mask = _this.textMask;
+ _this.addChild(_this.selection);
+ if (inputOptions.placeHolder && inputOptions.placeHolder.length > 0) {
+ _this.placeHolder = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, inputOptions.placeHolder, {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.placeHolderColor || '#bfbebd'
+ });
+ _this.placeHolder.mask = _this.textMask;
+ _this.addChild(_this.placeHolder);
+ }
+ _this.cursor = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding - 2, '|', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.cursorColor || '#000000'
+ });
+ _this.cursor.visible = false;
+ _this.addChild(_this.cursor);
+ _this.text = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, '', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.fill || '#000000'
+ });
+ _this.text.mask = _this.textMask;
+ _this.addChild(_this.text);
+ _this.offscreenText = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, '', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.fill || '#000000'
+ });
+ _this.updateTextAlignment();
+ _this.inputEnabled = true;
+ _this.input.useHandCursor = true;
+ _this.game.input.onDown.add(_this.checkDown, _this);
+ _this.focusOut.add(function () {
+ if (PhaserInput.KeyboardOpen) {
+ _this.endFocus();
+ if (_this.inputOptions.zoom) {
+ _this.zoomOut();
+ }
+ }
+ });
+ return _this;
+ }
+ Object.defineProperty(InputField.prototype, "width", {
+ get: function () {
+ return this.inputOptions.width;
+ },
+ set: function (width) {
+ this.inputOptions.width = width;
+ this.box.resize(width);
+ this.textMask.resize(width);
+ this.updateTextAlignment();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ InputField.prototype.updateTextAlignment = function () {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.text.anchor.set(0, 0);
+ this.text.x = this.inputOptions.padding;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(0, 0);
+ }
+ this.cursor.x = this.inputOptions.padding + this.getCaretPosition();
+ break;
+ case 'center':
+ this.text.anchor.set(0.5, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(0.5, 0);
+ this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ }
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition();
+ break;
+ case 'right':
+ this.text.anchor.set(1, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(1, 0);
+ this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width;
+ }
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width;
+ break;
+ }
+ };
+ InputField.prototype.checkDown = function (e) {
+ if (!this.value) {
+ this.resetText();
+ }
+ if (this.input.checkPointerOver(e)) {
+ if (this.focus) {
+ this.setCaretOnclick(e);
+ return;
+ }
+ if (this.inputOptions.zoom && !PhaserInput.Zoomed) {
+ this.zoomIn();
+ }
+ this.startFocus();
+ }
+ else {
+ if (this.focus === true) {
+ this.endFocus();
+ if (this.inputOptions.zoom) {
+ this.zoomOut();
+ }
+ }
+ }
+ };
+ InputField.prototype.update = function () {
+ this.text.update();
+ if (this.placeHolder) {
+ this.placeHolder.update();
+ }
+ if (!this.focus) {
+ return;
+ }
+ if (this.cnt !== 30) {
+ return this.cnt++;
+ }
+ this.cursor.visible = this.blink;
+ this.blink = !this.blink;
+ this.cnt = 0;
+ };
+ InputField.prototype.endFocus = function () {
+ var _this = this;
+ if (!this.focus) {
+ return;
+ }
+ this.domElement.removeEventListener();
+ if (this.blockInput === true) {
+ this.domElement.unblockKeyDownEvents();
+ }
+ this.focus = false;
+ if (this.value.length === 0 && null !== this.placeHolder) {
+ this.placeHolder.visible = true;
+ }
+ this.cursor.visible = false;
+ if (this.game.device.desktop) {
+ setTimeout(function () {
+ _this.domElement.blur();
+ }, 0);
+ }
+ else {
+ this.domElement.blur();
+ }
+ if (!this.game.device.desktop) {
+ PhaserInput.KeyboardOpen = false;
+ PhaserInput.onKeyboardClose.dispatch();
+ }
+ };
+ InputField.prototype.startFocus = function () {
+ var _this = this;
+ this.focus = true;
+ if (null !== this.placeHolder) {
+ this.placeHolder.visible = false;
+ }
+ if (this.game.device.desktop) {
+ setTimeout(function () {
+ _this.keyUpProcessor();
+ }, 0);
+ }
+ else {
+ this.keyUpProcessor();
+ }
+ if (!this.game.device.desktop) {
+ PhaserInput.KeyboardOpen = true;
+ PhaserInput.onKeyboardOpen.dispatch();
+ }
+ };
+ InputField.prototype.keyUpProcessor = function () {
+ this.domElement.addKeyUpListener(this.keyListener.bind(this));
+ this.domElement.focus();
+ if (this.blockInput === true) {
+ this.domElement.blockKeyDownEvents();
+ }
+ };
+ InputField.prototype.updateText = function () {
+ var text = '';
+ if (this.inputOptions.type === PhaserInput.InputType.password) {
+ for (var i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }
+ else if (this.inputOptions.type === PhaserInput.InputType.number) {
+ var val = parseInt(this.value);
+ if (val < parseInt(this.inputOptions.min)) {
+ text = this.value = this.domElement.value = this.inputOptions.min;
+ }
+ else if (val > parseInt(this.inputOptions.max)) {
+ text = this.value = this.domElement.value = this.inputOptions.max;
+ }
+ else {
+ text = this.value;
+ }
+ }
+ else {
+ text = this.value;
+ }
+ this.text.setText(text);
+ if (this.text.width > this.inputOptions.width) {
+ this.text.anchor.x = 1;
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ }
+ else {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.text.anchor.set(0, 0);
+ this.text.x = this.inputOptions.padding;
+ break;
+ case 'center':
+ this.text.anchor.set(0.5, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ break;
+ case 'right':
+ this.text.anchor.set(1, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ break;
+ }
+ }
+ };
+ InputField.prototype.updateCursor = function () {
+ if (this.text.width > this.inputOptions.width || this.inputOptions.textAlign === 'right') {
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width;
+ }
+ else {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.cursor.x = this.inputOptions.padding + this.getCaretPosition();
+ break;
+ case 'center':
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition();
+ break;
+ }
+ }
+ };
+ InputField.prototype.getCaretPosition = function () {
+ var caretPosition = this.domElement.getCaretPosition();
+ if (-1 === caretPosition) {
+ return this.text.width;
+ }
+ var text = this.value;
+ if (this.inputOptions.type === PhaserInput.InputType.password) {
+ text = '';
+ for (var i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }
+ this.offscreenText.setText(text.slice(0, caretPosition));
+ return this.offscreenText.width;
+ };
+ InputField.prototype.setCaretOnclick = function (e) {
+ var localX = (this.text.toLocal(new PIXI.Point(e.x, e.y), this.game.world)).x;
+ if (this.inputOptions.textAlign && this.inputOptions.textAlign === 'center') {
+ localX += this.text.width / 2;
+ }
+ var characterWidth = this.text.width / this.value.length;
+ var index = 0;
+ for (var i = 0; i < this.value.length; i++) {
+ if (localX >= i * characterWidth && localX <= (i + 1) * characterWidth) {
+ index = i;
+ break;
+ }
+ }
+ if (localX > (this.value.length - 1) * characterWidth) {
+ index = this.value.length;
+ }
+ this.startFocus();
+ this.domElement.setCaretPosition(index);
+ this.updateCursor();
+ };
+ InputField.prototype.updateSelection = function () {
+ if (this.domElement.hasSelection) {
+ var text = this.value;
+ if (this.inputOptions.type === PhaserInput.InputType.password) {
+ text = '';
+ for (var i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }
+ text = text.substring(this.domElement.caretStart, this.domElement.caretEnd);
+ this.offscreenText.setText(text);
+ this.selection.updateSelection(this.offscreenText.getBounds());
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.selection.x = this.inputOptions.padding;
+ break;
+ case 'center':
+ this.selection.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2;
+ break;
+ }
+ }
+ else {
+ this.selection.clear();
+ }
+ };
+ InputField.prototype.zoomIn = function () {
+ if (PhaserInput.Zoomed) {
+ return;
+ }
+ var bounds = this.getBounds();
+ if (window.innerHeight > window.innerWidth) {
+ this.windowScale = this.game.width / (bounds.width * 1.5);
+ }
+ else {
+ this.windowScale = (this.game.width / 2) / (bounds.width * 1.5);
+ }
+ var offsetX = ((this.game.width - bounds.width * 1.5) / 2) / this.windowScale;
+ this.game.world.scale.set(this.game.world.scale.x * this.windowScale, this.game.world.scale.y * this.windowScale);
+ this.game.world.pivot.set(bounds.x - offsetX, bounds.y - this.inputOptions.padding * 2);
+ PhaserInput.Zoomed = true;
+ };
+ InputField.prototype.zoomOut = function () {
+ if (!PhaserInput.Zoomed) {
+ return;
+ }
+ this.game.world.scale.set(this.game.world.scale.x / this.windowScale, this.game.world.scale.y / this.windowScale);
+ this.game.world.pivot.set(0, 0);
+ PhaserInput.Zoomed = false;
+ };
+ InputField.prototype.keyListener = function (evt) {
+ this.value = this.getFormattedText(this.domElement.value);
+ if (evt.keyCode === 13) {
+ if (this.focusOutOnEnter) {
+ this.endFocus();
+ }
+ return;
+ }
+ this.updateText();
+ this.updateCursor();
+ this.updateSelection();
+ evt.preventDefault();
+ };
+ InputField.prototype.destroy = function (destroyChildren) {
+ this.game.input.onDown.remove(this.checkDown, this);
+ this.focusIn.removeAll();
+ this.focusOut.removeAll();
+ this.domElement.destroy();
+ _super.prototype.destroy.call(this, destroyChildren);
+ };
+ InputField.prototype.resetText = function () {
+ this.setText();
+ };
+ InputField.prototype.setText = function (text) {
+ if (text === void 0) { text = ''; }
+ if (null !== this.placeHolder) {
+ if (text.length > 0) {
+ this.placeHolder.visible = false;
+ }
+ else {
+ this.placeHolder.visible = true;
+ }
+ }
+ this.value = this.getFormattedText(text);
+ this.domElement.value = this.value;
+ this.updateText();
+ this.updateCursor();
+ this.endFocus();
+ };
+ InputField.prototype.getFormattedText = function (text) {
+ switch (this.inputOptions.forceCase) {
+ default:
+ case ForceCase.none:
+ return text;
+ case ForceCase.lower:
+ return text.toLowerCase();
+ case ForceCase.upper:
+ return text.toUpperCase();
+ }
+ };
+ return InputField;
+ }(Phaser.Sprite));
+ PhaserInput.InputField = InputField;
+})(PhaserInput || (PhaserInput = {}));
+var PhaserInput;
+(function (PhaserInput) {
+ var InputBox = (function (_super) {
+ __extends(InputBox, _super);
+ function InputBox(game, inputOptions) {
+ var _this = _super.call(this, game, 0, 0) || this;
+ _this.bgColor = (inputOptions.backgroundColor) ? parseInt(inputOptions.backgroundColor.slice(1), 16) : 0xffffff;
+ _this.borderRadius = inputOptions.borderRadius || 0;
+ _this.borderWidth = inputOptions.borderWidth || 1;
+ _this.borderColor = (inputOptions.borderColor) ? parseInt(inputOptions.borderColor.slice(1), 16) : 0x959595;
+ _this.boxAlpha = inputOptions.fillAlpha;
+ _this.padding = inputOptions.padding;
+ var height = inputOptions.height;
+ var width = inputOptions.width;
+ var height;
+ if (inputOptions.font) {
+ height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height);
+ }
+ _this.boxHeight = _this.padding * 2 + height;
+ var width = inputOptions.width;
+ _this.boxWidth = _this.padding * 2 + width;
+ _this.drawBox();
+ return _this;
+ }
+ InputBox.prototype.resize = function (newWidth) {
+ this.boxWidth = this.padding * 2 + newWidth;
+ this.drawBox();
+ };
+ InputBox.prototype.drawBox = function () {
+ this.clear()
+ .beginFill(this.bgColor, this.boxAlpha)
+ .lineStyle(this.borderWidth, this.borderColor, this.boxAlpha);
+ if (this.borderRadius > 0) {
+ this.drawRoundedRect(0, 0, this.boxWidth, this.boxHeight, this.borderRadius);
+ }
+ else {
+ this.drawRect(0, 0, this.boxWidth, this.boxHeight);
+ }
+ };
+ return InputBox;
+ }(Phaser.Graphics));
+ PhaserInput.InputBox = InputBox;
+})(PhaserInput || (PhaserInput = {}));
+var PhaserInput;
+(function (PhaserInput) {
+ var SelectionHighlight = (function (_super) {
+ __extends(SelectionHighlight, _super);
+ function SelectionHighlight(game, inputOptions) {
+ var _this = _super.call(this, game, inputOptions.padding, inputOptions.padding) || this;
+ _this.inputOptions = inputOptions;
+ return _this;
+ }
+ SelectionHighlight.prototype.updateSelection = function (rect) {
+ var color = Phaser.Color.webToColor(this.inputOptions.selectionColor);
+ this.clear();
+ this.beginFill(SelectionHighlight.rgb2hex(color), color.a);
+ this.drawRect(rect.x, rect.y, rect.width, rect.height - this.inputOptions.padding);
+ };
+ SelectionHighlight.rgb2hex = function (color) {
+ return parseInt(("0" + color.r.toString(16)).slice(-2) +
+ ("0" + color.g.toString(16)).slice(-2) +
+ ("0" + color.b.toString(16)).slice(-2), 16);
+ };
+ return SelectionHighlight;
+ }(Phaser.Graphics));
+ PhaserInput.SelectionHighlight = SelectionHighlight;
+})(PhaserInput || (PhaserInput = {}));
+var PhaserInput;
+(function (PhaserInput) {
+ var TextMask = (function (_super) {
+ __extends(TextMask, _super);
+ function TextMask(game, inputOptions) {
+ var _this = _super.call(this, game, inputOptions.padding, inputOptions.padding) || this;
+ var height = inputOptions.height;
+ if (inputOptions.font) {
+ height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height);
+ }
+ _this.maskWidth = inputOptions.width;
+ _this.maskHeight = height * 1.3;
+ _this.drawMask();
+ return _this;
+ }
+ TextMask.prototype.resize = function (newWidth) {
+ this.maskWidth = newWidth;
+ this.drawMask();
+ };
+ TextMask.prototype.drawMask = function () {
+ this.clear()
+ .beginFill(0x000000)
+ .drawRect(0, 0, this.maskWidth, this.maskHeight)
+ .endFill();
+ };
+ return TextMask;
+ }(Phaser.Graphics));
+ PhaserInput.TextMask = TextMask;
+})(PhaserInput || (PhaserInput = {}));
+var PhaserInput;
+(function (PhaserInput) {
+ PhaserInput.Zoomed = false;
+ PhaserInput.KeyboardOpen = false;
+ PhaserInput.onKeyboardOpen = new Phaser.Signal();
+ PhaserInput.onKeyboardClose = new Phaser.Signal();
+ var Plugin = (function (_super) {
+ __extends(Plugin, _super);
+ function Plugin(game, parent) {
+ var _this = _super.call(this, game, parent) || this;
+ _this.addInputFieldFactory();
+ return _this;
+ }
+ Plugin.prototype.addInputFieldFactory = function () {
+ Phaser.GameObjectFactory.prototype.inputField = function (x, y, inputOptions, group) {
+ if (group === undefined) {
+ group = this.world;
+ }
+ var nineSliceObject = new PhaserInput.InputField(this.game, x, y, inputOptions);
+ return group.add(nineSliceObject);
+ };
+ Phaser.GameObjectCreator.prototype.inputField = function (x, y, inputOptions) {
+ return new PhaserInput.InputField(this.game, x, y, inputOptions);
+ };
+ };
+ return Plugin;
+ }(Phaser.Plugin));
+ Plugin.Zoomed = false;
+ Plugin.KeyboardOpen = false;
+ Plugin.onKeyboardOpen = new Phaser.Signal();
+ Plugin.onKeyboardClose = new Phaser.Signal();
+ PhaserInput.Plugin = Plugin;
+})(PhaserInput || (PhaserInput = {}));
+//# sourceMappingURL=phaser-input.js.map
\ No newline at end of file
diff --git a/src/util/phaser-input-master/build/phaser-input.js.map b/src/util/phaser-input-master/build/phaser-input.js.map
new file mode 100755
index 0000000..0fd4d1e
--- /dev/null
+++ b/src/util/phaser-input-master/build/phaser-input.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"phaser-input.js","sourceRoot":"","sources":["../ts/InputElement.ts","../ts/InputField.ts","../ts/Objects/InputBox.ts","../ts/Objects/SelectionHighlight.ts","../ts/Objects/TextMask.ts","../ts/Plugin.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/build/phaser-input.min.js b/src/util/phaser-input-master/build/phaser-input.min.js
new file mode 100755
index 0000000..a44a0ff
--- /dev/null
+++ b/src/util/phaser-input-master/build/phaser-input.min.js
@@ -0,0 +1,10 @@
+/*!
+ * phaser-input - version 2.0.5
+ * Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only.
+ *
+ * OrangeGames
+ * Build at 02-06-2017
+ * Released under MIT License
+ */
+
+var __extends=this&&this.__extends||function(){var a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return function(b,c){function d(){this.constructor=b}a(b,c),b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}}(),PhaserInput;!function(a){var b;!function(a){a[a.text=0]="text",a[a.password=1]="password",a[a.number=2]="number"}(b=a.InputType||(a.InputType={}));var c=function(){function a(a,c,d,e,f,g){void 0===d&&(d=b.text),void 0===e&&(e="");var h=this;this.id=c,this.type=d,this.game=a,this.focusIn=f,this.focusOut=g;var i=this.game.canvas.getBoundingClientRect().top+document.body.scrollTop;this.element=document.createElement("input"),this.element.id=c,this.element.style.position="absolute",this.element.style.top=i+"px",this.element.style.left=(-40).toString()+"px",this.element.style.width=10..toString()+"px",this.element.style.height=10..toString()+"px",this.element.style.border="0px",this.element.value=this.value,this.element.type=b[d],this.element.addEventListener("focusin",function(){h.focusIn instanceof Phaser.Signal&&h.focusIn.dispatch()}),this.element.addEventListener("focusout",function(){h.focusOut instanceof Phaser.Signal&&h.focusOut.dispatch()}),document.body.appendChild(this.element)}return a.prototype.addKeyUpListener=function(a){this.keyUpCallback=a,document.addEventListener("keyup",this.keyUpCallback),this.element.addEventListener("input",this.keyUpCallback)},a.prototype.blockKeyDownEvents=function(){document.addEventListener("keydown",this.preventKeyPropagation)},a.prototype.preventKeyPropagation=function(a){a.stopPropagation?a.stopPropagation():event.cancelBubble=!0},a.prototype.unblockKeyDownEvents=function(){document.removeEventListener("keydown",this.preventKeyPropagation)},a.prototype.removeEventListener=function(){document.removeEventListener("keyup",this.keyUpCallback),this.element.removeEventListener("input",this.keyUpCallback)},a.prototype.destroy=function(){document.body.removeChild(this.element)},a.prototype.setMax=function(a,c){if(void 0!==a)if(this.type===b.text||this.type===b.password)this.element.maxLength=parseInt(a,10);else if(this.type===b.number){if(this.element.max=a,void 0===c)return;this.element.min=c}},Object.defineProperty(a.prototype,"value",{get:function(){return this.element.value},set:function(a){this.element.value=a},enumerable:!0,configurable:!0}),a.prototype.focus=function(){var a=this;if(this.element.focus(),!this.game.device.desktop&&this.game.device.chrome)var b=window.innerWidth,c=window.innerHeight,d=!1,e=setInterval(function(){(b>window.innerWidth||c>window.innerHeight)&&(d=!0),d&&b===window.innerWidth&&c===window.innerHeight&&(a.focusOut instanceof Phaser.Signal&&a.focusOut.dispatch(),clearInterval(e))},50)},a.prototype.blur=function(){this.element.blur()},Object.defineProperty(a.prototype,"hasSelection",{get:function(){return this.type===b.number?!1:this.element.selectionStart!==this.element.selectionEnd},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"caretStart",{get:function(){return this.element.selectionEnd},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"caretEnd",{get:function(){return this.element.selectionStart},enumerable:!0,configurable:!0}),a.prototype.getCaretPosition=function(){return this.type===b.number?-1:this.element.selectionStart},a.prototype.setCaretPosition=function(a){this.type!==b.number&&this.element.setSelectionRange(a,a)},a}();a.InputElement=c}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b;!function(a){a[a.none=0]="none",a[a.lower=1]="lower",a[a.upper=2]="upper"}(b=a.ForceCase||(a.ForceCase={}));var c=function(c){function d(d,e,f,g){void 0===g&&(g={});var h=c.call(this,d,e,f)||this;return h.focusOutOnEnter=!0,h.placeHolder=null,h.box=null,h.focus=!1,h.value="",h.windowScale=1,h.blockInput=!0,h.focusIn=new Phaser.Signal,h.focusOut=new Phaser.Signal,h.blink=!0,h.cnt=0,h.inputOptions=g,h.inputOptions.width="number"==typeof g.width?g.width:150,h.inputOptions.padding="number"==typeof g.padding?g.padding:0,h.inputOptions.textAlign=g.textAlign||"left",h.inputOptions.type=g.type||a.InputType.text,h.inputOptions.forceCase=g.forceCase?g.forceCase:b.none,h.inputOptions.borderRadius="number"==typeof g.borderRadius?g.borderRadius:0,h.inputOptions.height="number"==typeof g.height?g.height:14,h.inputOptions.fillAlpha=void 0===g.fillAlpha?1:g.fillAlpha,h.inputOptions.selectionColor=g.selectionColor||"rgba(179, 212, 253, 0.8)",h.inputOptions.zoom=d.device.desktop?!1:g.zoom||!1,h.box=new a.InputBox(h.game,g),h.setTexture(h.box.generateTexture()),h.textMask=new a.TextMask(h.game,g),h.addChild(h.textMask),h.domElement=new a.InputElement(h.game,"phaser-input-"+(1e4*Math.random()|0).toString(),h.inputOptions.type,h.value,h.focusIn,h.focusOut),h.domElement.setMax(h.inputOptions.max,h.inputOptions.min),h.selection=new a.SelectionHighlight(h.game,h.inputOptions),h.selection.mask=h.textMask,h.addChild(h.selection),g.placeHolder&&g.placeHolder.length>0&&(h.placeHolder=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,g.placeHolder,{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.placeHolderColor||"#bfbebd"}),h.placeHolder.mask=h.textMask,h.addChild(h.placeHolder)),h.cursor=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding-2,"|",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.cursorColor||"#000000"}),h.cursor.visible=!1,h.addChild(h.cursor),h.text=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,"",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.fill||"#000000"}),h.text.mask=h.textMask,h.addChild(h.text),h.offscreenText=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,"",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.fill||"#000000"}),h.updateTextAlignment(),h.inputEnabled=!0,h.input.useHandCursor=!0,h.game.input.onDown.add(h.checkDown,h),h.focusOut.add(function(){a.KeyboardOpen&&(h.endFocus(),h.inputOptions.zoom&&h.zoomOut())}),h}return __extends(d,c),Object.defineProperty(d.prototype,"width",{get:function(){return this.inputOptions.width},set:function(a){this.inputOptions.width=a,this.box.resize(a),this.textMask.resize(a),this.updateTextAlignment()},enumerable:!0,configurable:!0}),d.prototype.updateTextAlignment=function(){switch(this.inputOptions.textAlign){case"left":this.text.anchor.set(0,0),this.text.x=this.inputOptions.padding,null!==this.placeHolder&&this.placeHolder.anchor.set(0,0),this.cursor.x=this.inputOptions.padding+this.getCaretPosition();break;case"center":this.text.anchor.set(.5,0),this.text.x=this.inputOptions.padding+this.inputOptions.width/2,null!==this.placeHolder&&(this.placeHolder.anchor.set(.5,0),this.placeHolder.x=this.inputOptions.padding+this.inputOptions.width/2),this.cursor.x=this.inputOptions.padding+this.inputOptions.width/2-this.text.width/2+this.getCaretPosition();break;case"right":this.text.anchor.set(1,0),this.text.x=this.inputOptions.padding+this.inputOptions.width,null!==this.placeHolder&&(this.placeHolder.anchor.set(1,0),this.placeHolder.x=this.inputOptions.padding+this.inputOptions.width),this.cursor.x=this.inputOptions.padding+this.inputOptions.width}},d.prototype.checkDown=function(b){if(this.value||this.resetText(),this.input.checkPointerOver(b)){if(this.focus)return void this.setCaretOnclick(b);this.inputOptions.zoom&&!a.Zoomed&&this.zoomIn(),this.startFocus()}else this.focus===!0&&(this.endFocus(),this.inputOptions.zoom&&this.zoomOut())},d.prototype.update=function(){if(this.text.update(),this.placeHolder&&this.placeHolder.update(),this.focus){if(30!==this.cnt)return this.cnt++;this.cursor.visible=this.blink,this.blink=!this.blink,this.cnt=0}},d.prototype.endFocus=function(){var b=this;this.focus&&(this.domElement.removeEventListener(),this.blockInput===!0&&this.domElement.unblockKeyDownEvents(),this.focus=!1,0===this.value.length&&null!==this.placeHolder&&(this.placeHolder.visible=!0),this.cursor.visible=!1,this.game.device.desktop?setTimeout(function(){b.domElement.blur()},0):this.domElement.blur(),this.game.device.desktop||(a.KeyboardOpen=!1,a.onKeyboardClose.dispatch()))},d.prototype.startFocus=function(){var b=this;this.focus=!0,null!==this.placeHolder&&(this.placeHolder.visible=!1),this.game.device.desktop?setTimeout(function(){b.keyUpProcessor()},0):this.keyUpProcessor(),this.game.device.desktop||(a.KeyboardOpen=!0,a.onKeyboardOpen.dispatch())},d.prototype.keyUpProcessor=function(){this.domElement.addKeyUpListener(this.keyListener.bind(this)),this.domElement.focus(),this.blockInput===!0&&this.domElement.blockKeyDownEvents()},d.prototype.updateText=function(){var b="";if(this.inputOptions.type===a.InputType.password)for(var c=0;cparseInt(this.inputOptions.max)?this.value=this.domElement.value=this.inputOptions.max:this.value}else b=this.value;if(this.text.setText(b),this.text.width>this.inputOptions.width)this.text.anchor.x=1,this.text.x=this.inputOptions.padding+this.inputOptions.width;else switch(this.inputOptions.textAlign){case"left":this.text.anchor.set(0,0),this.text.x=this.inputOptions.padding;break;case"center":this.text.anchor.set(.5,0),this.text.x=this.inputOptions.padding+this.inputOptions.width/2;break;case"right":this.text.anchor.set(1,0),this.text.x=this.inputOptions.padding+this.inputOptions.width}},d.prototype.updateCursor=function(){if(this.text.width>this.inputOptions.width||"right"===this.inputOptions.textAlign)this.cursor.x=this.inputOptions.padding+this.inputOptions.width;else switch(this.inputOptions.textAlign){case"left":this.cursor.x=this.inputOptions.padding+this.getCaretPosition();break;case"center":this.cursor.x=this.inputOptions.padding+this.inputOptions.width/2-this.text.width/2+this.getCaretPosition()}},d.prototype.getCaretPosition=function(){var b=this.domElement.getCaretPosition();if(-1===b)return this.text.width;var c=this.value;if(this.inputOptions.type===a.InputType.password){c="";for(var d=0;d=e*c&&(e+1)*c>=b){d=e;break}b>(this.value.length-1)*c&&(d=this.value.length),this.startFocus(),this.domElement.setCaretPosition(d),this.updateCursor()},d.prototype.updateSelection=function(){if(this.domElement.hasSelection){var b=this.value;if(this.inputOptions.type===a.InputType.password){b="";for(var c=0;cwindow.innerWidth?this.windowScale=this.game.width/(1.5*b.width):this.windowScale=this.game.width/2/(1.5*b.width);var c=(this.game.width-1.5*b.width)/2/this.windowScale;this.game.world.scale.set(this.game.world.scale.x*this.windowScale,this.game.world.scale.y*this.windowScale),this.game.world.pivot.set(b.x-c,b.y-2*this.inputOptions.padding),a.Zoomed=!0}},d.prototype.zoomOut=function(){a.Zoomed&&(this.game.world.scale.set(this.game.world.scale.x/this.windowScale,this.game.world.scale.y/this.windowScale),this.game.world.pivot.set(0,0),a.Zoomed=!1)},d.prototype.keyListener=function(a){return this.value=this.getFormattedText(this.domElement.value),13===a.keyCode?void(this.focusOutOnEnter&&this.endFocus()):(this.updateText(),this.updateCursor(),this.updateSelection(),void a.preventDefault())},d.prototype.destroy=function(a){this.game.input.onDown.remove(this.checkDown,this),this.focusIn.removeAll(),this.focusOut.removeAll(),this.domElement.destroy(),c.prototype.destroy.call(this,a)},d.prototype.resetText=function(){this.setText()},d.prototype.setText=function(a){void 0===a&&(a=""),null!==this.placeHolder&&(a.length>0?this.placeHolder.visible=!1:this.placeHolder.visible=!0),this.value=this.getFormattedText(a),this.domElement.value=this.value,this.updateText(),this.updateCursor(),this.endFocus()},d.prototype.getFormattedText=function(a){switch(this.inputOptions.forceCase){default:case b.none:return a;case b.lower:return a.toLowerCase();case b.upper:return a.toUpperCase()}},d}(Phaser.Sprite);a.InputField=c}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,0,0)||this;d.bgColor=c.backgroundColor?parseInt(c.backgroundColor.slice(1),16):16777215,d.borderRadius=c.borderRadius||0,d.borderWidth=c.borderWidth||1,d.borderColor=c.borderColor?parseInt(c.borderColor.slice(1),16):9803157,d.boxAlpha=c.fillAlpha,d.padding=c.padding;var e,e=c.height,f=c.width;c.font&&(e=Math.max(parseInt(c.font.substr(0,c.font.indexOf("px")),10),e)),d.boxHeight=2*d.padding+e;var f=c.width;return d.boxWidth=2*d.padding+f,d.drawBox(),d}return __extends(b,a),b.prototype.resize=function(a){this.boxWidth=2*this.padding+a,this.drawBox()},b.prototype.drawBox=function(){this.clear().beginFill(this.bgColor,this.boxAlpha).lineStyle(this.borderWidth,this.borderColor,this.boxAlpha),this.borderRadius>0?this.drawRoundedRect(0,0,this.boxWidth,this.boxHeight,this.borderRadius):this.drawRect(0,0,this.boxWidth,this.boxHeight)},b}(Phaser.Graphics);a.InputBox=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,c.padding,c.padding)||this;return d.inputOptions=c,d}return __extends(b,a),b.prototype.updateSelection=function(a){var c=Phaser.Color.webToColor(this.inputOptions.selectionColor);this.clear(),this.beginFill(b.rgb2hex(c),c.a),this.drawRect(a.x,a.y,a.width,a.height-this.inputOptions.padding)},b.rgb2hex=function(a){return parseInt(("0"+a.r.toString(16)).slice(-2)+("0"+a.g.toString(16)).slice(-2)+("0"+a.b.toString(16)).slice(-2),16)},b}(Phaser.Graphics);a.SelectionHighlight=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,c.padding,c.padding)||this,e=c.height;return c.font&&(e=Math.max(parseInt(c.font.substr(0,c.font.indexOf("px")),10),e)),d.maskWidth=c.width,d.maskHeight=1.3*e,d.drawMask(),d}return __extends(b,a),b.prototype.resize=function(a){this.maskWidth=a,this.drawMask()},b.prototype.drawMask=function(){this.clear().beginFill(0).drawRect(0,0,this.maskWidth,this.maskHeight).endFill()},b}(Phaser.Graphics);a.TextMask=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){a.Zoomed=!1,a.KeyboardOpen=!1,a.onKeyboardOpen=new Phaser.Signal,a.onKeyboardClose=new Phaser.Signal;var b=function(b){function c(a,c){var d=b.call(this,a,c)||this;return d.addInputFieldFactory(),d}return __extends(c,b),c.prototype.addInputFieldFactory=function(){Phaser.GameObjectFactory.prototype.inputField=function(b,c,d,e){void 0===e&&(e=this.world);var f=new a.InputField(this.game,b,c,d);return e.add(f)},Phaser.GameObjectCreator.prototype.inputField=function(b,c,d){return new a.InputField(this.game,b,c,d)}},c}(Phaser.Plugin);b.Zoomed=!1,b.KeyboardOpen=!1,b.onKeyboardOpen=new Phaser.Signal,b.onKeyboardClose=new Phaser.Signal,a.Plugin=b}(PhaserInput||(PhaserInput={}));
\ No newline at end of file
diff --git a/src/util/phaser-input-master/config/tsconfig.json b/src/util/phaser-input-master/config/tsconfig.json
new file mode 100755
index 0000000..6aab3cf
--- /dev/null
+++ b/src/util/phaser-input-master/config/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "module": "amd",
+ "target": "es5",
+ "sourceMap": true,
+ "noImplicitAny": true,
+ "removeComments": false,
+ "declaration": true,
+ "preserveConstEnums": true
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/config/tslint.json b/src/util/phaser-input-master/config/tslint.json
new file mode 100755
index 0000000..d12a2cb
--- /dev/null
+++ b/src/util/phaser-input-master/config/tslint.json
@@ -0,0 +1,131 @@
+{
+ "rules": {
+ "align": [
+ true,
+ "parameters",
+ "statements"
+ ],
+ "ban": false,
+ "class-name": true,
+ "curly": true,
+ "eofline": true,
+ "forin": true,
+ "indent": [
+ true,
+ "spaces"
+ ],
+ "interface-name": true,
+ "jsdoc-format": true,
+ "label-position": true,
+ "label-undefined": true,
+ "max-line-length": [
+ true,
+ 200
+ ],
+ "member-access": true,
+ "no-any": false,
+ "no-arg": true,
+ "no-conditional-assignment": true,
+ "no-consecutive-blank-lines": true,
+ "no-console": [
+ true,
+ "debug",
+ "info",
+ "time",
+ "timeEnd",
+ "trace"
+ ],
+ "no-construct": true,
+ "no-constructor-vars": true,
+ "no-debugger": true,
+ "no-duplicate-key": true,
+ "no-duplicate-variable": true,
+ "no-empty": true,
+ "no-eval": true,
+ "no-inferrable-types": false,
+ "no-internal-module": false,
+ "no-null-keyword": false,
+ "no-require-imports": false,
+ "no-shadowed-variable": true,
+ "no-string-literal": false,
+ "no-switch-case-fall-through": false,
+ "no-trailing-whitespace": true,
+ "no-unreachable": true,
+ "no-unused-expression": true,
+ "no-unused-variable": true,
+ "no-use-before-declare": true,
+ "no-var-keyword": true,
+ "no-var-requires": true,
+ "object-literal-sort-keys": false,
+ "one-line": [
+ true,
+ "check-open-brace",
+ "check-catch",
+ "check-else",
+ "check-finally",
+ "check-whitespace"
+ ],
+ "quotemark": [
+ true,
+ "single",
+ "avoid-escape"
+ ],
+ "radix": true,
+ "semicolon": [
+ true,
+ "always"
+ ],
+ "switch-default": false,
+ "trailing-comma": [
+ true,
+ {
+ "multiline": "never",
+ "singleline": "never"
+ }
+ ],
+ "triple-equals": [
+ true,
+ "allow-null-check"
+ ],
+ "typedef": [
+ true,
+ "call-signature",
+ "parameter",
+ "arrow-parameter",
+ "property-declaration",
+ "variable-declaration",
+ "member-variable-declaration"
+ ],
+ "typedef-whitespace": [
+ true,
+ {
+ "call-signature": "nospace",
+ "index-signature": "nospace",
+ "parameter": "nospace",
+ "property-declaration": "nospace",
+ "variable-declaration": "nospace"
+ },
+ {
+ "call-signature": "onespace",
+ "index-signature": "onespace",
+ "parameter": "onespace",
+ "property-declaration": "onespace",
+ "variable-declaration": "onespace"
+ }
+ ],
+ "use-strict": false,
+ "variable-name": [
+ true,
+ "allow-leading-underscore",
+ "ban-keywords"
+ ],
+ "whitespace": [
+ true,
+ "check-branch",
+ "check-decl",
+ "check-operator",
+ "check-separator",
+ "check-type"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/example/images/bg.png b/src/util/phaser-input-master/example/images/bg.png
new file mode 100755
index 0000000..b6a2db9
Binary files /dev/null and b/src/util/phaser-input-master/example/images/bg.png differ
diff --git a/src/util/phaser-input-master/example/images/btn_clean.png b/src/util/phaser-input-master/example/images/btn_clean.png
new file mode 100755
index 0000000..948bbea
Binary files /dev/null and b/src/util/phaser-input-master/example/images/btn_clean.png differ
diff --git a/src/util/phaser-input-master/example/images/inputfield.png b/src/util/phaser-input-master/example/images/inputfield.png
new file mode 100755
index 0000000..5e71e1b
Binary files /dev/null and b/src/util/phaser-input-master/example/images/inputfield.png differ
diff --git a/src/util/phaser-input-master/example/index.html b/src/util/phaser-input-master/example/index.html
new file mode 100755
index 0000000..ef84678
--- /dev/null
+++ b/src/util/phaser-input-master/example/index.html
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+ Login example for Phaser Input
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/util/phaser-input-master/package-lock.json b/src/util/phaser-input-master/package-lock.json
new file mode 100755
index 0000000..69ee6b6
--- /dev/null
+++ b/src/util/phaser-input-master/package-lock.json
@@ -0,0 +1,1942 @@
+{
+ "name": "@orange-games/phaser-input",
+ "version": "2.0.4",
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@orange-games/phaser-nineslice": {
+ "version": "https://registry.npmjs.org/@orange-games/phaser-nineslice/-/phaser-nineslice-2.0.0.tgz",
+ "integrity": "sha1-cXbZ6WGxNxSmaOruvJNExHg7Klg=",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "http://og-npm.ds.orangegames.com/abbrev/-/abbrev-1.0.7.tgz",
+ "integrity": "sha1-W2A1su6dT7XPhZ8Iqb6BsghJGEM=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "http://og-npm.ds.orangegames.com/accepts/-/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "http://og-npm.ds.orangegames.com/ansi-regex/-/ansi-regex-2.0.0.tgz",
+ "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "http://og-npm.ds.orangegames.com/ansi-styles/-/ansi-styles-2.2.0.tgz",
+ "integrity": "sha1-xZGRk25u0cExWktra5fzrPv6aLA=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "http://og-npm.ds.orangegames.com/anymatch/-/anymatch-1.3.0.tgz",
+ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "http://og-npm.ds.orangegames.com/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "http://og-npm.ds.orangegames.com/arr-flatten/-/arr-flatten-1.0.1.tgz",
+ "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "http://og-npm.ds.orangegames.com/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "http://og-npm.ds.orangegames.com/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "async": {
+ "version": "http://og-npm.ds.orangegames.com/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "basic-auth": {
+ "version": "http://og-npm.ds.orangegames.com/basic-auth/-/basic-auth-1.0.3.tgz",
+ "integrity": "sha1-QfVVI+WJQFA47jVnlYxipe1wVRo=",
+ "dev": true
+ },
+ "batch": {
+ "version": "http://og-npm.ds.orangegames.com/batch/-/batch-0.5.3.tgz",
+ "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz",
+ "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+ "dev": true
+ },
+ "braces": {
+ "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true
+ },
+ "buffer-shims": {
+ "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "http://og-npm.ds.orangegames.com/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "http://og-npm.ds.orangegames.com/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "http://og-npm.ds.orangegames.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": {
+ "version": "http://og-npm.ds.orangegames.com/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "center-align": {
+ "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "http://og-npm.ds.orangegames.com/chalk/-/chalk-1.1.1.tgz",
+ "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz",
+ "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "http://og-npm.ds.orangegames.com/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true
+ },
+ "coffee-script": {
+ "version": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz",
+ "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "http://og-npm.ds.orangegames.com/color-convert/-/color-convert-1.0.0.tgz",
+ "integrity": "sha1-PCb82IXSctRb6s9uQbq6dciahXk=",
+ "dev": true
+ },
+ "colors": {
+ "version": "http://og-npm.ds.orangegames.com/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "http://og-npm.ds.orangegames.com/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "connect": {
+ "version": "http://og-npm.ds.orangegames.com/connect/-/connect-3.4.1.tgz",
+ "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=",
+ "dev": true
+ },
+ "connect-livereload": {
+ "version": "http://og-npm.ds.orangegames.com/connect-livereload/-/connect-livereload-0.5.4.tgz",
+ "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "http://og-npm.ds.orangegames.com/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "csproj2ts": {
+ "version": "https://registry.npmjs.org/csproj2ts/-/csproj2ts-0.0.8.tgz",
+ "integrity": "sha1-nRxxniDELM6MTeKQCO/DVUn9Em8=",
+ "dev": true,
+ "dependencies": {
+ "es6-promise": {
+ "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz",
+ "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ }
+ }
+ },
+ "currently-unhandled": {
+ "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true
+ },
+ "dateformat": {
+ "version": "http://og-npm.ds.orangegames.com/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true
+ },
+ "debug": {
+ "version": "http://og-npm.ds.orangegames.com/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "http://og-npm.ds.orangegames.com/decamelize/-/decamelize-1.1.2.tgz",
+ "integrity": "sha1-3Mk3J74gljLpiwJxjvTLeWAjIvI=",
+ "dev": true
+ },
+ "depd": {
+ "version": "http://og-npm.ds.orangegames.com/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "http://og-npm.ds.orangegames.com/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "http://og-npm.ds.orangegames.com/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "http://og-npm.ds.orangegames.com/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "http://og-npm.ds.orangegames.com/error-ex/-/error-ex-1.3.0.tgz",
+ "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=",
+ "dev": true
+ },
+ "es6-promise": {
+ "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz",
+ "integrity": "sha1-8RLCn+paCZhTn8tqL9IUQ9KPBfc=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "http://og-npm.ds.orangegames.com/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "http://og-npm.ds.orangegames.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "etag": {
+ "version": "http://og-npm.ds.orangegames.com/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "eventemitter2": {
+ "version": "http://og-npm.ds.orangegames.com/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "exit": {
+ "version": "http://og-npm.ds.orangegames.com/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "http://og-npm.ds.orangegames.com/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true
+ },
+ "expand-range": {
+ "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true
+ },
+ "extglob": {
+ "version": "http://og-npm.ds.orangegames.com/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "http://og-npm.ds.orangegames.com/faye-websocket/-/faye-websocket-0.4.4.tgz",
+ "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=",
+ "dev": true
+ },
+ "figures": {
+ "version": "http://og-npm.ds.orangegames.com/figures/-/figures-1.4.0.tgz",
+ "integrity": "sha1-649WOQ2+MIEESlwqnZCJB1pIQy8=",
+ "dev": true
+ },
+ "filename-regex": {
+ "version": "http://og-npm.ds.orangegames.com/filename-regex/-/filename-regex-2.0.0.tgz",
+ "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "http://og-npm.ds.orangegames.com/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true
+ },
+ "finalhandler": {
+ "version": "http://og-npm.ds.orangegames.com/finalhandler/-/finalhandler-0.4.1.tgz",
+ "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "http://og-npm.ds.orangegames.com/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true
+ },
+ "findup-sync": {
+ "version": "http://og-npm.ds.orangegames.com/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "dependencies": {
+ "glob": {
+ "version": "http://og-npm.ds.orangegames.com/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz",
+ "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz",
+ "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "http://og-npm.ds.orangegames.com/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz",
+ "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "commander": {
+ "version": "2.9.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "deep-extend": {
+ "version": "0.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "extend": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.0.10",
+ "bundled": true,
+ "dev": true
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "getpass": {
+ "version": "0.1.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true,
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true,
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-my-json-valid": {
+ "version": "2.15.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "mime-db": {
+ "version": "1.26.0",
+ "bundled": true,
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.14",
+ "bundled": true,
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.33",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npmlog": {
+ "version": "4.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.3.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.1.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rimraf": {
+ "version": "2.5.4",
+ "bundled": true,
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sshpk": {
+ "version": "1.10.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "tar-pack": {
+ "version": "3.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "readable-stream": {
+ "version": "2.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "gaze": {
+ "version": "http://og-npm.ds.orangegames.com/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "http://og-npm.ds.orangegames.com/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "getobject": {
+ "version": "http://og-npm.ds.orangegames.com/getobject/-/getobject-0.1.0.tgz",
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
+ "dev": true
+ },
+ "glob": {
+ "version": "http://og-npm.ds.orangegames.com/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "dependencies": {
+ "inherits": {
+ "version": "http://og-npm.ds.orangegames.com/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ }
+ }
+ },
+ "glob-base": {
+ "version": "http://og-npm.ds.orangegames.com/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "http://og-npm.ds.orangegames.com/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true
+ },
+ "globule": {
+ "version": "http://og-npm.ds.orangegames.com/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "http://og-npm.ds.orangegames.com/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "grunt": {
+ "version": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz",
+ "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=",
+ "dev": true,
+ "dependencies": {
+ "glob": {
+ "version": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "dev": true
+ },
+ "grunt-cli": {
+ "version": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-banner": {
+ "version": "http://og-npm.ds.orangegames.com/grunt-banner/-/grunt-banner-0.6.0.tgz",
+ "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=",
+ "dev": true
+ },
+ "grunt-contrib-clean": {
+ "version": "http://og-npm.ds.orangegames.com/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz",
+ "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=",
+ "dev": true
+ },
+ "grunt-contrib-connect": {
+ "version": "http://og-npm.ds.orangegames.com/grunt-contrib-connect/-/grunt-contrib-connect-0.11.2.tgz",
+ "integrity": "sha1-HAoHB9OzKNnPO0tJDrhMSV2Tau0=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "http://og-npm.ds.orangegames.com/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "http://og-npm.ds.orangegames.com/grunt-contrib-uglify/-/grunt-contrib-uglify-0.11.1.tgz",
+ "integrity": "sha1-XiKi9nbNEdhx/CoPCKqbKXMEUyU=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-4.5.1.tgz",
+ "integrity": "sha1-gOigdMpfOJOmscELKmNkktcQwxY=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-contrib-watch": {
+ "version": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz",
+ "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "http://og-npm.ds.orangegames.com/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-known-options": {
+ "version": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz",
+ "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=",
+ "dev": true
+ },
+ "grunt-legacy-log": {
+ "version": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz",
+ "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=",
+ "dev": true
+ },
+ "grunt-legacy-log-utils": {
+ "version": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz",
+ "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz",
+ "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-ts": {
+ "version": "https://registry.npmjs.org/grunt-ts/-/grunt-ts-6.0.0-beta.11.tgz",
+ "integrity": "sha1-TleIAPLnlgZpb8H4PEqY4Z6Vb1Y=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz",
+ "integrity": "sha1-xZWXVpsU2VatKcrMQr3d9fDqT0w=",
+ "dev": true
+ }
+ }
+ },
+ "gzip-size": {
+ "version": "http://og-npm.ds.orangegames.com/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "http://og-npm.ds.orangegames.com/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true
+ },
+ "hooker": {
+ "version": "http://og-npm.ds.orangegames.com/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz",
+ "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "http://og-npm.ds.orangegames.com/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "http://og-npm.ds.orangegames.com/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "http://og-npm.ds.orangegames.com/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "http://og-npm.ds.orangegames.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "http://og-npm.ds.orangegames.com/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.2.tgz",
+ "integrity": "sha1-+hImWI+gBIsAXEfk+xuxVV1e3qo=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "http://og-npm.ds.orangegames.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true
+ },
+ "is-dotfile": {
+ "version": "http://og-npm.ds.orangegames.com/is-dotfile/-/is-dotfile-1.0.2.tgz",
+ "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "http://og-npm.ds.orangegames.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "http://og-npm.ds.orangegames.com/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "http://og-npm.ds.orangegames.com/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "http://og-npm.ds.orangegames.com/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "http://og-npm.ds.orangegames.com/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true
+ },
+ "is-posix-bracket": {
+ "version": "http://og-npm.ds.orangegames.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "http://og-npm.ds.orangegames.com/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "http://og-npm.ds.orangegames.com/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "http://og-npm.ds.orangegames.com/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "http://og-npm.ds.orangegames.com/isexe/-/isexe-1.1.2.tgz",
+ "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "http://og-npm.ds.orangegames.com/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "http://og-npm.ds.orangegames.com/js-yaml/-/js-yaml-3.5.5.tgz",
+ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "http://og-npm.ds.orangegames.com/kind-of/-/kind-of-3.0.2.tgz",
+ "integrity": "sha1-GH20JwRufpCUVpLmdoZovWkA3qA=",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.3.tgz",
+ "integrity": "sha1-6XdUYY+ciGu5mbL/aceLgkU9ZnQ=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "http://og-npm.ds.orangegames.com/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": {
+ "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "longest": {
+ "version": "http://og-npm.ds.orangegames.com/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "http://og-npm.ds.orangegames.com/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "http://og-npm.ds.orangegames.com/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "maxmin": {
+ "version": "http://og-npm.ds.orangegames.com/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true
+ },
+ "meow": {
+ "version": "http://og-npm.ds.orangegames.com/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true
+ },
+ "mime": {
+ "version": "http://og-npm.ds.orangegames.com/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "http://og-npm.ds.orangegames.com/mime-db/-/mime-db-1.21.0.tgz",
+ "integrity": "sha1-m1I54zU89usBWgDYkCYQJ8NtS6w=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "http://og-npm.ds.orangegames.com/mime-types/-/mime-types-2.1.9.tgz",
+ "integrity": "sha1-37OWdktf33W+NLH0EEvDaH+2Nfg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "http://og-npm.ds.orangegames.com/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "http://og-npm.ds.orangegames.com/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "morgan": {
+ "version": "http://og-npm.ds.orangegames.com/morgan/-/morgan-1.6.1.tgz",
+ "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=",
+ "dev": true
+ },
+ "ms": {
+ "version": "http://og-npm.ds.orangegames.com/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
+ "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
+ "dev": true,
+ "optional": true
+ },
+ "ncp": {
+ "version": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz",
+ "integrity": "sha1-dDmFMW49tFkoG1hxaehFc1oFQ58=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "http://og-npm.ds.orangegames.com/negotiator/-/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "http://og-npm.ds.orangegames.com/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true
+ },
+ "noptify": {
+ "version": "http://og-npm.ds.orangegames.com/noptify/-/noptify-0.0.3.tgz",
+ "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=",
+ "dev": true,
+ "dependencies": {
+ "nopt": {
+ "version": "http://og-npm.ds.orangegames.com/nopt/-/nopt-2.0.0.tgz",
+ "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "http://og-npm.ds.orangegames.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
+ "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "http://og-npm.ds.orangegames.com/normalize-path/-/normalize-path-2.0.1.tgz",
+ "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "http://og-npm.ds.orangegames.com/number-is-nan/-/number-is-nan-1.0.0.tgz",
+ "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object.omit": {
+ "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "http://og-npm.ds.orangegames.com/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true
+ },
+ "on-headers": {
+ "version": "http://og-npm.ds.orangegames.com/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true
+ },
+ "opn": {
+ "version": "http://og-npm.ds.orangegames.com/opn/-/opn-1.0.2.tgz",
+ "integrity": "sha1-uQlkM0bQChq8l3qLlvPOPFPVz18=",
+ "dev": true
+ },
+ "parse-glob": {
+ "version": "http://og-npm.ds.orangegames.com/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "http://og-npm.ds.orangegames.com/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true
+ },
+ "parseurl": {
+ "version": "http://og-npm.ds.orangegames.com/parseurl/-/parseurl-1.3.1.tgz",
+ "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "http://og-npm.ds.orangegames.com/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "http://og-npm.ds.orangegames.com/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": {
+ "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ }
+ }
+ },
+ "phaser": {
+ "version": "https://registry.npmjs.org/phaser/-/phaser-2.6.2.tgz",
+ "integrity": "sha1-6zkSFyWiFJxJ9GtdFEMYwivAkkk=",
+ "dev": true
+ },
+ "pify": {
+ "version": "http://og-npm.ds.orangegames.com/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "http://og-npm.ds.orangegames.com/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "http://og-npm.ds.orangegames.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true
+ },
+ "portscanner": {
+ "version": "http://og-npm.ds.orangegames.com/portscanner/-/portscanner-1.0.0.tgz",
+ "integrity": "sha1-O1z+OTgotRYKvGAOYnDrwvFZBVg=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "http://og-npm.ds.orangegames.com/async/-/async-0.1.15.tgz",
+ "integrity": "sha1-IYDqyizypspSgNQcBYW+ybPkm9M=",
+ "dev": true
+ }
+ }
+ },
+ "preserve": {
+ "version": "http://og-npm.ds.orangegames.com/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "http://og-npm.ds.orangegames.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "qs": {
+ "version": "http://og-npm.ds.orangegames.com/qs/-/qs-0.5.6.tgz",
+ "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
+ "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "http://og-npm.ds.orangegames.com/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "http://og-npm.ds.orangegames.com/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true
+ },
+ "read-pkg-up": {
+ "version": "http://og-npm.ds.orangegames.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz",
+ "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": {
+ "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true
+ }
+ }
+ },
+ "redent": {
+ "version": "http://og-npm.ds.orangegames.com/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true
+ },
+ "regex-cache": {
+ "version": "http://og-npm.ds.orangegames.com/regex-cache/-/regex-cache-0.4.3.tgz",
+ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "http://og-npm.ds.orangegames.com/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "http://og-npm.ds.orangegames.com/repeat-string/-/repeat-string-1.5.2.tgz",
+ "integrity": "sha1-IQZfcHJ60FOg3V6VesngDHVg2Qo=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "http://og-npm.ds.orangegames.com/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "http://og-npm.ds.orangegames.com/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "right-align": {
+ "version": "http://og-npm.ds.orangegames.com/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "http://og-npm.ds.orangegames.com/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true
+ },
+ "sax": {
+ "version": "http://og-npm.ds.orangegames.com/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=",
+ "dev": true
+ },
+ "semver": {
+ "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "send": {
+ "version": "http://og-npm.ds.orangegames.com/send/-/send-0.13.1.tgz",
+ "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=",
+ "dev": true,
+ "dependencies": {
+ "depd": {
+ "version": "http://og-npm.ds.orangegames.com/depd/-/depd-1.1.0.tgz",
+ "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=",
+ "dev": true
+ }
+ }
+ },
+ "serve-index": {
+ "version": "http://og-npm.ds.orangegames.com/serve-index/-/serve-index-1.7.3.tgz",
+ "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "http://og-npm.ds.orangegames.com/serve-static/-/serve-static-1.10.2.tgz",
+ "integrity": "sha1-/rgA0OciEk3QsAMzFgwW6cqovLM=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "http://og-npm.ds.orangegames.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "http://og-npm.ds.orangegames.com/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "http://og-npm.ds.orangegames.com/source-map/-/source-map-0.5.3.tgz",
+ "integrity": "sha1-gmdLhacbC+dsPnQW0V6fUlLrO+A=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "http://og-npm.ds.orangegames.com/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "http://og-npm.ds.orangegames.com/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "http://og-npm.ds.orangegames.com/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "http://og-npm.ds.orangegames.com/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "http://og-npm.ds.orangegames.com/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "http://og-npm.ds.orangegames.com/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "http://og-npm.ds.orangegames.com/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "http://og-npm.ds.orangegames.com/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "tiny-lr-fork": {
+ "version": "http://og-npm.ds.orangegames.com/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz",
+ "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "http://og-npm.ds.orangegames.com/debug/-/debug-0.7.4.tgz",
+ "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=",
+ "dev": true
+ }
+ }
+ },
+ "trim-newlines": {
+ "version": "http://og-npm.ds.orangegames.com/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz",
+ "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "http://og-npm.ds.orangegames.com/uglify-js/-/uglify-js-2.6.2.tgz",
+ "integrity": "sha1-9QvoikLNOWpiUdxSqzcvccwS/vA=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "http://og-npm.ds.orangegames.com/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "http://og-npm.ds.orangegames.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz",
+ "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "http://og-npm.ds.orangegames.com/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "uri-path": {
+ "version": "http://og-npm.ds.orangegames.com/uri-path/-/uri-path-1.0.0.tgz",
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "http://og-npm.ds.orangegames.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "http://og-npm.ds.orangegames.com/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "http://og-npm.ds.orangegames.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true
+ },
+ "which": {
+ "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz",
+ "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "http://og-npm.ds.orangegames.com/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "http://og-npm.ds.orangegames.com/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xml2js": {
+ "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
+ "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "http://og-npm.ds.orangegames.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
+ "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ }
+ }
+ },
+ "yargs": {
+ "version": "http://og-npm.ds.orangegames.com/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true
+ }
+ }
+}
diff --git a/src/util/phaser-input-master/package.json b/src/util/phaser-input-master/package.json
new file mode 100755
index 0000000..7a9ed0b
--- /dev/null
+++ b/src/util/phaser-input-master/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@orange-games/phaser-input",
+ "author": "OrangeGames",
+ "version": "2.0.5",
+ "description": "Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only.",
+ "contributors": [
+ {
+ "name": "Ale Bles",
+ "email": "a.bles@orangegames.com"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:orange-games/phaser-input.git"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/orange-games/phaser-input/raw/master/LICENSE"
+ }
+ ],
+ "config": {
+ "name": "phaser-input"
+ },
+ "devDependencies": {
+ "@orange-games/phaser-nineslice": "^2.0.0",
+ "grunt": "1.0.x",
+ "grunt-banner": "^0.6.0",
+ "grunt-contrib-clean": "0.6.0",
+ "grunt-contrib-connect": "^0.11.2",
+ "grunt-contrib-uglify": "^0.11.0",
+ "grunt-contrib-watch": "^0.6.1",
+ "grunt-ts": "^6.0.0-beta.11",
+ "phaser": "2.6.2",
+ "typescript": "2.3.x"
+ }
+}
diff --git a/src/util/phaser-input-master/ts/InputElement.ts b/src/util/phaser-input-master/ts/InputElement.ts
new file mode 100755
index 0000000..f9c086e
--- /dev/null
+++ b/src/util/phaser-input-master/ts/InputElement.ts
@@ -0,0 +1,184 @@
+module PhaserInput {
+
+ export enum InputType {
+ text,
+ password,
+ number
+ }
+
+ export class InputElement {
+ private element: HTMLInputElement;
+
+ private keyUpCallback: () => void;
+
+ private inputChangeCallback: () => void;
+
+ private type: InputType;
+
+ private id: string;
+
+ private game: Phaser.Game;
+
+ private focusIn: Phaser.Signal;
+
+ private focusOut: Phaser.Signal;
+
+ constructor(game: Phaser.Game, id: string, type: InputType = InputType.text, value: string = '', focusIn?: Phaser.Signal, focusOut?: Phaser.Signal) {
+ this.id = id;
+ this.type = type;
+ this.game = game;
+ this.focusIn = focusIn;
+ this.focusOut = focusOut;
+
+ let canvasTopX: number = this.game.canvas.getBoundingClientRect().top + document.body.scrollTop;
+
+ this.element = document.createElement('input');
+
+ this.element.id = id;
+ this.element.style.position = 'absolute';
+ this.element.style.top = canvasTopX + 'px';
+ this.element.style.left = (-40).toString() + 'px';
+ this.element.style.width = (10).toString() + 'px';
+ this.element.style.height = (10).toString() + 'px';
+ this.element.style.border = '0px';
+ this.element.value = this.value;
+ this.element.type = InputType[type];
+
+ this.element.addEventListener('focusin', (): void => {
+ if (this.focusIn instanceof Phaser.Signal) {
+ this.focusIn.dispatch();
+ }
+ });
+ this.element.addEventListener('focusout', (): void => {
+ if (this.focusOut instanceof Phaser.Signal) {
+ this.focusOut.dispatch();
+ }
+ });
+
+ document.body.appendChild(this.element);
+ }
+
+ public addKeyUpListener(callback: () => void): void {
+ this.keyUpCallback = callback;
+ document.addEventListener('keyup', this.keyUpCallback);
+ this.element.addEventListener('input', this.keyUpCallback);
+
+ }
+
+ /**
+ * Captures the keyboard event on keydown, used to prevent it going from input field to sprite
+ **/
+ public blockKeyDownEvents(): void {
+ document.addEventListener('keydown', this.preventKeyPropagation);
+ }
+
+ /**
+ * To prevent bubbling of keyboard event from input field to sprite
+ **/
+ private preventKeyPropagation(evt: KeyboardEvent): void{
+ if(evt.stopPropagation){
+ evt.stopPropagation();
+ } else {
+ //for IE < 9
+ event.cancelBubble = true;
+ }
+ }
+
+ /**
+ * Remove listener that captures keydown keyboard events
+ **/
+ public unblockKeyDownEvents(): void {
+ document.removeEventListener('keydown', this.preventKeyPropagation);
+ }
+
+ public removeEventListener(): void {
+ document.removeEventListener('keyup', this.keyUpCallback);
+ this.element.removeEventListener('input', this.keyUpCallback);
+ }
+
+ public destroy() {
+ document.body.removeChild(this.element);
+ }
+
+ public setMax(max: string, min?: string) {
+ if (max === undefined) {
+ return;
+ }
+
+ if (this.type === InputType.text || this.type === InputType.password) {
+ this.element.maxLength = parseInt(max, 10);
+ } else if (this.type === InputType.number) {
+ this.element.max = max;
+ if (min === undefined) {
+ return;
+ }
+
+ this.element.min = min;
+ }
+ }
+
+ get value(): string {
+ return this.element.value;
+ }
+
+ set value(value: string) {
+ this.element.value = value;
+ }
+
+ public focus(): void {
+ this.element.focus();
+ if (!this.game.device.desktop && this.game.device.chrome) {
+ let originalWidth = window.innerWidth,
+ originalHeight = window.innerHeight;
+
+ let kbAppeared: boolean = false;
+ let interval: number = setInterval((): void => {
+ if (originalWidth > window.innerWidth || originalHeight > window.innerHeight) {
+ kbAppeared = true;
+ }
+
+ if (kbAppeared && originalWidth === window.innerWidth && originalHeight === window.innerHeight) {
+ if (this.focusOut instanceof Phaser.Signal) {
+ this.focusOut.dispatch();
+ }
+ clearInterval(interval);
+ }
+ }, 50);
+ }
+ }
+
+ public blur(): void {
+ this.element.blur();
+ }
+
+ get hasSelection () {
+ if (this.type === InputType.number) {
+ return false;
+ }
+
+ return this.element.selectionStart !== this.element.selectionEnd;
+ }
+
+ get caretStart() {
+ return this.element.selectionEnd;
+ }
+
+ get caretEnd() {
+ return this.element.selectionStart;
+ }
+
+ public getCaretPosition() {
+ if (this.type === InputType.number) {
+ return -1;
+ }
+ return this.element.selectionStart;
+ }
+
+ public setCaretPosition(pos: number) {
+ if (this.type === InputType.number) {
+ return ;
+ }
+ this.element.setSelectionRange(pos, pos);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/ts/InputField.ts b/src/util/phaser-input-master/ts/InputField.ts
new file mode 100755
index 0000000..1738f9c
--- /dev/null
+++ b/src/util/phaser-input-master/ts/InputField.ts
@@ -0,0 +1,565 @@
+module PhaserInput {
+ import Text = Phaser.Text;
+
+ export enum ForceCase {
+ none,
+ lower,
+ upper
+ }
+
+ export interface InputOptions extends Phaser.PhaserTextStyle {
+ x?: number;
+ y?: number;
+ placeHolder?: string;
+ fillAlpha?: number;
+ width?: number;
+ height?: number;
+ padding?: number;
+ borderWidth?: number;
+ borderColor?: string;
+ borderRadius?: number;
+ cursorColor?: string;
+ placeHolderColor?: string;
+ type?: InputType;
+ forceCase?: ForceCase;
+ min?: string;
+ max?: string;
+ textAlign?: string;
+ selectionColor?: string;
+ zoom?: boolean;
+ }
+
+ export class InputField extends Phaser.Sprite {
+ public focusOutOnEnter: boolean = true;
+
+ private placeHolder:Phaser.Text = null;
+
+ private box: InputBox = null;
+
+ private textMask: TextMask;
+
+ private focus:boolean = false;
+
+ private cursor:Phaser.Text;
+
+ private text:Phaser.Text;
+
+ private offscreenText: Phaser.Text;
+
+ public value:string = '';
+
+ private inputOptions: InputOptions;
+
+ private domElement: InputElement;
+
+ private selection: SelectionHighlight;
+
+ private windowScale: number = 1;
+
+ public blockInput: boolean = true;
+
+ public focusIn: Phaser.Signal = new Phaser.Signal();
+
+ public focusOut: Phaser.Signal = new Phaser.Signal();
+
+ get width(): number {
+ return this.inputOptions.width;
+ }
+
+ set width(width: number) {
+ this.inputOptions.width = width;
+ this.box.resize(width);
+ this.textMask.resize(width);
+ this.updateTextAlignment();
+ }
+
+ constructor(game:Phaser.Game, x:number, y:number, inputOptions:InputOptions = {}) {
+ super(game, x, y);
+
+ //Parse the options
+ this.inputOptions = inputOptions;
+ this.inputOptions.width = (typeof inputOptions.width === 'number') ? inputOptions.width : 150;
+ this.inputOptions.padding = (typeof inputOptions.padding === 'number') ? inputOptions.padding : 0;
+ this.inputOptions.textAlign = inputOptions.textAlign || 'left';
+ this.inputOptions.type = inputOptions.type || InputType.text;
+ this.inputOptions.forceCase = (inputOptions.forceCase) ? inputOptions.forceCase : ForceCase.none;
+ this.inputOptions.borderRadius = (typeof inputOptions.borderRadius === 'number') ? inputOptions.borderRadius : 0;
+ this.inputOptions.height = (typeof inputOptions.height === 'number') ? inputOptions.height : 14;
+ this.inputOptions.fillAlpha = (inputOptions.fillAlpha === undefined) ? 1 : inputOptions.fillAlpha;
+ this.inputOptions.selectionColor = inputOptions.selectionColor || 'rgba(179, 212, 253, 0.8)';
+ this.inputOptions.zoom = (!game.device.desktop) ? inputOptions.zoom || false : false;
+
+ //create the input box
+ this.box = new InputBox(this.game, inputOptions);
+ this.setTexture(this.box.generateTexture());
+
+ //create the mask that will be used for the texts
+ this.textMask = new TextMask(this.game, inputOptions);
+ this.addChild(this.textMask);
+
+ //Create the hidden dom elements
+ this.domElement = new InputElement(this.game, 'phaser-input-' + (Math.random() * 10000 | 0).toString(),
+ this.inputOptions.type, this.value, this.focusIn, this.focusOut);
+ this.domElement.setMax(this.inputOptions.max, this.inputOptions.min);
+
+ this.selection = new SelectionHighlight(this.game, this.inputOptions);
+ this.selection.mask = this.textMask;
+ this.addChild(this.selection);
+
+ if (inputOptions.placeHolder && inputOptions.placeHolder.length > 0) {
+ this.placeHolder = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding,
+ inputOptions.placeHolder, {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.placeHolderColor || '#bfbebd'
+ });
+ this.placeHolder.mask = this.textMask;
+ this.addChild(this.placeHolder);
+ }
+
+ this.cursor = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding - 2, '|', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.cursorColor || '#000000'
+ });
+ this.cursor.visible = false;
+ this.addChild(this.cursor);
+
+ this.text = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding, '', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.fill || '#000000'
+ });
+ this.text.mask = this.textMask;
+ this.addChild(this.text);
+
+ this.offscreenText = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding, '', {
+ font: inputOptions.font || '14px Arial',
+ fontWeight: inputOptions.fontWeight || 'normal',
+ fill: inputOptions.fill || '#000000'
+ });
+
+ this.updateTextAlignment();
+
+ this.inputEnabled = true;
+ this.input.useHandCursor = true;
+
+ this.game.input.onDown.add(this.checkDown, this);
+ this.focusOut.add((): void => {
+ if (PhaserInput.KeyboardOpen) {
+ this.endFocus();
+ if (this.inputOptions.zoom) {
+ this.zoomOut();
+ }
+ }
+ });
+ }
+
+ private updateTextAlignment(): void {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.text.anchor.set(0, 0);
+ this.text.x = this.inputOptions.padding;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(0, 0);
+ }
+ this.cursor.x = this.inputOptions.padding + this.getCaretPosition();
+ break;
+ case 'center':
+ this.text.anchor.set(0.5, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(0.5, 0);
+ this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ }
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition();
+ break;
+ case 'right':
+ this.text.anchor.set(1, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ if (null !== this.placeHolder) {
+ this.placeHolder.anchor.set(1, 0);
+ this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width;
+ }
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width;
+ break;
+ }
+ }
+
+ /**
+ * This is a generic input down handler for the game.
+ * if the input object is clicked, we gain focus on it and create the dom element
+ *
+ * If there was focus on the element previously, but clicked outside of it, the element will loose focus
+ * and no keyboard events will be registered anymore
+ *
+ * @param e Phaser.Pointer
+ */
+ private checkDown(e: Phaser.Pointer): void
+ {
+ if(!this.value){
+ this.resetText();
+ }
+ if (this.input.checkPointerOver(e)) {
+ if (this.focus) {
+ this.setCaretOnclick(e);
+ return;
+ }
+
+ if (this.inputOptions.zoom && !PhaserInput.Zoomed) {
+ this.zoomIn();
+ }
+ this.startFocus();
+ } else {
+ if (this.focus === true) {
+ this.endFocus();
+ if (this.inputOptions.zoom) {
+ this.zoomOut();
+ }
+ }
+ }
+ }
+
+ /**
+ * Update function makes the cursor blink, it uses two private properties to make it toggle
+ *
+ * @returns {number}
+ */
+ private blink:boolean = true;
+ private cnt: number = 0;
+ public update() {
+ this.text.update();
+ if (this.placeHolder) {
+ this.placeHolder.update();
+ }
+ if (!this.focus) {
+ return;
+ }
+
+ if (this.cnt !== 30) {
+ return this.cnt++;
+ }
+
+ this.cursor.visible = this.blink;
+ this.blink = !this.blink;
+ this.cnt = 0;
+ }
+
+ /**
+ * Focus is lost on the input element, we disable the cursor and remove the hidden input element
+ */
+ public endFocus() {
+ if(!this.focus){
+ return;
+ }
+
+ this.domElement.removeEventListener();
+
+ if(this.blockInput === true) {
+ this.domElement.unblockKeyDownEvents();
+ }
+
+ this.focus = false;
+ if (this.value.length === 0 && null !== this.placeHolder) {
+ this.placeHolder.visible = true;
+ }
+ this.cursor.visible = false;
+
+ if (this.game.device.desktop) {
+ //Timeout is a chrome hack
+ setTimeout(() => {
+ this.domElement.blur();
+ }, 0);
+ } else {
+ this.domElement.blur();
+ }
+
+ if (!this.game.device.desktop) {
+ PhaserInput.KeyboardOpen = false;
+ PhaserInput.onKeyboardClose.dispatch();
+ }
+ }
+
+ /**
+ *
+ */
+ public startFocus() {
+ this.focus = true;
+
+ if (null !== this.placeHolder) {
+ this.placeHolder.visible = false;
+ }
+
+ if (this.game.device.desktop) {
+ //Timeout is a chrome hack
+ setTimeout(() => {
+ this.keyUpProcessor();
+ }, 0);
+ } else {
+ this.keyUpProcessor();
+ }
+
+ if (!this.game.device.desktop) {
+ PhaserInput.KeyboardOpen = true;
+ PhaserInput.onKeyboardOpen.dispatch();
+ }
+ }
+
+ private keyUpProcessor():void {
+ this.domElement.addKeyUpListener(this.keyListener.bind(this));
+ this.domElement.focus();
+
+ if(this.blockInput === true) {
+ this.domElement.blockKeyDownEvents();
+ }
+ }
+
+ /**
+ * Update the text value in the box, and make sure the cursor is positioned correctly
+ */
+ private updateText()
+ {
+ var text: string = '';
+ if (this.inputOptions.type === InputType.password) {
+ for (let i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }else if (this.inputOptions.type === InputType.number) {
+ var val = parseInt(this.value);
+ if (val < parseInt(this.inputOptions.min)) {
+ text = this.value = this.domElement.value = this.inputOptions.min;
+ } else if (val > parseInt(this.inputOptions.max)) {
+ text = this.value = this.domElement.value = this.inputOptions.max;
+ } else {
+ text = this.value;
+ }
+ } else {
+ text = this.value;
+ }
+
+ this.text.setText(text);
+
+ if (this.text.width > this.inputOptions.width) {
+ this.text.anchor.x = 1;
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ } else {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.text.anchor.set(0, 0);
+ this.text.x = this.inputOptions.padding;
+ break;
+ case 'center':
+ this.text.anchor.set(0.5, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width / 2;
+ break;
+ case 'right':
+ this.text.anchor.set(1, 0);
+ this.text.x = this.inputOptions.padding + this.inputOptions.width;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Updates the position of the caret in the phaser input field
+ */
+ private updateCursor() {
+ if (this.text.width > this.inputOptions.width || this.inputOptions.textAlign === 'right') {
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width;
+ } else {
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.cursor.x = this.inputOptions.padding + this.getCaretPosition();
+ break;
+ case 'center':
+ this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition();
+ break;
+ }
+ }
+ }
+
+ /**
+ * Fetches the carrot position from the dom element. This one changes when you use the keyboard to navigate the element
+ *
+ * @returns {number}
+ */
+ private getCaretPosition() {
+ var caretPosition: number = this.domElement.getCaretPosition();
+ if (-1 === caretPosition) {
+ return this.text.width;
+ }
+
+ var text = this.value;
+ if (this.inputOptions.type === InputType.password) {
+ text = '';
+ for (let i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }
+
+ this.offscreenText.setText(text.slice(0, caretPosition));
+
+ return this.offscreenText.width;
+ }
+
+ /**
+ * Set the caret when a click was made in the input field
+ *
+ * @param e
+ */
+ private setCaretOnclick(e: Phaser.Pointer) {
+ var localX: number = (this.text.toLocal(new PIXI.Point(e.x, e.y), this.game.world)).x;
+ if (this.inputOptions.textAlign && this.inputOptions.textAlign === 'center') {
+ localX += this.text.width / 2;
+ }
+
+ var characterWidth: number = this.text.width / this.value.length;
+ var index: number = 0;
+ for (let i: number = 0; i < this.value.length; i++) {
+ if (localX >= i * characterWidth && localX <= (i + 1) * characterWidth) {
+ index = i;
+ break;
+ }
+ }
+
+ if (localX > (this.value.length - 1) * characterWidth) {
+ index = this.value.length;
+ }
+
+ this.startFocus();
+
+ this.domElement.setCaretPosition(index);
+
+ this.updateCursor();
+ }
+
+ /**
+ * This checks if a select has been made, and if so highlight it with blue
+ */
+ private updateSelection(): void {
+ if (this.domElement.hasSelection) {
+ var text = this.value;
+ if (this.inputOptions.type === InputType.password) {
+ text = '';
+ for (let i = 0; i < this.value.length; i++) {
+ text += '*';
+ }
+ }
+ text = text.substring(this.domElement.caretStart, this.domElement.caretEnd);
+ this.offscreenText.setText(text);
+
+ this.selection.updateSelection(this.offscreenText.getBounds());
+
+ switch (this.inputOptions.textAlign) {
+ case 'left':
+ this.selection.x = this.inputOptions.padding;
+ break;
+ case 'center':
+ this.selection.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2;
+ break;
+ }
+ } else {
+ this.selection.clear();
+ }
+ }
+
+ private zoomIn(): void {
+ if (PhaserInput.Zoomed) {
+ return;
+ }
+
+ let bounds: PIXI.Rectangle = this.getBounds();
+ if (window.innerHeight > window.innerWidth) {
+ this.windowScale = this.game.width / (bounds.width * 1.5);
+ } else {
+ this.windowScale = (this.game.width / 2) / (bounds.width * 1.5);
+ }
+
+ let offsetX: number = ((this.game.width - bounds.width * 1.5) / 2) / this.windowScale;
+ this.game.world.scale.set(this.game.world.scale.x * this.windowScale, this.game.world.scale.y * this.windowScale);
+ this.game.world.pivot.set(bounds.x - offsetX, bounds.y - this.inputOptions.padding * 2);
+ PhaserInput.Zoomed = true;
+ }
+
+ private zoomOut(): void {
+ if (!PhaserInput.Zoomed) {
+ return;
+ }
+
+ this.game.world.scale.set(this.game.world.scale.x / this.windowScale, this.game.world.scale.y / this.windowScale);
+ this.game.world.pivot.set(0, 0);
+ PhaserInput.Zoomed = false;
+ }
+
+ /**
+ * Event fired when a key is pressed, it takes the value from the hidden input field and adds it as its own
+ */
+ private keyListener(evt: KeyboardEvent)
+ {
+ this.value = this.getFormattedText(this.domElement.value);
+ if (evt.keyCode === 13) {
+ if(this.focusOutOnEnter) {
+ this.endFocus();
+ }
+ return;
+ }
+
+ this.updateText();
+ this.updateCursor();
+ this.updateSelection();
+
+ evt.preventDefault();
+ }
+
+ /**
+ * We overwrite the destroy method because we want to delete the (hidden) dom element when the inputField was removed
+ */
+ public destroy(destroyChildren?: boolean) {
+ this.game.input.onDown.remove(this.checkDown, this);
+ this.focusIn.removeAll();
+ this.focusOut.removeAll();
+ this.domElement.destroy();
+
+ super.destroy(destroyChildren);
+ }
+
+ /**
+ * Resets the text to an empty value
+ */
+ public resetText() {
+ this.setText();
+ }
+
+ public setText(text: string = ''): void {
+ if (null !== this.placeHolder) {
+ if (text.length > 0) {
+ this.placeHolder.visible = false;
+ } else {
+ this.placeHolder.visible = true;
+ }
+ }
+
+ this.value = this.getFormattedText(text);
+ this.domElement.value = this.value;
+ this.updateText();
+ this.updateCursor();
+ this.endFocus();
+ }
+
+ /**
+ * Returns text formatted by rules stated in inputOptions
+ * @param text
+ */
+ private getFormattedText(text: string): string {
+ switch (this.inputOptions.forceCase) {
+ default:
+ case ForceCase.none:
+ return text;
+ case ForceCase.lower:
+ return text.toLowerCase();
+ case ForceCase.upper:
+ return text.toUpperCase();
+ }
+ }
+ }
+}
diff --git a/src/util/phaser-input-master/ts/Objects/InputBox.ts b/src/util/phaser-input-master/ts/Objects/InputBox.ts
new file mode 100755
index 0000000..1ab6ff0
--- /dev/null
+++ b/src/util/phaser-input-master/ts/Objects/InputBox.ts
@@ -0,0 +1,56 @@
+module PhaserInput {
+ export class InputBox extends Phaser.Graphics {
+ private bgColor: number;
+ private borderRadius: number;
+ private borderColor: number;
+ private borderWidth: number;
+ private boxAlpha: number;
+ private boxHeight: number;
+ private padding: number;
+ private boxWidth: number;
+
+ constructor(game: Phaser.Game, inputOptions: InputOptions) {
+ super(game, 0, 0);
+
+ this.bgColor = (inputOptions.backgroundColor) ? parseInt(inputOptions.backgroundColor.slice(1), 16) : 0xffffff;
+ this.borderRadius = inputOptions.borderRadius || 0;
+ this.borderWidth = inputOptions.borderWidth || 1;
+ this.borderColor = (inputOptions.borderColor) ? parseInt(inputOptions.borderColor.slice(1), 16) : 0x959595;
+ this.boxAlpha = inputOptions.fillAlpha;
+ this.padding = inputOptions.padding;
+
+ var height: number = inputOptions.height;
+ var width: number = inputOptions.width;
+
+ var height: number;
+ if (inputOptions.font) {
+ //fetch height from font;
+ height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height);
+ }
+
+ this.boxHeight = this.padding * 2 + height;
+ var width = inputOptions.width;
+ this.boxWidth = this.padding * 2 + width;
+
+ this.drawBox();
+ }
+
+ public resize(newWidth: number): void {
+ this.boxWidth = this.padding * 2 + newWidth;
+
+ this.drawBox();
+ }
+
+ private drawBox(): void {
+ this.clear()
+ .beginFill(this.bgColor, this.boxAlpha)
+ .lineStyle(this.borderWidth, this.borderColor, this.boxAlpha);
+
+ if (this.borderRadius > 0) {
+ this.drawRoundedRect(0, 0, this.boxWidth, this.boxHeight, this.borderRadius);
+ } else {
+ this.drawRect(0, 0, this.boxWidth, this.boxHeight);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts b/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts
new file mode 100755
index 0000000..637664e
--- /dev/null
+++ b/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts
@@ -0,0 +1,25 @@
+module PhaserInput {
+ export class SelectionHighlight extends Phaser.Graphics {
+ private inputOptions: InputOptions;
+
+ constructor(game: Phaser.Game, inputOptions: InputOptions) {
+ super(game, inputOptions.padding, inputOptions.padding);
+
+ this.inputOptions = inputOptions;
+ }
+
+ public updateSelection(rect: PIXI.Rectangle): void {
+ var color = Phaser.Color.webToColor(this.inputOptions.selectionColor);
+
+ this.clear();
+ this.beginFill(SelectionHighlight.rgb2hex(color), color.a);
+ this.drawRect(rect.x, rect.y, rect.width, rect.height - this.inputOptions.padding);
+ }
+
+ public static rgb2hex(color: {r: number, g: number, b: number, a: number}): number {
+ return parseInt(("0" + color.r.toString(16)).slice(-2) +
+ ("0" + color.g.toString(16)).slice(-2) +
+ ("0" + color.b.toString(16)).slice(-2), 16);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/ts/Objects/TextMask.ts b/src/util/phaser-input-master/ts/Objects/TextMask.ts
new file mode 100755
index 0000000..70b864e
--- /dev/null
+++ b/src/util/phaser-input-master/ts/Objects/TextMask.ts
@@ -0,0 +1,32 @@
+module PhaserInput {
+ export class TextMask extends Phaser.Graphics {
+ private maskWidth: number;
+ private maskHeight: number;
+
+ constructor(game: Phaser.Game, inputOptions: InputOptions) {
+ super(game, inputOptions.padding, inputOptions.padding);
+
+ var height = inputOptions.height;
+
+ if (inputOptions.font) {
+ //fetch height from font;
+ height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height);
+ }
+ this.maskWidth = inputOptions.width;
+ this.maskHeight = height * 1.3;
+ this.drawMask();
+ }
+
+ public resize(newWidth: number): void {
+ this.maskWidth = newWidth;
+ this.drawMask();
+ }
+
+ private drawMask(): void {
+ this.clear()
+ .beginFill(0x000000)
+ .drawRect(0, 0, this.maskWidth, this.maskHeight)
+ .endFill();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/util/phaser-input-master/ts/Plugin.ts b/src/util/phaser-input-master/ts/Plugin.ts
new file mode 100755
index 0000000..3f6900c
--- /dev/null
+++ b/src/util/phaser-input-master/ts/Plugin.ts
@@ -0,0 +1,53 @@
+module PhaserInput {
+ export var Zoomed: boolean = false;
+ export var KeyboardOpen: boolean = false;
+ export const onKeyboardOpen: Phaser.Signal = new Phaser.Signal();
+ export const onKeyboardClose: Phaser.Signal = new Phaser.Signal()
+
+ export interface InputFieldObjectFactory extends Phaser.GameObjectFactory {
+ inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions, group?: Phaser.Group) => PhaserInput.InputField;
+ }
+
+ export interface InputFieldObjectCreator extends Phaser.GameObjectCreator {
+ inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions) => PhaserInput.InputField;
+ }
+
+ export interface InputFieldGame extends Phaser.Game {
+ add: InputFieldObjectFactory;
+ make: InputFieldObjectCreator;
+ }
+
+ export class Plugin extends Phaser.Plugin {
+ public static Zoomed: boolean = false;
+ public static KeyboardOpen: boolean = false;
+ public static onKeyboardOpen: Phaser.Signal = new Phaser.Signal();
+ public static onKeyboardClose: Phaser.Signal = new Phaser.Signal();
+
+ constructor(game: Phaser.Game, parent: Phaser.PluginManager) {
+ super(game, parent);
+
+ this.addInputFieldFactory();
+ }
+
+ /**
+ * Extends the GameObjectFactory prototype with the support of adding InputField. this allows us to add InputField methods to the game just like any other object:
+ * game.add.InputField();
+ */
+ private addInputFieldFactory() {
+ (Phaser.GameObjectFactory.prototype).inputField = function (x: number, y: number, inputOptions: PhaserInput.InputOptions, group?: Phaser.Group): PhaserInput.InputField {
+ if (group === undefined) {
+ group = this.world;
+ }
+
+ var nineSliceObject = new PhaserInput.InputField(this.game, x, y, inputOptions);
+
+ return group.add(nineSliceObject);
+ };
+
+ (Phaser.GameObjectCreator.prototype).inputField = function (x: number, y: number, inputOptions: PhaserInput.InputOptions): PhaserInput.InputField {
+ return new PhaserInput.InputField(this.game, x, y, inputOptions);
+ };
+ }
+
+ }
+}
diff --git a/src/util/phaser-input-master/ts/definitions.d.ts b/src/util/phaser-input-master/ts/definitions.d.ts
new file mode 100755
index 0000000..fe7d469
--- /dev/null
+++ b/src/util/phaser-input-master/ts/definitions.d.ts
@@ -0,0 +1,2 @@
+///
+///
\ No newline at end of file
diff --git a/src/util/phaser-input-master/tslint.json b/src/util/phaser-input-master/tslint.json
new file mode 100755
index 0000000..0a60655
--- /dev/null
+++ b/src/util/phaser-input-master/tslint.json
@@ -0,0 +1,131 @@
+{
+ "rules": {
+ "align": [
+ true,
+ "parameters",
+ "statements"
+ ],
+ "ban": false,
+ "class-name": true,
+ "curly": true,
+ "eofline": true,
+ "forin": true,
+ "indent": [
+ true,
+ "spaces"
+ ],
+ "interface-name": true,
+ "jsdoc-format": true,
+ "label-position": true,
+ "label-undefined": true,
+ "max-line-length": [
+ true,
+ 200
+ ],
+ "member-access": true,
+ "no-any": false,
+ "no-arg": true,
+ "no-conditional-assignment": true,
+ "no-consecutive-blank-lines": true,
+ "no-console": [
+ true,
+ "debug",
+ "info",
+ "time",
+ "timeEnd",
+ "trace"
+ ],
+ "no-construct": true,
+ "no-constructor-vars": true,
+ "no-debugger": true,
+ "no-duplicate-key": true,
+ "no-duplicate-variable": true,
+ "no-empty": true,
+ "no-eval": true,
+ "no-inferrable-types": false,
+ "no-internal-module": false,
+ "no-null-keyword": false,
+ "no-require-imports": true,
+ "no-shadowed-variable": true,
+ "no-string-literal": false,
+ "no-switch-case-fall-through": true,
+ "no-trailing-whitespace": true,
+ "no-unreachable": true,
+ "no-unused-expression": true,
+ "no-unused-variable": true,
+ "no-use-before-declare": true,
+ "no-var-keyword": true,
+ "no-var-requires": true,
+ "object-literal-sort-keys": false,
+ "one-line": [
+ true,
+ "check-open-brace",
+ "check-catch",
+ "check-else",
+ "check-finally",
+ "check-whitespace"
+ ],
+ "quotemark": [
+ true,
+ "single",
+ "avoid-escape"
+ ],
+ "radix": true,
+ "semicolon": [
+ true,
+ "always"
+ ],
+ "switch-default": true,
+ "trailing-comma": [
+ true,
+ {
+ "multiline": "never",
+ "singleline": "never"
+ }
+ ],
+ "triple-equals": [
+ true,
+ "allow-null-check"
+ ],
+ "typedef": [
+ true,
+ "call-signature",
+ "parameter",
+ "arrow-parameter",
+ "property-declaration",
+ "variable-declaration",
+ "member-variable-declaration"
+ ],
+ "typedef-whitespace": [
+ true,
+ {
+ "call-signature": "nospace",
+ "index-signature": "nospace",
+ "parameter": "nospace",
+ "property-declaration": "nospace",
+ "variable-declaration": "nospace"
+ },
+ {
+ "call-signature": "onespace",
+ "index-signature": "onespace",
+ "parameter": "onespace",
+ "property-declaration": "onespace",
+ "variable-declaration": "onespace"
+ }
+ ],
+ "use-strict": false,
+ "variable-name": [
+ true,
+ "allow-leading-underscore",
+ "ban-keywords"
+ ],
+ "whitespace": [
+ true,
+ "check-branch",
+ "check-decl",
+ "check-operator",
+ "check-separator",
+ "check-type"
+ ]
+ }
+}
\ No newline at end of file