// 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

import GameData from './GameData';
import { GameTool } from './tool/GameTool';
import { Notification } from './tool/Notification';

const {ccclass, property} = cc._decorator;

@ccclass
export default class GameManager extends cc.Component {

    @property(cc.Camera)
    Camera: cc.Camera = null;

    @property(cc.Node)
    topUI: cc.Node = null;

    @property(cc.Node)
    Player: cc.Node = null;

    @property(cc.Node)
    Ground: cc.Node = null;

    @property(cc.Node)
    Xin: cc.Node = null;

    @property(cc.Label)
    time: cc.Label = null;

    @property(cc.Node)
    GameOver: cc.Node = null;

    @property(cc.Node)
    Tip: cc.Node = null;

    @property([cc.Prefab])
    blockPrefab : Array<cc.Prefab> = [];

    

    round: number;      //回合
    level: number;      //回合
    static _instance: any;
    blockArray: any;
    cameraMove:boolean
    countHeight:number;
    countTime: number;
    over: boolean;
    begin: boolean;
    interfere: boolean;
    oldSpeed: number;      //上一回合速度
    score: number;      //总得分
    difficultyMax:number; //最高难度系数
    difficultyArray:number;
    drop: number;      //摄像机落差
    guide: number;     //记录引导步骤
    Air: any;
    Air2: any;
    block: cc.Node;
    // LIFE-CYCLE CALLBACKS:


    onLoad () {
        cc.game.setFrameRate(61);
        // 示例使用
        var manager = cc.director.getCollisionManager();
        manager.enabled = true;
        // manager.enabledDebugDraw = true;
        GameManager._instance = this;
        // GameData._instance.GM_INFO.probation = false;
        this.Air = [];
        this.Air2 = [];
    }

    protected onEnable(): void {
        Notification.on("createBlock",this.createBlock,this);
        Notification.on("addScore",this.addScore,this);
        Notification.on("createCrackBlock",this.createCrackBlock,this);
        Notification.on("showGround",this.showGround,this);
        Notification.on("death",this.getDeath,this);
        Notification.on("jump",this.jump,this);
        Notification.on("setData",this.setData,this);
        

    }

    protected onDestroy(): void {
        Notification.off("createBlock",this.createBlock);
        Notification.off("addScore",this.addScore);
        Notification.off("createCrackBlock",this.createCrackBlock);
        Notification.off("death",this.getDeath);
        Notification.off("jump",this.jump);
        Notification.off("showGround",this.showGround);
        Notification.off("setData",this.setData);
    }

    //根据是否全面屏，做独立适配方面
    fit(){
        this.node.getChildByName("bg2").y = -2167.675;
        var jg = this.setFit();
        if(!jg){
            this.node.getChildByName("bg2").y = -2100;
            this.topUI.y = 660;
        }

    }
    //判断全面屏
    getSetScreenResolutionFlag () {
        let size = cc.winSize;
        let width = size.width;
        let height = size.height;
        if ((height / width) > (16.2 / 9)) return false;
        return true;
    }
    //判断全面屏适配
    setFit () {
        let flag = this.getSetScreenResolutionFlag();
        if (flag) {
        } else {
        }
        return flag;
    }

    init(){
        this.drop = this.topUI.y - this.Camera.node.y;
        this.score = 0;
        this.oldSpeed = 10;
        this.guide = -1;
        this.begin = true;
        this.over = false;
        this.interfere = false;
        this.round = 0;
        this.level = 0;
        GameData._instance.GM_INFO.levelMax = 1;
        GameData._instance.GM_INFO.difficultyMax = 1;
        GameData._instance.GM_INFO.life = 3;
        this.blockArray = [];
        this.difficultyArray = 0;
        this.cameraMove = false;
        this.countTime = 180;
        this.topUI.getChildByName("xin1").active = true;
        this.topUI.getChildByName("xin2").active = true;
        this.topUI.getChildByName("xin3").active = true;
        this.topUI.getChildByName("star1").active = false;
        this.topUI.getChildByName("star2").active = false;
        this.topUI.getChildByName("star3").active = false;
        GameData._instance.LEVEL_init();
        this.schedule(this.updateCountDownTime,1);
    }

    start () {
        // this.node.on(cc.Node.EventType.TOUCH_START, this.jump, this);
        this.fit();
        this.init();
        // GameData._instance.GM_INFO.probation = false;
        if(GameData._instance.GM_INFO.probation){
            this.Player.getComponent("Player").jumpPause = true;
            let tip = this.Tip.getChildByName("tip");
            this.tipShow(tip,-1,true);

        } 
        else{
            this.node.getChildByName("Begin").opacity = 0;
            this.node.getChildByName("Begin").scale = 2;
            if(this.node.getChildByName("Begin")){
                cc.tween(this.node.getChildByName("Begin"))
                .to(0.5,{opacity:255,scale:1})
                .delay(0.5)
                .to(0.5,{opacity:0,scale:0})
                .call(() =>{
                    this.startGame();
                })
                .start();
            }
            else{
                setTimeout(() => {
                    this.startGame();
                }, 1000);
            }
       
        } 
    }

    //开启引导
    startGuide(type,revive){   //type为第几步
        this.guide = type;
        console.log("startGuide",type);
        if(type == 0){
            this.careteGuideBlock(1);
        }
        else if(type == 2){
            let block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length-1];
            cc.tween(block)
            .to(0.7,{x:0})
            .start();
            this.tipHide("tip2",3,false);
        }
        else if(type == 3){
            if(revive == true){
                this.round += 1;
                this.careteGuideBlock(3);
            }
            else{
                let tip = this.Tip.getChildByName("tip3");
                this.tipShow(tip,type,false);
                setTimeout(() => {
                    this.tipHide("tip3",null,false);
                    this.round += 1;
                     this.careteGuideBlock(3);
                }, 3000);
            }

           
        }
        else if(type == 4){
            this.round += 1;
            this.careteGuideBlock(4);
        }
        else if(type == 5){
            this.round += 1;
            this.careteGuideBlock(5);
        }
        else if(type == 6){
            let block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length-1];
            cc.tween(block)
            .to(0.7,{x:0})
            .start();
            this.tipHide("tip4",7,revive);
        }
        else if(type == 7){
            if(revive == true){
                this.round += 1;
                this.careteGuideBlock(7);
            }
            else{
                let tip = this.Tip.getChildByName("tip5");
                this.tipShow(tip,type,false);
                setTimeout(() => {
                    this.tipHide("tip5",null,revive);
                    this.round += 1;
                     this.careteGuideBlock(7);
                }, 2000);
            }

        }
        else if(type == 8){
            this.round += 1;
            this.careteGuideBlock(8);
        }
        else if(type == 9){
            this.Player.getComponent("Player").jumpPause = true;
            let tip = this.Tip.getChildByName("tip6");
            setTimeout(() => {
                this.tipShow(tip,type,false);
            }, 1000);
     
        }
    }
    tipShow(tipName,type,showNext){
        let tip = tipName;
        let left = this.Tip.getChildByName("left");
        let right = this.Tip.getChildByName("right");
        left.width = 0; right.width = 0;tip.opacity = 0;
        cc.tween(left)
        .to(0.25,{width:348})
        .start();
        cc.tween(right)
        .to(0.25,{width:348})
        .start();
        cc.tween(tip)
        .delay(0.15)
        .to(0.15,{opacity:255})
        .call(() =>{
            this.guide = type;
            if(type == 5) this.guide = 6;
            if(type == 5 || type == 1 ) this.Player.getComponent("Player").jumpPause = false;
        })
        .start();
        if(showNext == true){
            this.Tip.getChildByName("btn_next").active = true;
            this.Tip.getChildByName("btn_jump").active = true;
            cc.tween(this.Tip.getChildByName("btn_next"))
            .delay(0.5)
            .to(0.2,{opacity:255})
            .start();
            cc.tween(this.Tip.getChildByName("btn_jump"))
            .delay(0.5)
            .to(0.2,{opacity:255})
            .start();
        }
        if(tip.name == "tip6"){
            this.Tip.getChildByName("btn_start").active = true;
            cc.tween(this.Tip.getChildByName("btn_start"))
            .delay(1)
            .to(0.2,{opacity:255})
            .start();
        }
    }
    //隐藏
    tipHide(tipName,num,revive){
        let tip = this.Tip.getChildByName(tipName);
        let left = this.Tip.getChildByName("left");
        let right = this.Tip.getChildByName("right");
        cc.tween(left)
        .delay(0.1)
        .to(0.25,{width:0})
        .start();
        cc.tween(right)
        .delay(0.1)
        .to(0.25,{width:0})
        .start();
        cc.tween(tip)
        .to(0.12,{opacity:0})
        .delay(1.5)
        .call(() =>{
            if(tip.name != "tip3" && tipName != "tip5"){
                this.Player.getComponent("Player").jumpPause = true;
            }
            if(num != null){
                this.startGuide(num,revive);
            }
                
        })
        .start();
    }

    careteGuideBlock(type){
        this.Ground.active = false;
        let tip = this.Tip.getChildByName("tip2");
        if(type == 5){
            tip = this.Tip.getChildByName("tip4");
        }
        this.Player.getComponent("Player").jumpPause = true;
        var block = cc.instantiate(this.blockPrefab[13]);
        let height = this.Player.getComponent("Player").basicHeight + GameData._instance.GM_INFO.blockMin;
        if(type > 4){
            height += block.height + GameData._instance.GM_INFO.blockMax;
            GameData._instance.CLICK_DATA.height = true;
        }
        block.setPosition(cc.v2(this.round%2==0?480:-480,height));
        block.parent = this.node.getChildByName("Block");
        let num = 150;
        let time =3;
        if(type == 1 || type == 5){
            num = this.round%2==0?num:-num;
        }
        else if(type == 3 || type == 4 || type ==7 || type == 8 || type == 9){
            this.Player.getComponent("Player").jumpPause = false;
            num = -block.x;
            time = 7;
        }
        cc.tween(block)     
        .to(time,{x:num})
        .call(() =>{
            if(type == 1 || type == 5){
                if(type == 1) this.Player.getComponent("Player").jumpPause = true;
                
                this.tipShow(tip,type,false);
            }

        })
        .start();
    }

    showGround(tempY){
        setTimeout(() => {
            this.Ground.active = true;
            this.Ground.y = tempY;
        }, 500);
    }
    guideStart(){
        this.tipHide("tip6",null,false);
        this.Tip.getChildByName("btn_next").active = false;
        this.Tip.getChildByName("btn_jump").active = false;
        this.Tip.getChildByName("btn_start").active = false;
        GameData._instance.GM_INFO.probation = false;
        this.destroyBlock(false);
        this.onDestroy();
        
        cc.director.loadScene("GameScene");
    }
    //下一步
    guideNext(){
        if(this.guide == -1){
            this.tipHide("tip",0,false);
            this.Tip.getChildByName("btn_next").active = false;
            this.Tip.getChildByName("btn_jump").active = false;
            this.Tip.getChildByName("btn_start").active = false;
        }
    }
    //跳过
    guideJump(){
        this.Tip.getChildByName("btn_next").active = false;
        this.Tip.getChildByName("btn_jump").active = false;
        this.Tip.getChildByName("btn_start").active = false;
        GameData._instance.GM_INFO.probation = false;
        this.destroyBlock(false);
        this.onDestroy();
        cc.director.loadScene("GameScene");
    }

    jump(){
        this.Player.getComponent("Player").jump();
    }

    startGame(){
        this.createBlock();
        // this.createAir();
    }

    addScore(score){
        GameData._instance.CLICK_DATA.getScore = parseInt(score);
        GameManager._instance.score += parseInt(score);
        GameData._instance.CLICK_DATA.totalScore = GameManager._instance.score;
        this.topUI.getChildByName("nandu").getComponent(cc.Label).string  = GameManager._instance.score + "";
        var scale = GameManager._instance.score/GameData._instance.LEVEL_INFO.scoreMax;
        cc.tween(this.topUI.getChildByName("progress").getComponent(cc.Sprite))
        .to(0.5,{fillRange:scale})
        .call(() =>{
            if(scale >= GameData._instance.LEVEL_INFO.star1 && !this.topUI.getChildByName("star1").active){
                this.topUI.getChildByName("star1").active = true;
            }
            if(scale >= GameData._instance.LEVEL_INFO.star2 && !this.topUI.getChildByName("star2").active){
                this.topUI.getChildByName("star2").active = true;
            }
            if(scale >= GameData._instance.LEVEL_INFO.star3 && !this.topUI.getChildByName("star3").active){
                this.topUI.getChildByName("star3").active = true;
                // GameData._instance.scoreMax = 150000;
            }
        })
        .start();
    }

    createBlock(){
        if(this.over == false && this.begin == true){
            this.Ground.active = false;
            this.Player.getComponent("Player").jumpPause = false;
            var num = Math.floor(Math.random()*12);
            if(this.round <= 10 && num == 5){
                num = Math.floor(Math.random()*6 + 6);
            }

            var block = cc.instantiate(this.blockPrefab[num]);
            let height = this.Player.getComponent("Player").basicHeight + GameData._instance.GM_INFO.blockMin;
            if(num > GameData._instance.GM_INFO.blockScale){
                height += block.height + GameData._instance.GM_INFO.blockMax;
                GameData._instance.CLICK_DATA.height = true;
            }
    
            if(height >= 0 && this.cameraMove == false){
                this.countHeight = this.Player.getComponent("Player").basicHeight - this.Camera.node.y;
                this.cameraMove = true;
            }
            block.setPosition(cc.v2(this.round%2==0?480:-480,height));
            block.parent = this.node.getChildByName("Block");
            block.zIndex = 10;
            this.block = null;
            this.block = block;
            this.round += 1;
            this.level += 1;
            if(this.round > GameData._instance.GM_INFO.levelMax) GameData._instance.GM_INFO.levelMax = this.round;
            GameData._instance.CLICK_DATA.level = this.round;
            GameData._instance.CLICK_DATA.round = this.level;
            GameData._instance.LEVEL_INFO.layer += GameData._instance.LEVEL_INFO.layerAdd;
            if(GameData._instance.LEVEL_INFO.speed<2)GameData._instance.LEVEL_INFO.speed += GameData._instance.LEVEL_INFO.addSpeed;

            if(GameData._instance.LEVEL_INFO.reduceSpeed <= 100)
                GameData._instance.LEVEL_INFO.reduceSpeed += GameData._instance.LEVEL_INFO.jiansu;
            if(this.round == GameData._instance.LEVEL_INFO.round1) GameData._instance.LEVEL_INFO.jiansu = 2;
            else if(this.round == GameData._instance.LEVEL_INFO.round2) GameData._instance.LEVEL_INFO.jiansu = 1;
            else if(this.round == GameData._instance.LEVEL_INFO.round3) GameData._instance.LEVEL_INFO.jiansu = 0.5;
        }
    }

        //产生空气
        createAir(){
            for(let i=0; i<100;i++){
                this.Ground.active = false;
                var num = Math.floor(Math.random()*12);
                if(this.round <= 10 && num == 5){
                    num = Math.floor(Math.random()*6 + 6);
                }
                var block = cc.instantiate(this.blockPrefab[num]);
                let height = this.Player.getComponent("Player").basicHeight + GameData._instance.GM_INFO.blockMin;
                if(num > GameData._instance.GM_INFO.blockScale){
                    height += block.height + GameData._instance.GM_INFO.blockMax;
                    GameData._instance.CLICK_DATA.height = true;
                }
        

                block.setPosition(cc.v2(this.round%2==0?480:-480,height));
                block.parent = this.node.getChildByName("Block");
                block.zIndex = 10;

                this.round += 1;
                this.level += 1;
                if(this.round > GameData._instance.GM_INFO.levelMax) GameData._instance.GM_INFO.levelMax = this.round;
                GameData._instance.CLICK_DATA.level = this.round;
                GameData._instance.CLICK_DATA.round = this.level;
                GameData._instance.LEVEL_INFO.layer += GameData._instance.LEVEL_INFO.layerAdd;
                GameData._instance.LEVEL_INFO.speed += GameData._instance.LEVEL_INFO.addSpeed;
        
                if(GameData._instance.LEVEL_INFO.reduceSpeed <= 80)
                    GameData._instance.LEVEL_INFO.reduceSpeed += GameData._instance.LEVEL_INFO.jiansu;
                if(this.round == GameData._instance.LEVEL_INFO.round1) GameData._instance.LEVEL_INFO.jiansu = 2;
                else if(this.round == GameData._instance.LEVEL_INFO.round2) GameData._instance.LEVEL_INFO.jiansu = 1;
                else if(this.round == GameData._instance.LEVEL_INFO.round3) GameData._instance.LEVEL_INFO.jiansu = 0.5;
            }
    
        }
    
        clearAir(){
            cc.director.loadScene("GameScene");
        }

    //虚假碎裂块
    createCrackBlock(){
        this.interfere = true;
        GameData._instance.CLICK_DATA.fake = this.interfere;
        if(this.round > 1) this.destroyBlock(true);
        if(this.over == false && this.begin == true){
            var block = cc.instantiate(this.blockPrefab[12]);
            let height = this.Player.getComponent("Player").basicHeight;
            if(GameData._instance.CLICK_DATA.height == true){
                height += block.height/2;
            }
            block.setPosition(cc.v2(this.round%2==0?480:-480,height));
            block.parent = this.node.getChildByName("CrackBlock");
            block.zIndex = 1;

        }
    }
    
    destroyBlock(type){
        if(type == true){
            if(this.node){
                if(this.node.getChildByName("CrackBlock")){
                    if(this.node.getChildByName("CrackBlock").children){
                        var block2 = this.node.getChildByName("CrackBlock").children;
                        for(let i=0; i<block2.length; i++){
                            if(block2[i]){
                                block2[i].getComponent("Block").hide();
                            }
                        }
                    }
                }
            }
        }
        else{
            var block = this.node.getChildByName("Block").children;
            for(let i=0; i<block.length; i++){
                if(block[i]){
                    block[i].active = false;
                }
            }
        }
    }

    xinAction(){
        let xin  =  this.topUI.getChildByName("xin1");
        if(GameData._instance.GM_INFO.life == 2) xin = this.topUI.getChildByName("xin3");
        else if(GameData._instance.GM_INFO.life == 1)  xin = this.topUI.getChildByName("xin2");
        cc.tween(xin)
        .to(0.6,{scale:1.6,opacity:0})
        .call(() =>{
            xin.active = false;
        })
        .start();
    }
    //死亡
    getDeath(data){
        if(data == true){
            this.destroyBlock(false);
            cc.tween(this.Player)
            .to(1,{y:-500},{easing:'cubicIn'})
            .call(()=>{
                this.Player.getComponent("Player").init();
                // this.Player.getComponent("Player").jumpPause = true;
                if(this.guide > 5){
                    if(this.guide == 6){
                        this.guide = 5;
                        this.round = 2;
                        this.startGuide(5,true);
                    }
                    else{
                        this.round = 1;
                        this.startGuide(6,true);
                    }
              
         
                }
                else{
                    this.round = 0;
                    this.startGuide(3,true);
                }
            })
            .delay(0.5)
            .call(() =>{
            })
            .start();
        }
        else{
            if(GameData._instance.GM_INFO.life > 0){
                GameData._instance.GM_INFO.life -= 1;
                this.getDevive(1);
            }else{
                GameData._instance.GM_INFO.life = -1;
                this.getDevive(3);
            }
        }

    }
    //复活
    getDevive(time){
        this.round = 0;
        GameData._instance.LEVEL_init();
        if(this.topUI.getChildByName("star3").active == true){
            // GameData._instance.LEVEL_INFO.scoreMax = 150000;
        }
        this.interfere = false;
        GameData._instance.CLICK_DATA.fake = this.interfere;
        this.destroyBlock(false);
        var block2 = this.node.getChildByName("CrackBlock").children;
        for(let i=0; i<block2.length; i++){
            if(block2[i]){
                block2[i].active = false;
            }
        }
        // this.blockArray = [];
        let actionTime = 1;
        if(this.Player.y > 500){
            actionTime = (this.Player.y + 500)/1000*actionTime;
        }
        cc.tween(this.Player)
        .to(actionTime,{y:-500},{easing:'cubicIn'})
        .call(()=>{
            this.Player.getComponent("Player").xinAction();
        })
        .delay(0.5)
        .call(() =>{
            this.xinAction();
            this.Player.getComponent("Player").init();
            if(time > 1){
                this.Xin.parent.active = true;
                this.Xin.getComponent(cc.Sprite).fillRange = 0;
                cc.tween(this.Xin.getComponent(cc.Sprite))
                .to(time,{fillRange:1})
                .delay(0.3)
                .call(() =>{
                    this.Xin.parent.active = false;
                })
                .delay(0)
                .call(() =>{
                    this.createBlock();
                })
                .start();
            }
            else{
                setTimeout(() => {
                    this.createBlock();
                }, (time+0.5)*1000);
            }
        })
        .start();
    }

    setData(){
        GameData._instance.CLICK_DATA.totalScore = GameManager._instance.score;
        GameData._instance.CLICK_DATA.timer = this.countTime;
        GameData._instance.CLICK_DATA.level = this.round;
        GameData._instance.CLICK_DATA.round = this.level;
        //CLICK_DATA 数据处理完毕后调用上传接口  上传接口内CLICK_DATA不做改变
        GameTool.setGameData();
    }

    //获取matchId  用于上传每次点击数据里面记录id方便查询
    getMatchId (){
        let matchId = cc.sys.localStorage.getItem("matchId");
        if(matchId == "undifend" || matchId==null){
            matchId =  this.setMatchId();
        }
        else{
            if(this.containsNanana(matchId) == true){
                matchId =  this.setMatchId();
            }
            else{
                let char = parseInt(matchId[10]);
                if(this.level == 1){
                    char += 1;
                }
                matchId  = matchId.slice(0, 10) + char + "";
                GameData._instance.GM_INFO.matchId = matchId;
                cc.sys.localStorage.setItem("matchId",matchId);
            }
        }
        return matchId;
    }
    //检测matchId 如果有缓存以前的nanana数据清除
    containsNanana(str) {
        return /na/i.test(str);
    }
    //重新设置MatchId
    setMatchId (){
        // 定义包含可用字符的字符集
        const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        // 创建一个数组以保存随机字符
        const uuidArray = [];
        // 循环10次 生成10位的UUID
        for (let i = 0; i < 10; i++) {
                // 生成随机索引，范围是字符集的长度
            const randomIndex = Math.floor(Math.random() * characters.length);
            // 从字符集中获取随机字符
            const randomChar = characters.charAt(randomIndex);
            // 将字符添加到数组中
            uuidArray.push(randomChar);
        }
        let data =  uuidArray.join('') + 1 + "";
        cc.sys.localStorage.setItem("matchNumber",1);
        cc.sys.localStorage.setItem("matchId",data);
        GameData._instance.GM_INFO.matchId = data;
        return data;
    }

    updateCountDownTime () {
        if (this.countTime > 0 && !GameData._instance.GM_INFO.probation) {
            this.countTime -= 1;
            this.time.string = this.getTimeMargin(this.countTime);
            if(this.countTime < 5){
                cc.tween(this.time.node)
                .to(0.25,{scale:1.5,color:cc.color(255,0,0)})
                .to(0.25,{scale:1,color:cc.color(255,255,255)})
                .start()
            }
            if(this.countTime <= 0){
                this.unschedule(this.updateCountDownTime);
                this.begin = false;
                this.over = true;
                this.overStop();
                this.setRank();
                setTimeout(() => {
                    this.overOpen();
                }, 2000);
            }
        }
    }
    //停止所有动画
    overStop(){
        if(this.Player.getComponent("Player").jumpAction)
            this.Player.getComponent("Player").jumpAction.stop();
        var block = this.node.getChildByName("Block").children;
        for(let i=0; i<block.length; i++){
            if(block[i]){
                if(block[i].getComponent("Block").tween)
                    block[i].getComponent("Block").tween.stop();
            }
        }
        var block2 = this.node.getChildByName("CrackBlock").children;
        for(let i=0; i<block2.length; i++){
            if(block2[i]){
                if(block2[i].getComponent("Block").tween)
                    block2[i].getComponent("Block").tween.stop();
            }
        }
    }

    setRank(){
        GameData._instance.GM_INFO.score = this.score;
        GameTool.setRank();
    }

    overOpen(){
        this.Player.active = false;
        this.destroyBlock(false);
        this.destroyBlock(true);
        this.GameOver.active = true;
        this.GameOver.getChildByName("score").getComponent(cc.Label).string = this.score + "";
        this.GameOver.getChildByName("level").getComponent(cc.Label).string = 
        GameData._instance.GM_INFO.levelMax + "";
        // this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string = 
        // GameData._instance.GM_INFO.difficultyMax + "";

        let difficulty = parseInt(this.difficultyArray/this.level*10+"");
        // console.log("难度总数",this.difficultyArray,"次数",this.level,"最终",difficulty);
        this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string = 
        difficulty/10 + "";
        
    }

    backLoad(){
        this.destroyBlock(false);
        this.destroyBlock(true);
        this.onDestroy();
        cc.director.loadScene("LoadScene");
    }

    again(){
        this.destroyBlock(false);
        this.destroyBlock(true);
        this.onDestroy();
        cc.director.loadScene("GameScene");
    }

    openRank(){
        cc.director.loadScene("RankScene");
    }

    //时间格式转换
    getTimeMargin(second:number) {
        let total = 0;
        total = second;
        let hour = 0;
        hour = parseInt((total / 3600) + "");//计算整数小时数
        let afterHour = total - hour * 60 * 60;//取得算出小时数后剩余的秒数
        let min = parseInt((afterHour / 60)+"");//计算整数分
        let m = "" + min;  
        if(min < 10) m = "0"+min;
        let afterMin = total - hour * 60 * 60 - min * 60;//取得算出分后剩余的秒数
        let miao = afterMin + "";
        if(afterMin < 10) miao = "0" + afterMin;
        return m + ':' + miao
    }
    update (dt) {
        if(this.cameraMove == true && this.over == false){
            this.Camera.node.y = this.Player.y - this.countHeight;
            if(this.Camera.node.y <= 0) this.Camera.node.y = 0;
            this.topUI.y = this.Camera.node.y + this.drop;
        }
    }
}
