MainScene.js 35.8 KB

                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/scripts/scenes/MainScene.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'b38d06ajs5Ofqd6Fot0DD43', 'MainScene');
// scripts/scenes/MainScene.ts

"use strict";
// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var GuideManager_1 = require("../component/GuideManager");
var SaveDataManager_1 = require("../component/SaveDataManager");
var SoundManager_1 = require("../component/SoundManager");
var Global_1 = require("../Global");
var BattleConst_1 = require("../kernel/battle/BattleConst");
var GameSceneObjTableMgr_1 = require("../kernel/table/GameSceneObjTableMgr");
var TableDefine_1 = require("../kernel/table/TableDefine");
var GameSceneControl_1 = require("../ui/gameScene/GameSceneControl");
var UIManager_1 = require("../ui/UIManager");
var ResWidget_1 = require("../ui/uiView/widget/ResWidget");
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
var MainScene = /** @class */ (function (_super) {
    __extends(MainScene, _super);
    function MainScene() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this._sceneEffectAudioId = -1;
        return _this;
        //#endregion
    }
    //#region  LIFE-CYCLE CALLBACKS:
    MainScene.prototype.onLoad = function () {
        BattleConst_1.getGlobalNode().on(Global_1.GlobalEvent.OBJ_UNLOCK_ANI_FINISH, this.onObjUnlock, this);
        BattleConst_1.getGlobalNode().on(Global_1.GlobalEvent.SOUND_MUSIC_CONFIG_CHANGE, this.onSoundConfigChange, this);
        var guideNode = this.node.getChildByName('guideNode');
        if (guideNode.childrenCount > 0) {
            GuideManager_1.GuideManager.ins.init(guideNode);
        }
    };
    MainScene.prototype.start = function () {
        this.node.getChildByName('widgetStar').getComponent(ResWidget_1.default).setType(Global_1.ResType.STAR);
        this.node.getChildByName('widgetDiamond').getComponent(ResWidget_1.default).setType(Global_1.ResType.DIAMOND);
        this._pageView = cc.find('gameSceneRoot/pageView', this.node).getComponent(cc.PageView);
        this._buildScenePrefab = cc.find('gameSceneRoot/container', this.node);
        this._charNode = cc.find('gameSceneRoot/' + (SaveDataManager_1.SaveDataManager.ins.runtimeData.gender == 0 ? 'girl' : 'boy'), this.node);
        this._tipNode = cc.find('gameSceneRoot/unlockTip', this.node);
        this._parGreenNode = cc.find('gameSceneRoot/parGreen', this.node);
        this._bgLightNode = cc.find('gameSceneRoot/bg', this.node);
        this._unlockSpineNode = cc.find('gameSceneRoot/unlockSpine', this.node);
        var curScene = SaveDataManager_1.SaveDataManager.ins.runtimeData.curGameScene;
        for (var i = 1; i < 4; ++i) {
            if (i <= curScene) {
                this.addScene(i);
            }
        }
        if (this._pageView.getPages().length == 1) {
            //只有一页,手动刷新
            this._pageView.getPages()[0].getComponent(GameSceneControl_1.default).onSlideShow();
        }
        else {
            this._pageView.setCurrentPageIndex(this._pageView.getPages().length - 1);
        }
        this.scheduleOnce(this.checkGuide.bind(this), 0); //等待自适应布局完毕后再检查
    };
    MainScene.prototype.onEnable = function () {
        UIManager_1.UIManager.ins.widgetLayer.active = true;
        if (SaveDataManager_1.SaveDataManager.ins.mainSceneAddStar > 0) {
            SaveDataManager_1.SaveDataManager.ins.adjustStar(SaveDataManager_1.SaveDataManager.ins.mainSceneAddStar, true);
            SaveDataManager_1.SaveDataManager.ins.mainSceneAddStar = 0;
        }
        //预加载地图
        var maxLevel = Global_1.tMgr.getConfig(TableDefine_1.TableName.GAME_PLAY, 22).Value;
        var nextLevelId = SaveDataManager_1.SaveDataManager.ins.runtimeData.curLevel + 1;
        if (nextLevelId > maxLevel) {
            nextLevelId = maxLevel;
        }
        cc.resources.preload('map/map-' + nextLevelId.toString(), cc.TiledMapAsset);
        this.onSoundConfigChange(SaveDataManager_1.SaveDataManager.ins.runtimeData.musicMute);
    };
    MainScene.prototype.onDisable = function () {
        this._sceneEffectAudioId > -1 && cc.audioEngine.stopEffect(this._sceneEffectAudioId);
    };
    MainScene.prototype.onDestroy = function () {
        // getGlobalNode().off(GlobalEvent.OBJ_UNLOCK_ANI_FINISH, this.onObjUnlock, this);
        BattleConst_1.getGlobalNode().targetOff(this);
    };
    MainScene.prototype.update = function (dt) {
        var backNode = cc.find('gameSceneRoot/pageView/backImgContainer', this.node);
        var contentNode = cc.find('gameSceneRoot/pageView/content', this.node);
        backNode.setPosition(contentNode.position);
        var lightNode = cc.find('gameSceneRoot/pageView/effectLayer', this.node);
        lightNode.setPosition(contentNode.position);
    };
    //#endregion
    //#region event
    MainScene.prototype.onPageSlide = function (view) {
        var page = view.getCurrentPageIndex();
        var pages = view.getPages();
        for (var i = 0; i < pages.length; ++i) {
            pages[i].getComponent(GameSceneControl_1.default).onSlideLeave();
        }
        pages[page].getComponent(GameSceneControl_1.default).onSlideShow();
    };
    MainScene.prototype.onToolClick = function (e) {
        var curPage = this._pageView.getCurrentPageIndex();
        this._pageView.getPages()[curPage].getComponent(GameSceneControl_1.default).onToolClick(e);
    };
    MainScene.prototype.onObjUnlock = function (objId) {
        var obj = Global_1.tMgr.getConfig(TableDefine_1.TableName.GAME_SCENE_OBJ, objId);
        var sceneList = GameSceneObjTableMgr_1.GameSceneObjTableMgr.ins.getByScene(obj.SceneId);
        var allUnlock = true;
        for (var i = 0; i < sceneList.length; ++i) {
            //判断此场景内的每个物件是否解锁
            if (!SaveDataManager_1.SaveDataManager.ins.runtimeData.unlockObj.includes(sceneList[i].ID)) {
                allUnlock = false;
                break;
            }
        }
        if (allUnlock && obj.SceneId < 3) {
            //添加下一场景
            SaveDataManager_1.SaveDataManager.ins.runtimeData.curGameScene++;
            SaveDataManager_1.SaveDataManager.ins.saveData();
            this.addScene(obj.SceneId + 1);
            this._pageView.setCurrentPageIndex(obj.SceneId);
        }
    };
    MainScene.prototype.onSoundConfigChange = function (mute) {
        var sceneEffect = cc.resources.get('soundEffect/Scene', cc.AudioClip);
        if (!mute) {
            SoundManager_1.SoundManager.ins.playMusic();
            this._sceneEffectAudioId = cc.audioEngine.playEffect(sceneEffect, true);
        }
        else {
            SoundManager_1.SoundManager.ins.stopMusic();
            this._sceneEffectAudioId > -1 && cc.audioEngine.stopEffect(this._sceneEffectAudioId);
        }
    };
    //#endregion
    //#region public
    MainScene.prototype.onGuideClick = function () {
        this.node.getChildByName('mask').active = false;
        GuideManager_1.GuideManager.ins.hideTalk();
        GuideManager_1.GuideManager.ins.hideHand();
        // SaveDataManager.ins.runtimeData.guideStep++;
        // SaveDataManager.ins.saveData();
    };
    //#endregion
    //#region private
    MainScene.prototype.addScene = function (sceneId) {
        var buidScene = cc.instantiate(this._buildScenePrefab);
        buidScene.active = true;
        buidScene.getComponent(GameSceneControl_1.default).init(sceneId - 1, this._charNode, this._tipNode, this._parGreenNode, this._bgLightNode, this._unlockSpineNode);
        buidScene.getComponent(GameSceneControl_1.default).loadScene(sceneId);
        this._pageView.addPage(buidScene);
    };
    MainScene.prototype.checkGuide = function () {
        var _this = this;
        //引导
        if (SaveDataManager_1.SaveDataManager.ins.runtimeData.guideStep == 0) {
            var wpos = this._charNode.convertToWorldSpaceAR(cc.v2(0, 380));
            var txt = Global_1.tMgr.getConfig(TableDefine_1.TableName.GAME_PLAY, 25).Comment;
            GuideManager_1.GuideManager.ins.showTalk(wpos, txt);
            this.scheduleOnce(function () {
                GuideManager_1.GuideManager.ins.hideTalk();
                SaveDataManager_1.SaveDataManager.ins.runtimeData.guideStep++;
                SaveDataManager_1.SaveDataManager.ins.saveData();
                _this.checkGuide();
            }, 3);
        }
        else if (SaveDataManager_1.SaveDataManager.ins.runtimeData.guideStep == 1) {
            var wpos = this.node.getChildByName('UITitle').getChildByName('bottom').convertToWorldSpaceAR(cc.v2(0, 120));
            GuideManager_1.GuideManager.ins.showHand(wpos, true);
            wpos = this.node.getChildByName('UITitle').getChildByName('bottom').convertToWorldSpaceAR(cc.v2(0, 100));
            wpos.y += 200;
            var txt = Global_1.tMgr.getConfig(TableDefine_1.TableName.GAME_PLAY, 26).Comment;
            txt = txt.replace('{0}', Global_1.tMgr.getConfig(TableDefine_1.TableName.GAME_PLAY, SaveDataManager_1.SaveDataManager.ins.runtimeData.gender == 0 ? 24 : 23).Comment);
            GuideManager_1.GuideManager.ins.showTalk(wpos, txt);
            var btn = cc.find('UITitle/bottom/naviBar/btnLayer/btn3', this.node);
            wpos = btn.convertToWorldSpaceAR(cc.Vec2.ZERO);
            UIManager_1.UIManager.ins.widgetLayer.convertToNodeSpaceAR(wpos, wpos);
            var newBtn = cc.instantiate(btn);
            newBtn.setPosition(wpos);
            newBtn.getComponent(cc.Button).clickEvents[0].customEventData = '99';
            UIManager_1.UIManager.ins.widgetLayer.addChild(newBtn);
            this.node.getChildByName('mask').active = true;
        }
    };
    MainScene = __decorate([
        ccclass
    ], MainScene);
    return MainScene;
}(cc.Component));
exports.default = MainScene;

cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0c1xcc2NlbmVzXFxNYWluU2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQix3RUFBd0U7QUFDeEUsbUJBQW1CO0FBQ25CLGtGQUFrRjtBQUNsRiw4QkFBOEI7QUFDOUIsa0ZBQWtGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEYsMERBQXlEO0FBQ3pELGdFQUErRDtBQUMvRCwwREFBeUQ7QUFDekQsb0NBQXVEO0FBRXZELDREQUE2RDtBQUM3RCw2RUFBNEU7QUFDNUUsMkRBQTBGO0FBQzFGLHFFQUFnRTtBQUNoRSw2Q0FBNEM7QUFDNUMsMkRBQXNEO0FBRWhELElBQUEsS0FBd0IsRUFBRSxDQUFDLFVBQVUsRUFBbkMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFrQixDQUFDO0FBRzVDO0lBQXVDLDZCQUFZO0lBQW5EO1FBQUEscUVBNE5DO1FBOUVXLHlCQUFtQixHQUFXLENBQUMsQ0FBQyxDQUFDOztRQTZFekMsWUFBWTtJQUNoQixDQUFDO0lBak5HLGdDQUFnQztJQUVoQywwQkFBTSxHQUFOO1FBRUksMkJBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxvQkFBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUUsMkJBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxvQkFBVyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLDJCQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNwQztJQUdMLENBQUM7SUFFRCx5QkFBSyxHQUFMO1FBQ0ks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TUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUVsRDtJQUNMLENBQUM7SUF6TmdCLFNBQVM7UUFEN0IsT0FBTztPQUNhLFNBQVMsQ0E0TjdCO0lBQUQsZ0JBQUM7Q0E1TkQsQUE0TkMsQ0E1TnNDLEVBQUUsQ0FBQyxTQUFTLEdBNE5sRDtrQkE1Tm9CLFNBQVMiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMZWFybiBUeXBlU2NyaXB0OlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy90eXBlc2NyaXB0Lmh0bWxcclxuLy8gTGVhcm4gQXR0cmlidXRlOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9yZWZlcmVuY2UvYXR0cmlidXRlcy5odG1sXHJcbi8vIExlYXJuIGxpZmUtY3ljbGUgY2FsbGJhY2tzOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9saWZlLWN5Y2xlLWNhbGxiYWNrcy5odG1sXHJcblxyXG5pbXBvcnQgeyBHdWlkZU1hbmFnZXIgfSBmcm9tIFwiLi4vY29tcG9uZW50L0d1aWRlTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBTYXZlRGF0YU1hbmFnZXIgfSBmcm9tIFwiLi4vY29tcG9uZW50L1NhdmVEYXRhTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBTb3VuZE1hbmFnZXIgfSBmcm9tIFwiLi4vY29tcG9uZW50L1NvdW5kTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudCwgUmVzVHlwZSwgdE1nciB9IGZyb20gXCIuLi9HbG9iYWxcIjtcclxuXHJcbmltcG9ydCB7IGdldEdsb2JhbE5vZGUgfSBmcm9tIFwiLi4va2VybmVsL2JhdHRsZS9CYXR0bGVDb25zdFwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmVPYmpUYWJsZU1nciB9IGZyb20gXCIuLi9rZXJuZWwvdGFibGUvR2FtZVNjZW5lT2JqVGFibGVNZ3JcIjtcclxuaW1wb3J0IHsgR2FtZVBsYXlUYWJsZSwgR2FtZVNjZW5lT2JqVGFibGUsIFRhYmxlTmFtZSB9IGZyb20gXCIuLi9rZXJuZWwvdGFibGUvVGFibGVEZWZpbmVcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2wgZnJvbSBcIi4uL3VpL2dhbWVTY2VuZS9HYW1lU2NlbmVDb250cm9sXCI7XHJcbmltcG9ydCB7IFVJTWFuYWdlciB9IGZyb20gXCIuLi91aS9VSU1hbmFnZXJcIjtcclxuaW1wb3J0IFJlc1dpZGdldCBmcm9tIFwiLi4vdWkvdWlWaWV3L3dpZGdldC9SZXNXaWRnZXRcIjtcclxuXHJcbmNvbnN0IHsgY2NjbGFzcywgcHJvcGVydHkgfSA9IGNjLl9kZWNvcmF0b3I7XHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWluU2NlbmUgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIHByaXZhdGUgX3BhZ2VWaWV3OiBjYy5QYWdlVmlldztcclxuICAgIHByaXZhdGUgX2J1aWxkU2NlbmVQcmVmYWI6IGNjLk5vZGU7XHJcblxyXG4gICAgcHJpdmF0ZSBfY2hhck5vZGU6IGNjLk5vZGU7XHJcbiAgICBwcml2YXRlIF90aXBOb2RlOiBjYy5Ob2RlO1xyXG4gICAgcHJpdmF0ZSBfcGFyR3JlZW5Ob2RlOiBjYy5Ob2RlO1xyXG4gICAgcHJpdmF0ZSBfYmdMaWdodE5vZGU6IGNjLk5vZGU7XHJcbiAgICBwcml2YXRlIF91bmxvY2tTcGluZU5vZGU6IGNjLk5vZGU7XHJcblxyXG4gICAgLy8jcmVnaW9uICBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuXHJcbiAgICBvbkxvYWQoKSB7XHJcblxyXG4gICAgICAgIGdldEdsb2JhbE5vZGUoKS5vbihHbG9iYWxFdmVudC5PQkpfVU5MT0NLX0FOSV9GSU5JU0gsIHRoaXMub25PYmpVbmxvY2ssIHRoaXMpO1xyXG4gICAgICAgIGdldEdsb2JhbE5vZGUoKS5vbihHbG9iYWxFdmVudC5TT1VORF9NVVNJQ19DT05GSUdfQ0hBTkdFLCB0aGlzLm9uU291bmRDb25maWdDaGFuZ2UsIHRoaXMpO1xyXG5cclxuICAgICAgICBsZXQgZ3VpZGVOb2RlID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKCdndWlkZU5vZGUnKTtcclxuICAgICAgICBpZiAoZ3VpZGVOb2RlLmNoaWxkcmVuQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIEd1aWRlTWFuYWdlci5pbnMuaW5pdChndWlkZU5vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZSgnd2lkZ2V0U3RhcicpLmdldENvbXBvbmVudChSZXNXaWRnZXQpLnNldFR5cGUoUmVzVHlwZS5TVEFSKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoJ3dpZGdldERpYW1vbmQnKS5nZXRDb21wb25lbnQoUmVzV2lkZ2V0KS5zZXRUeXBlKFJlc1R5cGUuRElBTU9ORCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhZ2VWaWV3ID0gY2MuZmluZCgnZ2FtZVNjZW5lUm9vdC9wYWdlVmlldycsIHRoaXMubm9kZSkuZ2V0Q29tcG9uZW50KGNjLlBhZ2VWaWV3KTtcclxuICAgICAgICB0aGlzLl9idWlsZFNjZW5lUHJlZmFiID0gY2MuZmluZCgnZ2FtZVNjZW5lUm9vdC9jb250YWluZXInLCB0aGlzLm5vZGUpO1xyXG4gICAgICAgIHRoaXMuX2NoYXJOb2RlID0gY2MuZmluZCgnZ2FtZVNjZW5lUm9vdC8nICsgKFNhdmVEYXRhTWFuYWdlci5pbnMucnVudGltZURhdGEuZ2VuZGVyID09IDAgPyAnZ2lybCcgOiAnYm95JyksIHRoaXMubm9kZSk7XHJcbiAgICAgICAgdGhpcy5fdGlwTm9kZSA9IGNjLmZpbmQoJ2dhbWVTY2VuZVJvb3QvdW5sb2NrVGlwJywgdGhpcy5ub2RlKTtcclxuICAgICAgICB0aGlzLl9wYXJHcmVlbk5vZGUgPSBjYy5maW5kKCdnYW1lU2NlbmVSb290L3BhckdyZWVuJywgdGhpcy5ub2RlKTtcclxuICAgICAgICB0aGlzLl9iZ0xpZ2h0Tm9kZSA9IGNjLmZpbmQoJ2dhbWVTY2VuZVJvb3QvYmcnLCB0aGlzLm5vZGUpO1xyXG4gICAgICAgIHRoaXMuX3VubG9ja1NwaW5lTm9kZSA9IGNjLmZpbmQoJ2dhbWVTY2VuZVJvb3QvdW5sb2NrU3BpbmUnLCB0aGlzLm5vZGUpO1xyXG5cclxuICAgICAgICBsZXQgY3VyU2NlbmUgPSBTYXZlRGF0YU1hbmFnZXIuaW5zLnJ1bnRpbWVEYXRhLmN1ckdhbWVTY2VuZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCA0OyArK2kpIHtcclxuICAgICAgICAgICAgaWYgKGkgPD0gY3VyU2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NlbmUoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9wYWdlVmlldy5nZXRQYWdlcygpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIC8v5Y+q5pyJ5LiA6aG177yM5omL5Yqo5Yi35pawXHJcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VWaWV3LmdldFBhZ2VzKClbMF0uZ2V0Q29tcG9uZW50KEdhbWVTY2VuZUNvbnRyb2wpLm9uU2xpZGVTaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9wYWdlVmlldy5zZXRDdXJyZW50UGFnZUluZGV4KHRoaXMuX3BhZ2VWaWV3LmdldFBhZ2VzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjaGVkdWxlT25jZSh0aGlzLmNoZWNrR3VpZGUuYmluZCh0aGlzKSwgMCk7IC8v562J5b6F6Ieq6YCC5bqU5biD5bGA5a6M5q+V5ZCO5YaN5qOA5p+lXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25FbmFibGUoKTogdm9pZCB7XHJcbiAgICAgICAgVUlNYW5hZ2VyLmlucy53aWRnZXRMYXllci5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoU2F2ZURhdGFNYW5hZ2VyLmlucy5tYWluU2NlbmVBZGRTdGFyID4gMCkge1xyXG4gICAgICAgICAgICBTYXZlRGF0YU1hbmFnZXIuaW5zLmFkanVzdFN0YXIoU2F2ZURhdGFNYW5hZ2VyLmlucy5tYWluU2NlbmVBZGRTdGFyLCB0cnVlKTtcclxuICAgICAgICAgICAgU2F2ZURhdGFNYW5hZ2VyLmlucy5tYWluU2NlbmVBZGRTdGFyID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8v6aKE5Yqg6L295Zyw5Zu+XHJcbiAgICAgICAgbGV0IG1heExldmVsID0gKHRNZ3IuZ2V0Q29uZmlnKFRhYmxlTmFtZS5HQU1FX1BMQVksIDIyKSBhcyBHYW1lUGxheVRhYmxlKS5WYWx1ZTtcclxuICAgICAgICBsZXQgbmV4dExldmVsSWQgPSBTYXZlRGF0YU1hbmFnZXIuaW5zLnJ1bnRpbWVEYXRhLmN1ckxldmVsICsgMTtcclxuICAgICAgICBpZiAobmV4dExldmVsSWQgPiBtYXhMZXZlbCkge1xyXG4gICAgICAgICAgICBuZXh0TGV2ZWxJZCA9IG1heExldmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYy5yZXNvdXJjZXMucHJlbG9hZCgnbWFwL21hcC0nICsgbmV4dExldmVsSWQudG9TdHJpbmcoKSwgY2MuVGlsZWRNYXBBc3NldCk7XHJcblxyXG4gICAgICAgIHRoaXMub25Tb3VuZENvbmZpZ0NoYW5nZShTYXZlRGF0YU1hbmFnZXIuaW5zLnJ1bnRpbWVEYXRhLm11c2ljTXV0ZSk7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25EaXNhYmxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lRWZmZWN0QXVkaW9JZCA+IC0xICYmIGNjLmF1ZGlvRW5naW5lLnN0b3BFZmZlY3QodGhpcy5fc2NlbmVFZmZlY3RBdWRpb0lkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGdldEdsb2JhbE5vZGUoKS5vZmYoR2xvYmFsRXZlbnQuT0JKX1VOTE9DS19BTklfRklOSVNILCB0aGlzLm9uT2JqVW5sb2NrLCB0aGlzKTtcclxuICAgICAgICBnZXRHbG9iYWxOb2RlKCkudGFyZ2V0T2ZmKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShkdCkge1xyXG4gICAgICAgIGxldCBiYWNrTm9kZSA9IGNjLmZpbmQoJ2dhbWVTY2VuZVJvb3QvcGFnZVZpZXcvYmFja0ltZ0NvbnRhaW5lcicsIHRoaXMubm9kZSk7XHJcbiAgICAgICAgbGV0IGNvbnRlbnROb2RlID0gY2MuZmluZCgnZ2FtZVNjZW5lUm9vdC9wYWdlVmlldy9jb250ZW50JywgdGhpcy5ub2RlKTtcclxuICAgICAgICBiYWNrTm9kZS5zZXRQb3NpdGlvbihjb250ZW50Tm9kZS5wb3NpdGlvbik7XHJcbiAgICAgICAgbGV0IGxpZ2h0Tm9kZSA9IGNjLmZpbmQoJ2dhbWVTY2VuZVJvb3QvcGFnZVZpZXcvZWZmZWN0TGF5ZXInLCB0aGlzLm5vZGUpO1xyXG4gICAgICAgIGxpZ2h0Tm9kZS5zZXRQb3NpdGlvbihjb250ZW50Tm9kZS5wb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIGV2ZW50XHJcblxyXG4gICAgb25QYWdlU2xpZGUodmlldzogY2MuUGFnZVZpZXcpIHtcclxuXHJcbiAgICAgICAgbGV0IHBhZ2UgPSB2aWV3LmdldEN1cnJlbnRQYWdlSW5kZXgoKTtcclxuICAgICAgICBsZXQgcGFnZXMgPSB2aWV3LmdldFBhZ2VzKCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgcGFnZXNbaV0uZ2V0Q29tcG9uZW50KEdhbWVTY2VuZUNvbnRyb2wpLm9uU2xpZGVMZWF2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWdlc1twYWdlXS5nZXRDb21wb25lbnQoR2FtZVNjZW5lQ29udHJvbCkub25TbGlkZVNob3coKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25Ub29sQ2xpY2soZTogY2MuRXZlbnQuRXZlbnRUb3VjaCkge1xyXG4gICAgICAgIGxldCBjdXJQYWdlID0gdGhpcy5fcGFnZVZpZXcuZ2V0Q3VycmVudFBhZ2VJbmRleCgpO1xyXG4gICAgICAgIHRoaXMuX3BhZ2VWaWV3LmdldFBhZ2VzKClbY3VyUGFnZV0uZ2V0Q29tcG9uZW50KEdhbWVTY2VuZUNvbnRyb2wpLm9uVG9vbENsaWNrKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uT2JqVW5sb2NrKG9iaklkOiBudW1iZXIpIHtcclxuXHJcbiAgICAgICAgbGV0IG9iaiA9IHRNZ3IuZ2V0Q29uZmlnKFRhYmxlTmFtZS5HQU1FX1NDRU5FX09CSiwgb2JqSWQpIGFzIEdhbWVTY2VuZU9ialRhYmxlO1xyXG5cclxuICAgICAgICBsZXQgc2NlbmVMaXN0ID0gR2FtZVNjZW5lT2JqVGFibGVNZ3IuaW5zLmdldEJ5U2NlbmUob2JqLlNjZW5lSWQpO1xyXG5cclxuICAgICAgICBsZXQgYWxsVW5sb2NrOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjZW5lTGlzdC5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAvL+WIpOaWreatpOWcuuaZr+WGheeahOavj+S4queJqeS7tuaYr+WQpuino+mUgVxyXG4gICAgICAgICAgICBpZiAoIVNhdmVEYXRhTWFuYWdlci5pbnMucnVudGltZURhdGEudW5sb2NrT2JqLmluY2x1ZGVzKHNjZW5lTGlzdFtpXS5JRCkpIHtcclxuICAgICAgICAgICAgICAgIGFsbFVubG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbGxVbmxvY2sgJiYgb2JqLlNjZW5lSWQgPCAzKSB7XHJcbiAgICAgICAgICAgIC8v5re75Yqg5LiL5LiA5Zy65pmvXHJcbiAgICAgICAgICAgIFNhdmVEYXRhTWFuYWdlci5pbnMucnVudGltZURhdGEuY3VyR2FtZVNjZW5lKys7XHJcbiAgICAgICAgICAgIFNhdmVEYXRhTWFuYWdlci5pbnMuc2F2ZURhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRTY2VuZShvYmouU2NlbmVJZCArIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9wYWdlVmlldy5zZXRDdXJyZW50UGFnZUluZGV4KG9iai5TY2VuZUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2NlbmVFZmZlY3RBdWRpb0lkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgICBwcml2YXRlIG9uU291bmRDb25maWdDaGFuZ2UobXV0ZTogYm9vbGVhbikge1xyXG5cclxuICAgICAgICBsZXQgc2NlbmVFZmZlY3QgPSBjYy5yZXNvdXJjZXMuZ2V0KCdzb3VuZEVmZmVjdC9TY2VuZScsIGNjLkF1ZGlvQ2xpcCkgYXMgY2MuQXVkaW9DbGlwO1xyXG5cclxuICAgICAgICBpZiAoIW11dGUpIHtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLmlucy5wbGF5TXVzaWMoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmVFZmZlY3RBdWRpb0lkID0gY2MuYXVkaW9FbmdpbmUucGxheUVmZmVjdChzY2VuZUVmZmVjdCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIuaW5zLnN0b3BNdXNpYygpO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZUVmZmVjdEF1ZGlvSWQgPiAtMSAmJiBjYy5hdWRpb0VuZ2luZS5zdG9wRWZmZWN0KHRoaXMuX3NjZW5lRWZmZWN0QXVkaW9JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBwdWJsaWNcclxuXHJcbiAgICBvbkd1aWRlQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKCdtYXNrJykuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgR3VpZGVNYW5hZ2VyLmlucy5oaWRlVGFsaygpO1xyXG4gICAgICAgIEd1aWRlTWFuYWdlci5pbnMuaGlkZUhhbmQoKTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZURhdGFNYW5hZ2VyLmlucy5ydW50aW1lRGF0YS5ndWlkZVN0ZXArKztcclxuICAgICAgICAvLyBTYXZlRGF0YU1hbmFnZXIuaW5zLnNhdmVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIHByaXZhdGVcclxuXHJcbiAgICBwcml2YXRlIGFkZFNjZW5lKHNjZW5lSWQ6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBidWlkU2NlbmUgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLl9idWlsZFNjZW5lUHJlZmFiKTtcclxuICAgICAgICBidWlkU2NlbmUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBidWlkU2NlbmUuZ2V0Q29tcG9uZW50KEdhbWVTY2VuZUNvbnRyb2wpLmluaXQoc2NlbmVJZCAtIDEsIHRoaXMuX2NoYXJOb2RlLCB0aGlzLl90aXBOb2RlLCB0aGlzLl9wYXJHcmVlbk5vZGUsIHRoaXMuX2JnTGlnaHROb2RlLCB0aGlzLl91bmxvY2tTcGluZU5vZGUpO1xyXG4gICAgICAgIGJ1aWRTY2VuZS5nZXRDb21wb25lbnQoR2FtZVNjZW5lQ29udHJvbCkubG9hZFNjZW5lKHNjZW5lSWQpO1xyXG4gICAgICAgIHRoaXMuX3BhZ2VWaWV3LmFkZFBhZ2UoYnVpZFNjZW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrR3VpZGUoKSB7XHJcbiAgICAgICAgLy/lvJXlr7xcclxuICAgICAgICBpZiAoU2F2ZURhdGFNYW5hZ2VyLmlucy5ydW50aW1lRGF0YS5ndWlkZVN0ZXAgPT0gMCkge1xyXG4gICAgICAgICAgICBsZXQgd3BvcyA9IHRoaXMuX2NoYXJOb2RlLmNvbnZlcnRUb1dvcmxkU3BhY2VBUihjYy52MigwLCAzODApKTtcclxuICAgICAgICAgICAgbGV0IHR4dCA9ICh0TWdyLmdldENvbmZpZyhUYWJsZU5hbWUuR0FNRV9QTEFZLCAyNSkgYXMgR2FtZVBsYXlUYWJsZSkuQ29tbWVudDtcclxuICAgICAgICAgICAgR3VpZGVNYW5hZ2VyLmlucy5zaG93VGFsayh3cG9zLCB0eHQpO1xyXG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlT25jZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBHdWlkZU1hbmFnZXIuaW5zLmhpZGVUYWxrKCk7XHJcbiAgICAgICAgICAgICAgICBTYXZlRGF0YU1hbmFnZXIuaW5zLnJ1bnRpbWVEYXRhLmd1aWRlU3RlcCsrO1xyXG4gICAgICAgICAgICAgICAgU2F2ZURhdGFNYW5hZ2VyLmlucy5zYXZlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0d1aWRlKCk7XHJcbiAgICAgICAgICAgIH0sIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChTYXZlRGF0YU1hbmFnZXIuaW5zLnJ1bnRpbWVEYXRhLmd1aWRlU3RlcCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGxldCB3cG9zID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKCdVSVRpdGxlJykuZ2V0Q2hpbGRCeU5hbWUoJ2JvdHRvbScpLmNvbnZlcnRUb1dvcmxkU3BhY2VBUihjYy52MigwLCAxMjApKTtcclxuICAgICAgICAgICAgR3VpZGVNYW5hZ2VyLmlucy5zaG93SGFuZCh3cG9zLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHdwb3MgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoJ1VJVGl0bGUnKS5nZXRDaGlsZEJ5TmFtZSgnYm90dG9tJykuY29udmVydFRvV29ybGRTcGFjZUFSKGNjLnYyKDAsIDEwMCkpO1xyXG4gICAgICAgICAgICB3cG9zLnkgKz0gMjAwO1xyXG4gICAgICAgICAgICBsZXQgdHh0ID0gKHRNZ3IuZ2V0Q29uZmlnKFRhYmxlTmFtZS5HQU1FX1BMQVksIDI2KSBhcyBHYW1lUGxheVRhYmxlKS5Db21tZW50O1xyXG4gICAgICAgICAgICB0eHQgPSB0eHQucmVwbGFjZSgnezB9JywgKHRNZ3IuZ2V0Q29uZmlnKFRhYmxlTmFtZS5HQU1FX1BMQVksIFNhdmVEYXRhTWFuYWdlci5pbnMucnVudGltZURhdGEuZ2VuZGVyID09IDAgPyAyNCA6IDIzKSBhcyBHYW1lUGxheVRhYmxlKS5Db21tZW50KTtcclxuICAgICAgICAgICAgR3VpZGVNYW5hZ2VyLmlucy5zaG93VGFsayh3cG9zLCB0eHQpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGJ0biA9IGNjLmZpbmQoJ1VJVGl0bGUvYm90dG9tL25hdmlCYXIvYnRuTGF5ZXIvYnRuMycsIHRoaXMubm9kZSk7XHJcbiAgICAgICAgICAgIHdwb3MgPSBidG4uY29udmVydFRvV29ybGRTcGFjZUFSKGNjLlZlYzIuWkVSTyk7XHJcbiAgICAgICAgICAgIFVJTWFuYWdlci5pbnMud2lkZ2V0TGF5ZXIuY29udmVydFRvTm9kZVNwYWNlQVIod3Bvcywgd3Bvcyk7XHJcbiAgICAgICAgICAgIGxldCBuZXdCdG4gPSBjYy5pbnN0YW50aWF0ZShidG4pO1xyXG4gICAgICAgICAgICBuZXdCdG4uc2V0UG9zaXRpb24od3Bvcyk7XHJcbiAgICAgICAgICAgIG5ld0J0bi5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5jbGlja0V2ZW50c1swXS5jdXN0b21FdmVudERhdGEgPSAnOTknO1xyXG4gICAgICAgICAgICBVSU1hbmFnZXIuaW5zLndpZGdldExheWVyLmFkZENoaWxkKG5ld0J0bik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoJ21hc2snKS5hY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIl19