// 主游戏控制类
const {ccclass, property} = cc._decorator;
@ccclass
export default class GameManager extends cc.Component {

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

    @property(cc.Prefab)
    Block: cc.Prefab = null;

    countTime: number;
    block_Array: any;


    onLoad () {

    }
    start () {
        this.fit();
        this.init();
    }
    //初始化数据
    init(){
        this.initMap();

    }

    initMap(){
        this.block_Array = [];
        let map = cc.fx.GameConfig.LEVEL_INFO[0].map;
        for(let i=0;i<map.length;i++){
            for(let j=0; j<map[i].length;j++){
                let block = cc.instantiate(this.Block);
                block.parent= this.Map;
                block.getComponent("Block").initData(map[i][j]);
                block.setPosition(cc.v2(-block.width*1.5 + j*block.width,-block.height*1.5 + i*block.height));
                this.block_Array.push(block);
            }
        }
    }

    setModel(){
        let time = 0.3;
        let block2 = this.node.getChildByName("Block1").getChildByName("icon").getComponent(cc.Sprite);
        let block = this.node.getChildByName("Block2").getChildByName("icon").getComponent(cc.Sprite);
        let head = this.node.getChildByName("Head");
        let block3 = this.node.getChildByName("Block3").getChildByName("icon").getComponent(cc.Sprite);
        let block4 = this.node.getChildByName("Block4").getChildByName("icon").getComponent(cc.Sprite);
        
        cc.tween(head)
        .to(time,{position:cc.v3(-48,48,0)})
        .to(time,{rotation:-90})
        .to(time,{position:cc.v3(-144,48,0)})
        .to(time,{rotation:-180})
        .start();
        cc.tween(block)
        .delay(time)
        .to(time,{fillRange:0.25})
        .start();

        cc.tween(block2)
        .to(time,{fillRange:1})
        .start();

        cc.tween(block3)
        .delay(time*2)
        .to(time,{fillRange:1})
        .start();

        cc.tween(block4)
        .delay(time*3)
        .to(time,{fillRange:0.25})
        .start();
    }

    //根据是否全面屏，做独立适配方面
    fit(){
        var jg = this.setFit();
        if(!jg){

        }
    }
    //判断全面屏
    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;
    }
    //返回首页
    backScene(){
        cc.director.loadScene("LoadScene");
    }
    //下一关，或者重新开始，或者返回上一关，根据level决定
    reStart(type){

    }
    //获取时间戳
    getTime(){
        const timestamp = new Date().getTime();
        return timestamp;
    }
    //获胜
    passLevel(){

    }
    //失败
    loseLevel(type){
        //1:  1649
        //2:  3646
        //3:  5546
        //4:  2600
        //5:  694
    }

    //开始游戏
    startGame(){

    }


    //如果是倒计时 调用此方法
    updateCountDownTime () {
        if (this.countTime > 0) {
            this.countTime -= 1;
            // this.time.string =  cc.fx.GameTool.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()
                let over = this.node.getChildByName("Over");
                cc.tween(over)
                .to(0.2,{opacity:255})
                .delay(0.1)
                .to(0.2,{opacity:0})
                .start();
            }
            if(this.countTime <= 0){
                this.unschedule(this.updateCountDownTime);
                var time = 0;
                this.gameOver(time);
            }
        }
    }
    //上传每次操作数据
    setData(){
        cc.fx.GameTool.setGameData();
        
    }
    //上传排行榜数据
    gameOver(time){
        cc.fx.GameTool.setRank(time);
        this.node.getChildByName("GameOver").active = true;
        this.node.getChildByName("GameOver").opacity = 0;
        cc.tween(this.node.getChildByName("GameOver"))
        .to(0.4,{opacity:255})
        .delay(2)
        .to(0.4,{opacity:50})
        .call(() =>{
            cc.director.loadScene("OverScene");
        })
        .start()
    }

    clickSun(data){
    
    }

    onEnable () {
        cc.fx.Notifications.on(cc.fx.Message.control, this.clickSun, this);
    }
    onDisable () {
        cc.fx.Notifications.off(cc.fx.Message.control, this.clickSun);
    }
    update (dt) {
    }
}
