"use strict";
cc._RF.push(module, 'b0432BA295DjIOcuitdGKO1', 'GameManager');
// Script/GameManager.ts

"use strict";
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 _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
var GameManager = /** @class */ (function (_super) {
    __extends(GameManager, _super);
    function GameManager() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.kuang1_Prefab = null;
        _this.kuang2_Prefab = null;
        _this.Block = null;
        _this.TimeLabel = null;
        _this.LevelLabel = null;
        _this.Guide = null;
        _this.progress = null; //-95 640
        _this.Top = null; //80 -725
        return _this;
    }
    GameManager.prototype.onLoad = function () {
        this.guide_State = false;
        this.level = cc.fx.GameConfig.GM_INFO.level;
        this.guide_Level = cc.fx.GameConfig.GM_INFO.guide_Level;
        this.LevelLabel.string = (this.level + 1) + "";
        this.progress.fillRange = cc.fx.GameConfig.GM_INFO.score / 24;
        if (this.progress.fillRange >= 0.2)
            this.Top.getChildByName("star1").active = true;
        if (this.progress.fillRange >= 0.5)
            this.Top.getChildByName("star2").active = true;
        if (this.progress.fillRange >= 0.8)
            this.Top.getChildByName("star3").active = true;
        if ((this.level == 0 && this.guide_Level == 4) ||
            (this.level == 4 && this.guide_Level == 3) ||
            (this.level == 8 && this.guide_Level == 1)) {
            this.openGuide(false);
        }
        else {
            this.LevelLabel.node.active = true;
            this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "第        轮";
            this.init();
        }
    };
    GameManager.prototype.init = function () {
        var _this = this;
        if (this.level == 4 && this.guide_Level == 2) {
            cc.fx.GameConfig.GM_INFO.guide_Level -= 1;
            this.guide_State = true;
            this.LevelLabel.node.active = false;
            this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练   习";
            //    this.node.getChildByName("tip").active = true;
        }
        this.result = 0;
        this.countTime = 6;
        this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime);
        this.createBlock();
        setTimeout(function () {
            _this.createCustom();
        }, 1000);
    };
    GameManager.prototype.openGuide = function (type) {
        this.Guide.active = true;
        this.guide_State = true;
        // this.node.getChildByName("tip").active = true;
        if (!type)
            cc.fx.GameConfig.GM_INFO.guide_Level -= 1;
        this.Guide.getChildByName("one").active = false;
        this.Guide.getChildByName("two").active = false;
        this.Guide.getChildByName("three").active = false;
        this.Guide.getChildByName("four").active = false;
        var name = "one";
        if (this.level == 0) {
            name = "one";
            this.LevelLabel.node.active = false;
            this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练   习";
        }
        else if (this.level == 4) {
            name = "two";
            this.LevelLabel.node.active = false;
            this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练   习";
        }
        else if (this.level == 8) {
            name = "three";
            this.guide_State = false;
        }
        if (type)
            name = "four";
        this.Guide.getChildByName(name).active = true;
        cc.tween(this.Guide.getChildByName(name))
            .to(0.5, { opacity: 255 })
            .start();
    };
    GameManager.prototype.closeGuide = function () {
        if (this.Guide.getChildByName("four").active) {
            this.Guide.active = false;
            cc.director.loadScene("GameScene");
        }
        else {
            this.Guide.active = false;
            this.init();
        }
        // 
    };
    //创建方块地图
    GameManager.prototype.createBlock = function () {
        this.outside_Array = [];
        this.inside_Array = [];
        this.outside = [];
        this.inside = [];
        for (var i = 0; i < 16; i++) {
            var block = cc.instantiate(this.kuang1_Prefab);
            block.getComponent("Block").setId(i);
            block.parent = this.Block.getChildByName("outside");
            var x = void 0, y = 0;
            if (i < 5) {
                x = -284 + 142 * i;
                y = 259;
            }
            else if (i < 9) {
                x = 284;
                y = 259 - (i - 4) * 142;
            }
            else if (i < 13) {
                x = 284 - (i - 8) * 142;
                y = -309;
            }
            else if (i < 16) {
                x = -284;
                y = -309 + (i - 12) * 142;
            }
            block.setPosition(x, y);
            this.outside_Array.push(block);
        }
        for (var j = 3; j < 12; j++) {
            var block = cc.instantiate(this.kuang2_Prefab);
            block.getComponent("Block").setId(j);
            block.parent = this.Block.getChildByName("inside");
            block.setPosition(-132 + j % 3 * 132, 239 - parseInt(j / 3 + "") * 132);
            this.inside_Array.push(block);
        }
    };
    //创建关卡
    GameManager.prototype.createCustom = function () {
        //初始化关卡配置数据
        this.level = cc.fx.GameConfig.GM_INFO.level;
        this.LevelLabel.string = (this.level + 1) + "";
        this.config = cc.fx.GameConfig.LEVEL_INFO[this.level];
        if (this.level == 4 && this.guide_Level == 2) {
            this.config = cc.fx.GameConfig.LEVEL_INFO[6];
        }
        this.pass = false;
        //放正确答案和错误答案
        this.answerInsideTexture = Math.floor(Math.random() * 14 + 1);
        //内圈错误答案随机
        this.insideTexture = [];
        this.outsideTexture = [];
        for (var k = 0; k < 14; k++) {
            if ((k + 1) != this.answerInsideTexture) {
                this.insideTexture.push(k + 1);
            }
        }
        cc.fx.GameTool.shuffleArray(this.insideTexture);
        this.answerOutsideTexture = this.insideTexture[11];
        //分配正确答案和错误答案位置
        if (this.config["inside"] > 0) {
            this.result += 1;
            var random = Math.random() * 100;
            var arrayTemp = [0, 1, 2, 3, 5, 6, 7, 8];
            if (this.config["insideType"] == 1) {
                if (random >= 50)
                    this.inside = [0, 1, 2];
                else
                    this.inside = [6, 7, 8];
            }
            else if (this.config["insideType"] == 2) {
                if (random >= 50)
                    this.inside = [0, 3, 6];
                else
                    this.inside = [2, 5, 8];
            }
            else {
                this.inside = cc.fx.GameTool.shuffleArray(arrayTemp);
                this.inside.splice(this.config["inside"], this.inside.length - this.config["inside"]);
            }
            this.answerInside = this.inside[Math.floor(Math.random() * this.inside.length)];
        }
        //分配外圈正确答案和错误答案位置
        if (this.config["outside"] > 0) {
            this.result += 1;
            if (this.config["outsideType"] == 1) {
                this.outside = [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15];
            }
            else if (this.config["outsideType"] == 2) {
                this.outside = [0, 4, 8, 12];
            }
            else {
                this.outside = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
            }
            cc.fx.GameTool.shuffleArray(this.outside);
            this.answerOutside = this.outside[Math.floor(Math.random() * this.outside.length)];
            if (this.config["outside"] == 2) {
                for (var j = 0; j < 15; j++) {
                    this.outsideTexture.push(this.insideTexture[3]);
                }
            }
            else if (this.config["outside"] == 3) {
                this.outsideTexture = [this.insideTexture[5], this.insideTexture[6], this.insideTexture[5], this.insideTexture[6], this.insideTexture[5]];
                for (var j = 0; j < 10; j++) {
                    var randomTemp = Math.random() * 100;
                    if (randomTemp > 50)
                        this.outsideTexture.push(this.insideTexture[5]);
                    else
                        this.outsideTexture.push(this.insideTexture[6]);
                }
                cc.fx.GameTool.shuffleArray(this.outsideTexture);
            }
            else if (this.config["outside"] == 4) {
                this.outsideTexture = [this.insideTexture[2], this.insideTexture[4], this.insideTexture[6],
                    this.insideTexture[2], this.insideTexture[4], this.insideTexture[6]];
                for (var j = 0; j < 9; j++) {
                    var randomTemp = Math.random() * 100;
                    if (randomTemp < 33)
                        this.outsideTexture.push(this.insideTexture[2]);
                    else if (randomTemp < 66)
                        this.outsideTexture.push(this.insideTexture[4]);
                    else
                        this.outsideTexture.push(this.insideTexture[6]);
                }
                cc.fx.GameTool.shuffleArray(this.outsideTexture);
            }
        }
        this.runBlock();
    };
    //块执行图片出现消失动画
    GameManager.prototype.runBlock = function () {
        var _this = this;
        if (this.config["inside"] > 0) {
            this.inside_Array[4].getComponent("Block").answerShow(this.answerInsideTexture);
            setTimeout(function () {
                var insideNumber = 0;
                for (var i = 0; i < _this.inside.length; i++) {
                    if (_this.inside[i] == _this.answerInside)
                        _this.inside_Array[_this.inside[i]].getComponent("Block").show(true, true, _this.answerInsideTexture);
                    else {
                        _this.inside_Array[_this.inside[i]].getComponent("Block").show(false, true, _this.insideTexture[insideNumber]);
                        insideNumber += 1;
                    }
                }
            }, this.config["showTime"] * 1000);
        }
        if (this.config["outside"] > 0) {
            this.outside_Array[this.answerOutside].getComponent("Block").answerShow(this.answerOutsideTexture);
            if (this.config["outside"] > 1) {
                var outsideNumber = 0;
                for (var i = 0; i < this.outside_Array.length; i++) {
                    if (i == this.answerOutside)
                        this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture);
                    else {
                        this.outside_Array[i].getComponent("Block").show(false, false, this.outsideTexture[outsideNumber]);
                        outsideNumber += 1;
                    }
                }
            }
            setTimeout(function () {
                var outsideNumber = 0;
                for (var i = 0; i < _this.outside_Array.length; i++) {
                    if (i == _this.answerOutside)
                        _this.outside_Array[i].getComponent("Block").lockShow(true, false);
                    else {
                        _this.outside_Array[i].getComponent("Block").lockShow(false, false);
                        outsideNumber += 1;
                    }
                }
            }, this.config["showTime"] * 1000);
        }
        setTimeout(function () {
            if (!_this.guide_State) {
                _this.startTime = cc.fx.GameTool.getTime();
                _this.schedule(_this.updateCountDownTime, 1);
            }
        }, this.config["showTime"] * 1000);
    };
    //正确
    GameManager.prototype.openResult = function (result) {
        var _this = this;
        this.result -= 1;
        //非引导状态
        if (!this.guide_State) {
            this.flipBlock(result);
            if (this.result == 0) {
                this.unschedule(this.updateCountDownTime);
                setTimeout(function () {
                    _this.setData(result);
                }, 1000);
                setTimeout(function () {
                    if (cc.fx.GameConfig.GM_INFO.level < cc.fx.GameConfig.LEVEL_INFO.length - 1) {
                        cc.fx.GameConfig.GM_INFO.level += 1;
                        cc.director.loadScene("GameScene");
                    }
                }, 2000);
            }
        }
        //引导状态下
        else {
            if (result.result) {
                this.flipBlock(result);
                setTimeout(function () {
                    if (_this.level == 4 && cc.fx.GameConfig.GM_INFO.guide_Level == 2) {
                        cc.director.loadScene("GameScene");
                    }
                    else
                        _this.openGuide(true);
                }, 1000);
            }
        }
    };
    //翻转形状变成问号
    GameManager.prototype.flipBlock = function (result) {
        if (result.type) {
            var pos = this.changePos(true, result.id);
            if (!this.guide_State)
                cc.fx.GameConfig.CLICK_DATA.userChoiceInner.push(pos.x, pos.y);
            for (var i = 0; i < this.inside.length; i++) {
                if (this.inside[i] == this.answerInside) {
                    this.inside_Array[4].getChildByName("texture").active = true;
                    this.inside_Array[4].getChildByName("texture").opacity = 255;
                    this.inside_Array[this.inside[i]].getChildByName("yes").active = true;
                    var pos_1 = this.changePos(true, this.inside_Array[this.inside[i]].getComponent("Block")._idNumber);
                    if (!this.guide_State)
                        cc.fx.GameConfig.CLICK_DATA.rightChoiceInner.push(pos_1.x, pos_1.y);
                }
                this.inside_Array[this.inside[i]].getComponent("Block")._touch = false;
            }
            if (result.result) {
                this.addScore();
            }
        }
        else {
            var pos = this.changePos(false, result.id);
            if (!this.guide_State)
                cc.fx.GameConfig.CLICK_DATA.userChoiceOuter.push(pos.x, pos.y);
            for (var i = 0; i < this.outside_Array.length; i++) {
                this.outside_Array[i].getComponent("Block").lockHide();
                this.outside_Array[i].getChildByName("texture").active = true;
                if (i == this.answerOutside) {
                    this.outside_Array[i].getChildByName("yes").active = true;
                    this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture);
                    var pos_2 = this.changePos(false, this.outside_Array[i].getComponent("Block")._idNumber);
                    if (!this.guide_State)
                        cc.fx.GameConfig.CLICK_DATA.rightChoiceOuter.push(pos_2.x, pos_2.y);
                }
            }
            if (result.result) {
                this.addScore();
            }
        }
    };
    //加分 加进度条，加星星
    GameManager.prototype.addScore = function () {
        var _this = this;
        if (!this.guide_State) {
            cc.fx.GameConfig.GM_INFO.score += 1;
            var progress = cc.fx.GameConfig.GM_INFO.score / 24;
            if (progress >= 1)
                progress = 1;
            cc.tween(this.progress)
                .to(0.2, { fillRange: progress })
                .call(function () {
                if (_this.Top.getChildByName("star1").active == false && progress >= 0.2) {
                    _this.Top.getChildByName("star1").active = true;
                    _this.Top.getChildByName("star1").opacity = 0;
                    _this.Top.getChildByName("star1").scale = 0.1;
                    cc.tween(_this.Top.getChildByName("star1"))
                        .to(0.3, { opacity: 255, scale: 1.1 })
                        .to(0.1, { opacity: 255, scale: 0.9 })
                        .to(0.1, { opacity: 255, scale: 1 })
                        .start();
                }
                if (_this.Top.getChildByName("star2").active == false && progress >= 0.5) {
                    _this.Top.getChildByName("star2").active = true;
                    _this.Top.getChildByName("star2").opacity = 0;
                    _this.Top.getChildByName("star2").scale = 0.1;
                    cc.tween(_this.Top.getChildByName("star2"))
                        .to(0.3, { opacity: 255, scale: 1.1 })
                        .to(0.1, { opacity: 255, scale: 0.9 })
                        .to(0.1, { opacity: 255, scale: 1 })
                        .start();
                }
                if (_this.Top.getChildByName("star3").active == false && progress >= 0.8) {
                    _this.Top.getChildByName("star3").active = true;
                    _this.Top.getChildByName("star3").opacity = 0;
                    _this.Top.getChildByName("star3").scale = 0.1;
                    cc.tween(_this.Top.getChildByName("star3"))
                        .to(0.3, { opacity: 255, scale: 1.1 })
                        .to(0.1, { opacity: 255, scale: 0.9 })
                        .to(0.1, { opacity: 255, scale: 1 })
                        .start();
                }
            })
                .start();
        }
    };
    //返回首页
    GameManager.prototype.backScene = function () {
        cc.director.loadScene("LoadScene");
    };
    //重新开始
    GameManager.prototype.reStart = function () {
    };
    //获取时间戳
    GameManager.prototype.getTime = function () {
        var timestamp = new Date().getTime();
        return timestamp;
    };
    //获胜
    GameManager.prototype.passLevel = function () {
    };
    //失败
    GameManager.prototype.loseLevel = function (type) {
    };
    GameManager.prototype.changePos = function (type, num) {
        var x = 0;
        var y = 0;
        //内部
        if (type) {
            y = parseInt(num / 3 + "");
            x = num % 3;
        }
        //外部
        else {
            if (num < 5) {
                y = 0;
                x = num;
            }
            else if (num < 9) {
                x = 5;
                y = num - 4;
            }
            else if (num < 13) {
                y = 4;
                x = 12 - num;
            }
            else if (num < 16) {
                x = 0;
                y = 16 - num;
            }
        }
        var jg = cc.v2(x, y);
        return jg;
    };
    //如果是倒计时 调用此方法
    GameManager.prototype.updateCountDownTime = function () {
        if (this.countTime > 0) {
            this.countTime -= 1;
            // this.TimeLabel.string =this.countTime + "";
            this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime);
            if (this.countTime <= 0) {
                this.unschedule(this.updateCountDownTime);
                this.node.getChildByName("Mask").active = true;
                var data = { "result": false, "type": true, "id": null };
                if (this.config["inside"] > 0)
                    cc.fx.Notifications.emit("result", data);
                var data2 = { "result": false, "type": false, "id": null };
                if (this.config["outside"] > 0)
                    cc.fx.Notifications.emit("result", data2);
            }
        }
    };
    //上传每次操作数据
    GameManager.prototype.setData = function (result) {
        cc.fx.GameConfig.CLICK_DATA.success = result.result;
        cc.fx.GameConfig.CLICK_DATA.round = (cc.fx.GameConfig.GM_INFO.level + 1);
        cc.fx.GameConfig.CLICK_DATA.duration = new Date().getTime() - this.startTime - 1000;
        cc.fx.GameTool.setGameData();
    };
    GameManager.prototype.onEnable = function () {
        cc.fx.Notifications.on("result", this.openResult, this);
    };
    GameManager.prototype.onDisable = function () {
        cc.fx.Notifications.off("result", this.openResult, this);
    };
    GameManager.prototype.update = function (dt) {
    };
    __decorate([
        property(cc.Prefab)
    ], GameManager.prototype, "kuang1_Prefab", void 0);
    __decorate([
        property(cc.Prefab)
    ], GameManager.prototype, "kuang2_Prefab", void 0);
    __decorate([
        property(cc.Node)
    ], GameManager.prototype, "Block", void 0);
    __decorate([
        property(cc.Label)
    ], GameManager.prototype, "TimeLabel", void 0);
    __decorate([
        property(cc.Label)
    ], GameManager.prototype, "LevelLabel", void 0);
    __decorate([
        property(cc.Node)
    ], GameManager.prototype, "Guide", void 0);
    __decorate([
        property(cc.Sprite)
    ], GameManager.prototype, "progress", void 0);
    __decorate([
        property(cc.Node)
    ], GameManager.prototype, "Top", void 0);
    GameManager = __decorate([
        ccclass
    ], GameManager);
    return GameManager;
}(cc.Component));
exports.default = GameManager;

cc._RF.pop();