API Docs for: 1.1.1
Show:

File: src\hud\HUDManager.ts

/**
* The HUD (Heads Up Display) is a section that handles the displayment of information that you always want visible to user. 
* This section is managed differently to normal GameObjects, where the difference being that HUD items aren't added to a Canvas but are DOM elements instead. Since they DOM elements you can style these elements using a CSS sheet if you wish. 
*
* @module Kiwi
* @submodule HUD
* @main HUD
*/

module Kiwi.HUD {

    /**
    * This class manages all of the various HUDDisplays that are currently used on this Managers game.
    * Using this class you can create/add and remove HUDDisplays from this game,
    * change the HUDDisplay that is currently being display (also known as the currentHUD) and show/hide the currentHUD.
    * Each HUDManager also has at least one HUDDisplay which is called the 'defaultHUD' you cannot remove,
    * but you can reassign the defaultHUD to be a different HUDDisplay if you want. 
    * 
    *
    * @class HUDManager
    * @namespace Kiwi.HUD
    * @constructor
    * @param game {Kiwi.Game} game
    * @return {Kiwi.HUD.HUDManager}
    */
    export class HUDManager {
        
        constructor(game: Kiwi.Game) {
            this._game = game;
            this._device = this._game.deviceTargetOption;
        }

        /**
        * The game that this HUDManager belongs to.
        * @property _game
        * @type Kiwi.Game
        * @private
        */
        private _game: Kiwi.Game;

        /**
        * The device that this game is being target at. The same as the deviceTargetOption property on the root Game.
        * This is needed as it detirmines if HUD is supported on the device or not and if so, how it is implemented. 
        * @property _device
        * @type number
        * @private
        */
        private _device: number;

        /**
        * If the HUD is supported on the DEVICE that is being targeted. Gets set during the BOOT sequence.
        * @property _supported
        * @type boolean
        * @private
        */
        private _supported: boolean;

        /**
        * Returns the _supported property indicating whether HUD is supported or not.
        * @property supported
        * @type boolean
        * @public
        */
        public get supported():boolean {
            return this._supported;
        }

        /**
        * The HTMLDivElement that is being used as the container for the whole manager.
        * @property _hudContainer
        * @type HTMLDivElement
        * @private
        */
        private _hudContainer: HTMLDivElement;

        /**
        * The DOM is ready, so if the current state is pending we can boot up the HUD now.
        * @method boot
        * @public
        */
        public boot() {

            if (this._device === Kiwi.TARGET_BROWSER) {
                this._supported = true;

                this._hudContainer = <HTMLDivElement>document.createElement("div");
                this._hudContainer.id = "HUDContainer";
                this._hudContainer.style.position = "absolute";
                this._hudContainer.style.width = "100%";
                this._hudContainer.style.height = "100%";
                this._hudContainer.style.top = '0';
                this._hudContainer.style.left = '0';
                this._game.stage.container.appendChild(this._hudContainer);

                this._huds = new Array<HUDDisplay>();

                this._defaultHUD = this.createHUD("defaultHUD");
                this._currentHUD = this._defaultHUD;
                this.setHUD(this._defaultHUD);

            } else {
                this._supported = false;
            }

        }

        /**
        * Returns the type of object this is.
        * @method objType
        * @return {String} "HUDManager"
        * @public
        */
        public objType():string {
            return "HUDManager";
        }

        /**
        * An array containing all of the HUDDisplays that are currently active on this HUDManager.
        * @property _huds
        * @type Array
        * @private
        */
        private _huds: Kiwi.HUD.HUDDisplay[];

        /**
        * The defaultHUD that is being used.
        * The defaultHUD cannot be removed, but can be swapped out for another HUDDisplay.
        * @property _defaultHUD
        * @type Kiwi.HUD.HUDDisplay
        * @private
        */
        private _defaultHUD: Kiwi.HUD.HUDDisplay;

        /**
        * The currentHUD that is in use. Can be the same as the defaultHUD.
        * @property _currentHUD
        * @type Kiwi.HUD.HUDDisplay
        * @private
        */
        private _currentHUD: Kiwi.HUD.HUDDisplay;

        /**
        * The default HUDDisplay that is to be used.
        * The defaultHUD cannot be removed, and a game (that supports HUDS) will always contain the defaultHUD.
        *
        * @property defaultHUD
        * @type Kiwi.HUD.HUDDisplay
        * @public
        */
        public set defaultHUD(value: Kiwi.HUD.HUDDisplay) {
            if (this._currentHUD === this._defaultHUD) {
                this._currentHUD = value;
                this.setHUD(this._currentHUD);
            }
            this._defaultHUD = value;
        }
        public get defaultHUD(): Kiwi.HUD.HUDDisplay {
            return this._defaultHUD;
        }

        /**
        * Changes the currentHUD that is being displayed to one that is passed.
        * @method setHUD
        * @param hud {Kiwi.HUD.HUDDisplay} The HUD you want to display. 
        * @public
        */
        public setHUD(hud: Kiwi.HUD.HUDDisplay) {
            if (this.supported) {
                this.hideHUD();
                this._currentHUD = hud;
                this.showHUD();
            }
        }

        /**
        * Shows the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
        * @method showHUD
        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to show. Defaults to the currentHUD if nothing is passed.
        * @public
        */
        public showHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
            hud.show();
        }

        /**
        * Hides the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
        * @method hideHUD 
        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to hude. Defaults to the currentHUD if nothing is passed.
        * @public
        */
        public hideHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
            hud.hide();
        }

        /**
        * Creates a new HUDDisplay on this HUDManager.
        * 
        * @method createHUD
        * @param name {string} Name of the new HUDDisplay that is being creates.
        * @param [switchTo=false] {boolean} Switch to the new HUD that was created. DE
        * @return {Kiwi.HUD.HUDDisplay} The HUDDisplay that was created.
        * @public
        */
        public createHUD(name: string, switchTo:boolean=false): Kiwi.HUD.HUDDisplay {
            
            if (this.supported) {

                var hud: Kiwi.HUD.HUDDisplay = new Kiwi.HUD.HUDDisplay(this._game, name);
                hud.hide();
                this.addToContainer(hud);
                this._huds.push(hud);
                
                if(switchTo === true) this.setHUD(hud);

                return hud;

            }
        }

        /**
        * Removes a HUDDisplay off this manager. Returns a boolean indicating whether or not this method was a success.
        *
        * @method removeHUD
        * @param hud {Kiwi.HUD.HUDDisplay} The hud you want to remove.
        * @returns {boolean} If this method succeeded or not.
        * @public
        */
        public removeHUD(hud: Kiwi.HUD.HUDDisplay):boolean {
            if (this.supported) {
                if (hud === this._defaultHUD) {
                    return false;
                }

                if (this._currentHUD === hud) {
                    this.setHUD(this._defaultHUD);
                }

                this.removeFromContainer(hud);

                var i = this._huds.indexOf(hud);

                if (i !== -1) {
                    this._huds.splice(i, 1);
                }

                return true;
            }
        }

        /**
        * Adds a HUDDisplays HTMLDivElement to this HUDManagers container element.
        * @method addToContainer
        * @param hud {Kiwi.HUD.HUDDisplay} The HUDDisplay that is to be added.
        * @private
        */
        private addToContainer(hud:Kiwi.HUD.HUDDisplay) {
            if (this._device == Kiwi.TARGET_BROWSER) {
                this._hudContainer.appendChild(hud.container);
            }
        }

        /**
        * Removes the hud that is passed from this HUD Manager. Checks to see if that hud has this container as a parent first.
        * @method removeFromContainer
        * @param hud {Kiwi.HUD.HUDDisplay} The hud to be removed
        * @private
        */
        private removeFromContainer(hud: Kiwi.HUD.HUDDisplay) {
            if (this._device == Kiwi.TARGET_BROWSER) {
                if (this._hudContainer.contains(hud.container)) {
                    this._hudContainer.removeChild(hud.container);
                }
            }

        }

        /**
        * Game loop
        * @method update
        * @public
        */
        public update() {
            if (this._supported) {
                for (var i = 0; i < this._huds.length; i++) {
                    this._huds[i].update();
                }
            }
        }

    }
}