(function () {
    'use strict';

    class GameConfig {
        constructor() { }
        static init() {
            var reg = Laya.ClassUtils.regClass;
        }
    }
    GameConfig.width = 640;
    GameConfig.height = 1136;
    GameConfig.scaleMode = "fixedwidth";
    GameConfig.screenMode = "none";
    GameConfig.alignV = "top";
    GameConfig.alignH = "left";
    GameConfig.startScene = "";
    GameConfig.sceneRoot = "";
    GameConfig.debug = false;
    GameConfig.stat = false;
    GameConfig.physicsDebug = false;
    GameConfig.exportSceneToJson = true;
    GameConfig.init();

    class ResDic {
        constructor() {
            this._container = {};
            this._length = 0;
        }
        get container() {
            return this._container;
        }
        get size() {
            return this._length;
        }
        set(key, value) {
            if (!this._container.hasOwnProperty(key)) {
                this._length++;
            }
            this._container[key] = value;
        }
        has(key) {
            return this._container.hasOwnProperty(key) ? true : false;
        }
        get(key) {
            if (this._container.hasOwnProperty(key)) {
                return this._container[key];
            }
            else {
                return undefined;
            }
        }
        delete(key) {
            if (this._container.hasOwnProperty(key)) {
                delete this._container[key];
                this._length--;
            }
        }
        clear() {
            this._container = {};
            this._length = 0;
        }
    }

    class AssetManager {
        constructor() {
            this.Zombie = new ResDic();
            this.Police = new ResDic();
            this.People = new ResDic();
            AssetManager.ins = this;
        }
        static get Instance() {
            if (AssetManager.ins) {
                return AssetManager.ins;
            }
            else {
                return new AssetManager();
            }
        }
        Init() {
            Laya.stage.addChild(this.mainscene);
            this.maincamera = this.mainscene.getChildByName("MainCamera");
        }
    }
    class ResourcesPath {
        constructor() {
            ResourcesPath.ins = this;
        }
        static get Instance() {
            if (ResourcesPath.ins) {
                return ResourcesPath.ins;
            }
            else {
                return new ResourcesPath();
            }
        }
    }
    ResourcesPath.MainScene = "Game/res/MainScene/LayaScene_mainscene/Conventional/mainscene.ls";
    ResourcesPath.People = [
        "Game/res/Role/LayaScene_mainscene/Conventional/role1.lh",
        "Game/res/Role/LayaScene_mainscene/Conventional/role2.lh",
        "Game/res/Role/LayaScene_mainscene/Conventional/role3.lh"
    ];
    ResourcesPath.Police = "Game/res/Role/LayaScene_mainscene/Conventional/police.lh";
    ResourcesPath.Zombie = "Game/res/Role/LayaScene_mainscene/Conventional/Zombie.lh";

    var DispatcherState;
    (function (DispatcherState) {
        DispatcherState[DispatcherState["LoadComplete"] = 0] = "LoadComplete";
        DispatcherState[DispatcherState["SceneInit"] = 1] = "SceneInit";
        DispatcherState[DispatcherState["StageInit"] = 2] = "StageInit";
        DispatcherState[DispatcherState["StageCreateComplete"] = 3] = "StageCreateComplete";
        DispatcherState[DispatcherState["GoldGet"] = 4] = "GoldGet";
        DispatcherState[DispatcherState["PlayerRunning"] = 5] = "PlayerRunning";
        DispatcherState[DispatcherState["PlayerStand"] = 6] = "PlayerStand";
        DispatcherState[DispatcherState["ShowModel"] = 7] = "ShowModel";
        DispatcherState[DispatcherState["RefreshCityName"] = 8] = "RefreshCityName";
    })(DispatcherState || (DispatcherState = {}));
    class DispatcherControl {
        static DispatcherOn(_mode, caller, fun, args = []) {
            DispatcherControl.instance.on(DispatcherState[_mode], caller, fun, args);
        }
        static DispatcherOff(_mode, caller, fun, args = []) {
            DispatcherControl.instance.off(DispatcherState[_mode], caller, fun);
        }
        static DispatcherTrigger(_mode, args = []) {
            DispatcherControl.instance.event(DispatcherState[_mode], args);
        }
    }
    DispatcherControl.instance = new Laya.EventDispatcher();

    class CameraControl {
        constructor() {
            CameraControl.ins = this;
            DispatcherControl.DispatcherOn(DispatcherState.LoadComplete, this, this.Init);
        }
        static get Instance() {
            if (CameraControl.ins) {
                return CameraControl.ins;
            }
            else {
                return new CameraControl();
            }
        }
        Init() {
            this.maincamera = LoadView.Instance.maincamera;
            this.maincamera.transform.position = new Laya.Vector3(19.5, 100, 16.7);
        }
    }

    class LoadView {
        constructor() {
            LoadView.ins = this;
            new CameraControl();
            this.Init();
        }
        static get Instance() {
            if (LoadView.ins) {
                return LoadView.ins;
            }
            else {
                return new LoadView();
            }
        }
        Init() {
            this.LoadScene();
        }
        LoadScene() {
            Laya.Scene3D.load(ResourcesPath.MainScene, Laya.Handler.create(this, (scene) => {
                this.mainscene = scene;
                this.maincamera = this.mainscene.getChildByName("Main Camera");
                console.log(this.maincamera);
                Laya.stage.addChild(this.mainscene);
                console.log("场景加载完毕--");
                this.LoadZombie();
            }));
        }
        LoadZombie() {
            Laya.loader.create(ResourcesPath.Zombie, Laya.Handler.create(this, (zombie) => {
                AssetManager.Instance.Zombie.set(1, zombie);
            }));
            console.log("僵尸模型加载完毕--");
            this.LoadPolice();
        }
        LoadPolice() {
            Laya.loader.create(ResourcesPath.Police, Laya.Handler.create(this, (police) => {
                AssetManager.Instance.Police.set(1, police);
                console.log("警察模型加载完毕--");
                this.LoadPeople();
            }));
        }
        LoadPeople() {
            var path = [];
            for (let i = 0; i < ResourcesPath.People.length; i++) {
                path.push(ResourcesPath.People[i]);
            }
            Laya.loader.create(path, Laya.Handler.create(this, () => {
                for (var i = 0; i < ResourcesPath.People.length; i++) {
                    var people = Laya.loader.getRes(ResourcesPath.People[i]);
                    AssetManager.Instance.People.set(i + 1, people);
                    Laya.loader.clearRes(ResourcesPath.People[i]);
                }
                console.log("平民模型加载完毕--");
                DispatcherControl.DispatcherTrigger(DispatcherState.LoadComplete);
            }));
        }
    }

    class CheckMain {
    }
    CheckMain.Create = false;

    class Main {
        constructor() {
            if (CheckMain.Create)
                return;
            CheckMain.Create = true;
            if (window["Laya3D"])
                Laya3D.init(GameConfig.width, GameConfig.height);
            else
                Laya.init(GameConfig.width, GameConfig.height, Laya["WebGL"]);
            Laya["Physics"] && Laya["Physics"].enable();
            Laya["DebugPanel"] && Laya["DebugPanel"].enable();
            Laya.stage.scaleMode = GameConfig.scaleMode;
            Laya.stage.screenMode = GameConfig.screenMode;
            Laya.stage.alignV = GameConfig.alignV;
            Laya.stage.alignH = GameConfig.alignH;
            Laya.URL.exportSceneToJson = GameConfig.exportSceneToJson;
            if (GameConfig.debug || Laya.Utils.getQueryString("debug") == "true")
                Laya.enableDebugPanel();
            if (GameConfig.physicsDebug && Laya["PhysicsDebugDraw"])
                Laya["PhysicsDebugDraw"].enable();
            if (GameConfig.stat)
                Laya.Stat.show();
            Laya.alertGlobalError = true;
            Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
        }
        onVersionLoaded() {
            Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded));
        }
        onConfigLoaded() {
            new LoadView();
        }
    }
    new Main();

}());
//# sourceMappingURL=bundle.js.map
