var reGameStates = require('GameStates');
var AConfig = require('../Config');

import utils from "../Network/netUtils";
import GameNet from "../Network/GameNet"
import gameToast from "../Network/gameToast"

//全局数据类
cc.Class({
    extends: cc.Component,
    properties: {
        //记录全部道路的index
        GameData_highwayIndex: {
            default: [],
            type: [cc.Integer],
            visible: false,
            serializable: false,
        },

        //记录建筑物存储的信息
        GameData_buildings: {
            default: [],
            visible: false,
            serializable: false,
        },
        HighWayPrefabs: cc.Prefab,
        //MyMapNode
        //建筑物的节点
        BuildingsParent: {
            default: null,
            type: cc.Node,
        },
        ManageUI: {
            default: null,
            type: cc.Node,
        },

        GameVersion: {
            default: -1,
            type: cc.Integer,
        },

        //读取数据
        readData: {
            default: null,
            visible: false,
        },

        /**
         * 接口
         * todo cnt和snb 由钱包读取
         */
        CNT: {
            default: 0,
            visible: false,
        },
        SNB: {
            default: 0,
            visible: false,
        },
        /**
         * 用户属性
         */
        //体力
        strength: {
            default: 0,
            visible: false,
        },
        //幸运值
        lucky: {
            default: 0,
            visible: false,
        },
        //站内收益
        CNTDrawBalance: {
            default: 0,
            visible: false,
        },

        //读取的土地文件
        ConfigLand: {
            default: null,
            visible: false
        },



        toast: null,
        scheduleObj: null,
        toastCallback: null,
        isStart: true,
        isInit: false,

        /**
         * 限制重复触发支付， 正在支付中转态，
         */
        isPlayingCnt: false,
        isPlayingSnb: false,


        /**
         * 处理请求
         */
        //现在多次触发
        isOnAddFruit: false,
        isOnSaleFruit: false,
        isOnGrantFruit: false,
        isExchangeSeed: false,

        //自动存储数据
        AutoSaveData: null

    },
    onLoad() {
        //初始化GameData全局变量
        GlobalD.GameData = this;
        this.GameConfig();
    },
    GameConfig() {
        this.AddBuildingCost = 5;
        this.RemoveBuildingCost = 5;

        //
        this.Dapp = {
            UserInfo: null
        }
    },
    start() {
        cc.loader.loadRes("prefab/gameToast", function (err, texture) {
            this.toast = cc.instantiate(texture);
            this.toast.parent = cc.find("Canvas/UICamera");
            this.toast.zIndex = 999;
            this.toast.active = false;
            this.scheduleObj = this.schedule(() => {
                this.updateToast();
            }, 1);
        }.bind(this));

        this._tiledMap = GlobalD.TiledMap._tiledMap;
        //调用初始化dapp
        this.isDebugMode(GlobalD.dapp);
    },
    /**
     * 根据 不存在dapp 的话，使用本地测试
     * @param {*} bInit 
     */
    isDebugMode: function (bInit) {
        if (bInit) {
            //读取网络数据
            try {
                GlobalD.dapp.cntBalance().then((cntBalance) => {
                    //会延迟返回
                    // console.log("获取cnt:" + cntBalance) // string, 精度18，需要自行处理省略几位小数
                    GlobalD.GameData.SetCNT(cntBalance);
                });
            } catch (err) {
                console.error(err) // 初始化失败，运行环境不是钱包环境
            }
            //登录时候已经初始化好snb了
            this.SNB = GlobalD.UserInfo.snb + GlobalD.UserInfo.snbPart;
            console.log("this.SNB==", this.SNB);
            this.readData = userData.readData;
            // cc.log('playerPullInfo 读取到数据？：', this.readData)
            this.InitNextworkData();
            this.InitSceneInfo();

            // 自动存储数据
            /**
             * remove version: todo 去除自动存储
             */
            // this.AutoSaveData = function () {
            //     this.pushData(true);
            // };
            // this.schedule(this.AutoSaveData, 15);
        } else {
            // 清除
            cc.log("本地数据重新开始，并且不初始化");
            // this.onClearAllData();
            this.Init();
            this.InitSceneInfo();
            // this.AutoSaveData = function () {
            //     this.pushData(false);
            // };
            // this.schedule(this.AutoSaveData, 10);
        }
    },

    getData: function () {
        //如果开局没有读取到网络数据，就这里初始化
        if (userData.readData == null) {
            cc.log("本地数据：", cc.sys.localStorage.getItem('userdata'));
            let userdata = cc.sys.localStorage.getItem('userdata');
            if (userdata) {
                this.readData = JSON.parse(userdata);
            }
            this.Init();
            this.InitSceneInfo();
        } else {
            this.readData = userData.readData;
            cc.log('读取到数据？：', this.readData)
            this.Init();
            this.InitSceneInfo();
        }

    },
    /**
     * 处理用户生成的场景，新增处理跳转其他用户界面，
     * 其他用户界面 不同点：
     * 1.土地信息：显示对应用户的土地信息
     * 2.界面按钮：显示对应用户所需要的操作按钮
     */
    InitSceneInfo() {
        //根据顺序生成
        //remove version：todo  去除初始化时间ui
        // cc.find("GameNode/ManageTimer").getComponent('ManageTimer').Init();
        //初始化金钱ui,gold,diamond, cnt,snb,
        cc.find("GameNode/ManageGolden").getComponent('ManageGolden').InitManageGlodenUI();
        //领取ui
        this.ManageUI.getComponent("ManageUI").DiamondNowlabel.string = this.GetDiamond() + '/30000'
        //设置体力值,todo 幸运值后面设置
        this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
        // //初始化地图物件
        // cc.find("GameNode/ManageMap").getComponent('ManageMap').InitManageMap();
        // todo 去除公路 Barrier
        // GlobalD.TiledMap.onInitSolid();
        //初始化生成房屋 
        /**
         * dapp设定： 如果固定土地冲突，删除冲突的建筑和回收仓库
         * 新增：
         * 当进入其他用户农场时候，只处理土地显示信息。其他的都隐藏起来，不进行操作
         * 更新的数据：1.土地
         * 隐藏的数据：1.隐藏游客
         *            2.隐藏用户当前建筑
         *            3.隐藏当前用户菜单，显示对应农场按钮
         */
        this.ManageUI.getComponent('ManageBuildings').InitBuildings();
        //初始化道路
        /**
         * 原本游戏设定是先生产道路，现在为了方便处理等房屋生产后，再处理公路
         * dapp设定： 如果固定土地冲突，删除对应的公路
         * remove version：todo 去除生成公路
         */
        // this.onSpawnHighway();
        //初始化生成人物
        /**
        * dapp设定： 如果固定土地位置冲突，把人物生成位置放置到主路
        * onSpawnWorkerAIFromStoredData 此函数处理
        * 
        */
        // remove version：todo 去除生成公人
        // cc.find('GameNode/ManageWorker').getComponent('ManageWorker').InitWorkerAI();
        /**
         * remove version：todo 去除新手教程
         */
        //初始化新手教学
        // let _BFirstLoadGame = this.readData ? this.readData.BFirstLoadGame : 0;
        // GlobalD.ManageTask.InitTask(_BFirstLoadGame);

        this.ManageUI.getComponent('ManageUI').Init();
    },
    InitNextworkData() {
        // console.log("this.readData", this.readData);
        this.Golden = this.readData.Golden;
        this.Diamond = this.readData.Diamond;
        this.shareGive = this.readData.shareGive;
        //签到分享给钻石金币
        this.signInGive = this.readData.signInGive;
        //每个月 给的 低保
        this.EveryGive = this.readData.EveryGive;
        //公共分享
        this.publicGive = this.readData.publicGive;

        // cc.log('初始化网络数据');
        //读取日期数据
        this.GameYear = this.readData.GameYear;
        this.GameMonth = this.readData.GameMonth;
        this.GameDay = this.readData.GameDay;

        //读取金币
        this.Golden = this.readData.Golden;
        //读取钻石
        this.Diamond = this.readData.Diamond;
        // cc.log('this.readData.Diamond', this.readData.Diamond);
        //读取工人等级
        this.WorkerLV = this.readData.WorkerLV;
        //工人数量
        this.WorkerNum = this.readData.WorkerNum;
        //工人容量
        this.WorkerCapacity = this.readData.WorkerCapacity;
        this.GameDate = this.readData.GameDate;
        this.LastTimeEveryDayRewardsDate = this.readData.LastTimeEveryDayRewardsDate;
        this.LastTimeLuckDate = this.readData.LastTimeLuckDate;
        this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray;//.split('_');
        this.TerritoryStateArray = this.readData.TerritoryStateArray;//.split('_');
        //面板状态
        this.BuildingStateArray = this.readData.BuildingStateArray;//.split('_');

        //解锁设置为 不用解锁
        // this.BuildingLockStateArray.forEach((value, index, array) => {
        //     array[index] = 1;
        // })
        this.BuildingLockStateArray = this.readData.BuildingLockStateArray;//.split('_');
        this.BuildingNumArray = this.readData.BuildingNumArray;//.split('_');
        this.DiamondNumArray = this.readData.DiamondNumArray;//.split('_');
        this.FoodTradeState = this.readData.FoodTradeState;
        this.WoodTradeState = this.readData.WoodTradeState;
        this.MineralTradeState = this.readData.MineralTradeState;
        //工人工作信息
        if (this.readData.characterInfoArray) {
            this.CharacterInfoArray = this.readData.characterInfoArray;
        } else {
            this.CharacterInfoArray = [];
        }
        //道路数据
        if (this.readData.highwayIndex)
            this.GameData_highwayIndex = this.readData.highwayIndex;

        //建筑物数据
        if (this.readData.buildingsInfo)
            this.GameData_buildings = this.readData.buildingsInfo;

        this.LotteryTimes = this.readData.LotteryTimes;
        //任务
        if (this.readData.TaskIconCountClick)
            task.TaskIconCountClick = this.readData.TaskIconCountClick;
    },
    /**
     * 初始化
     */
    Init: function () {
        let _BFirstLoadGame = false;//  this.readData ? this.readData.BFirstLoadGame : 0;
        //date
        this.GameYear = 0;
        this.GameMonth = 0;
        this.GameDay = 0;
        this.GameDate = '0000/00/01';
        /**
         * 新增 CNT 和 SNB
         */
        this.CNT = 0;
        this.SNB = 0;
        this.Golden = 2000;
        this.Diamond = 100;
        this.WorkerLV = 0;
        this.WorkerNum = 0;
        this.CharacterInfoArray = [];
        this.WorkerCapacity = 5;
        this.TerritoryStateArray = [1, 1, 1, 1, 1, 1, 1, 1];//测试，全开地图
        /**
         * 添加建筑往后添加，到时候ManageBuildings 脚本 会初始化根据顺序
         * BuildingStateArray---相关 GetBuildingStateArray 获取建筑状态
         * BuildingNumArray  ---相关 GetBuildingNumArray 获取建筑数量
         * BuildingFrameArray ---相关 ManageUI  添加面板是否解锁之类的相关预制  
         */
        this.BuildingStateArray = [
            1, //公路
            1,  //路铲
            1,  //拆迁
            1,  //农舍
            1,  //单元楼
            1,  //别墅
            1, //农田
            1,//伐木场
            1, //矿坑
            1, //加工厂
            1,//冷饮摊
            1,//贩卖机
            1,//面包房
            1,//早餐车
            1, //饮茶店
            1,//点心店
            1, //美食店
            1,//西餐厅
            1, //花店
            1, //美发店
            1,//洋装店
            1, //珠宝店
            1, //电影院
            1,//路灯
            1, //绿化带
            1, //花坛
            1,//喷泉
            1, //警察局
            1,//游乐场
            1,  //蓝色城堡
            1, //粉色城堡
            1, //Holy Farmland
            1 //Holy Farmland seed
        ];
        this.BuildingLockStateArray = [
            1, //公路
            1,  //路铲
            1,  //拆迁
            1,  //农舍
            0,  //单元楼
            0,  //别墅
            1, //农田
            0,//伐木场
            0, //矿坑
            1, //加工厂
            0,//冷饮摊
            0,//贩卖机
            0,//面包房
            0,//早餐车
            0, //饮茶店
            0,//点心店
            0, //美食店
            0,//西餐厅
            0, //花店
            0, //美发店
            0,//洋装店
            0, //珠宝店
            0, //电影院
            1,//路灯
            1, //绿化带
            1, //花坛
            0,//喷泉
            0, //警察局
            0,//游乐场
            0,  //蓝色城堡
            0, //粉色城堡
            1, //Holy Farmland
            1, //Holy Farmland seed
        ];
        //建筑物数量
        this.BuildingNumArray = [
            0, //公路
            0,  //路铲
            0,  //拆迁
            4,  //农舍
            1,  //单元楼
            1,  //别墅
            4, //农田
            1,//伐木场
            1, //矿坑
            2, //加工厂
            2,//冷饮摊
            1,//贩卖机
            1,//面包房
            1,//早餐车
            1, //饮茶店
            1,//点心店
            1, //美食店
            1,//西餐厅
            1, //花店
            1, //美发店
            1,//洋装店
            1, //珠宝店
            1, //电影院
            1,//路灯
            1, //绿化带
            1, //花坛
            1,//喷泉
            1, //警察局
            1,//游乐场
            1,  //蓝色城堡
            1,  //粉色城堡
            1, //Holy Farmland
            1, //Holy Farmland seed
        ];

        this.DiamondNumArray = AConfig.DiamondArray;
        //todo 钻石消耗默认值
        this.DiamondNumArray.forEach((value, index, array) => {
            array[index] = 0;
        })
        cc.log('钻石消耗默认值', this.DiamondNumArray);
        this.EveryDayRewardsArray = [0, 0, 0, 0, 0, 0, 0];

        this.LastTimeEveryDayRewardsDate = '0000/00/00';
        this.LastTimeLuckDate = '0000/00/00';

        this.FoodTradeState = 1;
        this.WoodTradeState = 1;
        this.MineralTradeState = 1;
        //转盘分享给钻石金币
        this.shareGive = [200, 5];
        //签到分享给钻石金币
        this.signInGive = [200, 5];
        //每个月 给的 低保
        this.EveryGive = [500, 10];
        //公共分享
        this.publicGive = [200, 50];
        //每天抽奖次数
        this.LotteryTimes = 10;

        // 1 === _BFirstLoadGame
        if (_BFirstLoadGame) {
            console.log("this.readData", this.readData);
            // cc.log('初始化网络数据');
            //读取日期数据
            this.GameYear = this.readData.GameYear;
            this.GameMonth = this.readData.GameMonth;
            this.GameDay = this.readData.GameDay;

            /**
             * 接口
             * todo cnt和snb 由钱包读取
             */
            this.CNT = 0;
            this.SNB = 0;

            //读取金币
            this.Golden = this.readData.Golden;
            //读取钻石
            this.Diamond = this.readData.Diamond;
            // cc.log('this.readData.Diamond', this.readData.Diamond);
            //读取工人等级
            this.WorkerLV = this.readData.WorkerLV;
            //工人数量
            this.WorkerNum = this.readData.WorkerNum;
            //工人容量
            this.WorkerCapacity = this.readData.WorkerCapacity;
            this.GameDate = this.readData.GameDate;
            this.LastTimeEveryDayRewardsDate = this.readData.LastTimeEveryDayRewardsDate;
            this.LastTimeLuckDate = this.readData.LastTimeLuckDate;
            this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray;//.split('_');
            this.TerritoryStateArray = this.readData.TerritoryStateArray;//.split('_');
            //面板状态
            this.BuildingStateArray = this.readData.BuildingStateArray;//.split('_');

            //解锁设置为 不用解锁
            this.BuildingLockStateArray.forEach((value, index, array) => {
                array[index] = 1;
            })
            // this.BuildingLockStateArray = this.readData.BuildingLockStateArray.split('_');
            this.BuildingNumArray = this.readData.BuildingNumArray;//.split('_');
            this.DiamondNumArray = this.readData.DiamondNumArray;//.split('_');
            this.FoodTradeState = this.readData.FoodTradeState;
            this.WoodTradeState = this.readData.WoodTradeState;
            this.MineralTradeState = this.readData.MineralTradeState;

            //工人工作信息
            if (this.readData.characterInfoArray)
                this.CharacterInfoArray = this.readData.characterInfoArray;
            //道路数据
            if (this.readData.highwayIndex)
                this.GameData_highwayIndex = this.readData.highwayIndex;

            //建筑物数据
            if (this.readData.buildingsInfo)
                this.GameData_buildings = this.readData.buildingsInfo;

            this.LotteryTimes = this.readData.LotteryTimes;
            //任务
            if (this.readData.TaskIconCountClick)
                task.TaskIconCountClick = this.readData.TaskIconCountClick;
            //测试5W
            // this.PlusDiamond(50000);
        }
    },

    //GET / SET /Plus
    GetGameDate: function () {
        return this.GameDate;
    },
    SetGameDate: function (num) {
        this.GameDate = num;
    },
    PlusGameDate: function (num) {
        this.GameDate += num;
    },
    GetGolden: function () {
        return parseInt(this.Golden);
    },
    GetGoldenCallBack(_CallBack) {
        if (_CallBack)
            _CallBack({ resGolden: parseInt(this.Golden) });
    },
    SetGolden: function (Num) {
        let LastMoney = this.Golden;
        this.Golden = Num;
        let CurrentMoney = Num;
        this.ManageUI.getComponent('ManageUI').GoldenChangeCallBack(this.GetGolden(), LastMoney, CurrentMoney);
    },
    PlusGolden: function (Num) {
        if (this.Golden + Num < 0) {
            this.SetGolden(0);
        }
        else {
            this.SetGolden(this.Golden + Num);
        }
        // task.task50W();
    },
    GetDiamond: function () {
        return parseInt(this.Diamond);
    },
    SetDiamond: function (num, bPush) {
        let LastMoney = this.Diamond;
        this.Diamond = num;
        let CurrentMoney = num;

        this.ManageUI.getComponent("ManageUI").DiamondNowlabel.string = this.Diamond + '/30000'

        this.ManageUI.getComponent('ManageUI').DiamondChangeCallBack(this.GetDiamond(), LastMoney, CurrentMoney);

        console.log("Diamond:", bPush);
        if (bPush) {
            //每次砖石操作。更新一次数据
            this.pushData(true);
        }


    },
    PlusDiamond: function (num) {
        if (this.Diamond + num < 0) {
            this.SetDiamond(0, true);
        }
        else {
            this.SetDiamond(this.Diamond + num, true);
        }
    },

    /**
     * 游戏里面的cnt 和神农呗
     */
    GetCNT: function () {
        return parseFloat(this.CNT);
    },
    SetCNT: function (Num) {
        this.CNT = Num;
        this.ManageUI.getComponent('ManageUI').CNTChangeCallBack(this.CNT);
    },
    GetSNB: function () {
        return parseFloat(this.SNB);
    },
    SetSNB: function (Num) {
        this.SNB = Num;
        this.ManageUI.getComponent('ManageUI').SNBChangeCallBack(this.SNB);
    },

    GetStrength: function () {
        return parseFloat(this.strength);
    },
    SetStrength: function (Num) {
        this.strength = Num;
        this.ManageUI.getComponent('ManageUI').StrengthChangeCallBack(this.strength);
    },

    GetLucky: function () {
        return parseFloat(this.lucky);
    },
    SetLucky: function (Num) {
        this.lucky = Num;
        this.ManageUI.getComponent('ManageUI').LuckyChangeCallBack(this.lucky);
    },


    GetWorkerLV: function () {
        return parseInt(this.WorkerLV);
    },
    SetWorkerLV: function (num) {
        this.WorkerLV = num;
    },
    PlusWorkerLV: function (num) {
        this.WorkerLV += num;
    },
    GetWorkerNum: function () {
        return parseInt(this.WorkerNum);
    },
    SetWorkerNum: function (num) {
        this.WorkerNum = num;
    },
    PlusWorkerNum: function (num) {
        this.WorkerNum += num;
    },
    GetLastTimeEveryDayRewardsDate: function () {
        return this.LastTimeEveryDayRewardsDate;
    },
    //获取转盘 时间
    GetLastTimeLuckDate: function () {
        return this.LastTimeLuckDate;
    },
    //设置转盘时间
    SetLastTimeLuckDate: function (DateString) {
        this.LastTimeLuckDate = DateString;
    },
    SetLastTimeEveryDayRewardsDate: function (DateString) {
        this.LastTimeEveryDayRewardsDate = DateString;
    },

    //工人信息数组
    GetWorkerCharacterInfoArray: function () {
        return this.CharacterInfoArray;
    },
    SetWorkerCharacterInfoArray: function (item) {
        this.CharacterInfoArray = item;
    },

    /*** */
    GetWorkerCapacity: function () {
        return parseInt((this.WorkerCapacity));
    },
    SetWorkerCapacity: function (num) {
        this.WorkerCapacity = num;
    },
    PlusWorkerCapacity: function (num) {
        this.WorkerCapacity += num;
    },
    GetTerritoryStateArray: function () {
        return this.TerritoryStateArray;
    },
    SetTerritoryStateArray: function (aTerritoryStateArray) {
        this.TerritoryStateArray = aTerritoryStateArray;
    },
    PlusTerritoryStateArray: function (Item) {
        this.TerritoryStateArray.push(Item);
    },
    GetBuildingStateArray: function () {
        return this.BuildingStateArray;
    },
    SetBuildingStateArray: function (aBuildingStateArray) {
        this.BuildingStateArray = aBuildingStateArray;
    },
    PlusBuildingStateArray: function (Item) {
        this.BuildingStateArray.push(Item);
    },
    GetBuildingLockStateArray: function () {
        return this.BuildingLockStateArray;
    },
    SetBuildingLockStateArray: function (aArray) {
        this.BuildingLockStateArray = aArray;
    },
    PlusBuildingLockStateArray: function (Item) {
        this.BuildingLockStateArray.push(Item);
    },

    GetBuildingNumArray: function () {
        return this.BuildingNumArray;
    },
    SetBuildingNumArray: function (aBuildingNumArray) {
        this.BuildingNumArray = aBuildingNumArray;
    },
    PlusBuildingNumArray: function (Item) {
        this.BuildingNumArray.push(Item);
    },
    //操作钻石数据
    GetDiamondNumArray: function () {
        return this.DiamondNumArray;
    },
    SetDiamondNumArray: function (aDiamondNumArray) {
        this.DiamondNumArray = aDiamondNumArray;
    },
    GetEveryDayRewardsArray: function () {
        return this.EveryDayRewardsArray;
    },
    SetEveryDayRewardsArray: function (aArray) {
        this.EveryDayRewardsArray = aArray;
    },
    PlusEveryDayRewardsArray: function (Item) {
        this.EveryDayRewardsArray.push(Item);
    },
    GetFoodTradeState: function () {
        return parseInt((this.FoodTradeState));
    },
    SetFoodTradeState: function (num) {
        this.FoodTradeState = num;
    },
    PlusFoodTradeState: function (num) {
        this.FoodTradeState += num;
    },
    GetWoodTradeState: function () {
        return parseInt((this.WoodTradeState));
    },
    SetWoodTradeState: function (num) {
        this.WoodTradeState = num;
    },
    PlusWoodTradeState: function (num) {
        this.WoodTradeState += num;
    },
    GetMineralTradeState: function () {
        return parseInt((this.MineralTradeState));
    },
    SetMineralTradeState: function (num) {
        this.MineralTradeState = num;
    },
    PlusMineralTradeState: function (num) {
        this.MineralTradeState += num;
    },
    GetLotteryTimes: function () {
        return parseInt((this.LotteryTimes));
    },
    SetLotteryTimes: function (num) {
        this.LotteryTimes = num;
    },
    PlusLotteryTimes: function (num) {
        this.LotteryTimes += num;
    },


    //初始化道路
    onSpawnHighway() {
        // 获取InitPoint层
        let InitPos = this._tiledMap.getLayer('InitPoint');
        InitPos.enabled = false;
        console.log("onSpawnHighway");
        //创建公路数据
        if (this.readData && this.readData.allHighwayStylesAndIndex) {
            //保存到内存中
            this.GameData_highwayIndex = this.readData.highwayIndex;
            //先赋值道路的对象数组
            let _AllHighwayAIndex = Object.assign([], this.readData.allHighwayStylesAndIndex);
            //获取最后建造公路的层级
            this.HighwayLayer = this._tiledMap.getLayer('Highway');
            for (let i = 0; i < _AllHighwayAIndex.length; i++) {
                let _tiledPos = GlobalD.TiledMap.analyticalIndexData(_AllHighwayAIndex[i].highwayInfoIndex);
                /**
                 * 解决固定土地时候，道路 和房子 冲突
                 * 
                 */
                if (GlobalD.game.getManageGameIndexArrayAt(_tiledPos)) {
                    continue;
                }
                let highwayTemp = cc.instantiate(this.HighWayPrefabs);
                highwayTemp.parent = this.HighwayLayer.node;
                let tiledTile = highwayTemp.addComponent('TiledTile');
                tiledTile.x = _tiledPos.x;
                tiledTile.y = _tiledPos.y;
                //地图设置可行走区域公路设置
                AStar.setMapSolid(_tiledPos.x, _tiledPos.y, 0);
                // _buildId ==0 是公路
                let _buildId = 0;
                let occupyTemp = cc.v2(_buildId, _AllHighwayAIndex[i].highwayInfoIndex);
                GlobalD.game.OccupyArray.push(occupyTemp);
                highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(_AllHighwayAIndex[i].highwayInfoType);

                GlobalD.game.AllHighwayStylesAndIndex.push(_AllHighwayAIndex[i]);

            }
            // console.log("end");
        } else {
            //如果用户没有存储数据
            //根据InitPoint 的数据，创建初始化的地图数据 的初始化数据

            this.HighwayLayer = this._tiledMap.getLayer('Highway');
            for (var i = 0; i < 32; i++) {
                //去除中间两条路
                if (i == 16 || i == 17) continue;
                for (var j = 0; j < 32; j++) {
                    let tilesPos = cc.v2(i, j);

                    if (InitPos.getTileGIDAt(tilesPos)) {


                        let index = GlobalD.TiledMap.getIndex(tilesPos);
                        this.GameData_highwayIndex.push(index);

                        let highwayTemp = cc.instantiate(this.HighWayPrefabs);
                        highwayTemp.parent = this.HighwayLayer.node;
                        let tiledTile = highwayTemp.addComponent('TiledTile');
                        tiledTile.x = tilesPos.x;
                        tiledTile.y = tilesPos.y;
                        // cc.log('onSpawnHighway2');
                        //地图设置可行走区域公路设置
                        AStar.setMapSolid(tilesPos.x, tilesPos.y, 0);
                        // _buildId ==0 是公路
                        let _buildId = 0;
                        let occupyTemp = cc.v2(_buildId, index);
                        GlobalD.game.OccupyArray.push(occupyTemp);

                        let tile = InitPos.getTiledTileAt(tilesPos.x, tilesPos.y, true);

                        let _MoveType = reGameStates.HighwayType.moveX;
                        // if (tile.gid == 15) {
                        //     _MoveType = reGameStates.HighwayType.moveX;
                        // } else 
                        if (tile.gid == 16) {
                            _MoveType = reGameStates.HighwayType.moveY;
                        } else if (tile.gid == 11) {
                            _MoveType = reGameStates.HighwayType.ZebraCrossingX;
                        } else if (tile.gid == 12) {
                            _MoveType = reGameStates.HighwayType.ZebraCrossingY;
                        }
                        // return;
                        //更换公路样式
                        GlobalD.game.onCreateDifferentRoadStyles({
                            _buildId: _buildId,
                            _highwayType: _MoveType,
                            _roadIndex: index,
                            _hightwayNode: highwayTemp
                        });
                    }
                }
            }
        }
        //外面的两条路
        let initRoad = this._tiledMap.getLayer('Road');
        initRoad.enabled = false;
        for (var i = 16; i < 18; i++) {
            for (var j = 0; j < 32; j++) {
                let tilesPos = cc.v2(i, j);
                // cc.log('road tilesPos',tilesPos)
                if (initRoad.getTileGIDAt(tilesPos)) {
                    let index = GlobalD.TiledMap.getIndex(tilesPos);
                    this.GameData_highwayIndex.push(index);
                    let highwayTemp = cc.instantiate(this.HighWayPrefabs);
                    highwayTemp.parent = this.HighwayLayer.node;
                    let tiledTile = highwayTemp.addComponent('TiledTile');
                    tiledTile.x = tilesPos.x;
                    tiledTile.y = tilesPos.y;
                    // cc.log('initRoad');
                    //地图设置可行走区域公路设置
                    AStar.setMapSolid(tilesPos.x, tilesPos.y, 0);
                    let _buildId = 0;
                    let occupyTemp = cc.v2(_buildId, index);
                    GlobalD.game.OccupyArray.push(occupyTemp);

                    highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.none);
                    //更换公路样式
                    // if (j >= 25 && j <= 27 || j >= 19 && j <= 21 || j >= 9 && j <= 11)
                    //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.none);
                    // else
                    //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveY);

                }
            }
        }
    },

    //清除所有的数据
    onClearAllData() {
        // this.unschedule(this.AutoSaveData);
        //任务索引
        cc.sys.localStorage.removeItem('userdata');
        //跳回登录场景
        // cc.director.loadScene('Login');
    },
    //保存数据请求
    /**
     * 
     * 现在转服务器存储，原本所有相关操作通过服务器计算。
     * 一、目前涉及到的是 SNT 和 SNB 两个货币相关，和买田地操作 (可以理解为租聘,三种类型)
     * 
     * isNetwork：true，上传到网络
     * 
     */
    pushData: function (isNetwork) {
        // cc.log(this.EveryDayRewardsArray);
        // console.log(this.readData.BFirstLoadGame);
        var datas = {
            version: this.GameVersion,
            // 转后台处理
            BFirstLoadGame: 1,//只要push数据，就证明已经开始第一次游戏了

            /**游戏不修改，默认值 start */
            shareGive: this.shareGive,
            //签到分享给钻石金币
            signInGive: this.signInGive,
            //每个月 给的 低保
            EveryGive: this.EveryGive,
            //公共分享
            publicGive: this.publicGive,
            /**游戏不修改，默认值 end */

            //时间
            GameYear: this.GameYear,
            GameMonth: this.GameMonth,
            GameDay: this.GameDay,

            //这里只是单纯的存储起来
            CNT: this.CNT,
            SNB: this.SNB,

            Golden: this.Golden,
            Diamond: this.Diamond,
            WorkerLV: this.WorkerLV,
            WorkerNum: this.WorkerNum,
            WorkerCapacity: this.WorkerCapacity,
            GameDate: this.GameDate,
            LastTimeEveryDayRewardsDate: this.LastTimeEveryDayRewardsDate,
            LastTimeLuckDate: this.LastTimeLuckDate,
            EveryDayRewardsArray: this.EveryDayRewardsArray,//.join('_'),
            TerritoryStateArray: this.TerritoryStateArray,//.join('_'),
            //面板状态
            BuildingStateArray: this.BuildingStateArray,//.join('_'),
            BuildingLockStateArray: this.BuildingLockStateArray,//.join('_'),

            /**
             * SNB和CNT相关，需要后台筛选 田地 和 种子。单独处理
             */
            BuildingNumArray: this.BuildingNumArray,//.join('_'),
            DiamondNumArray: this.DiamondNumArray,//.join('_'),
            FoodTradeState: this.FoodTradeState,
            WoodTradeState: this.WoodTradeState,
            MineralTradeState: this.MineralTradeState,

            LotteryTimes: this.LotteryTimes,

            /**
             * 这些数据不用服务器初始化
             */
            //工人工作信息
            characterInfoArray: this.CharacterInfoArray,
            //道路数据
            highwayIndex: this.GameData_highwayIndex,
            allHighwayStylesAndIndex: GlobalD.game.AllHighwayStylesAndIndex,
            //建筑物数据
            buildingsInfo: this.GameData_buildings,
            //任务
            TaskIconCountClick: task.TaskIconCountClick
        }

        if (isNetwork) {
            var data = [];
            // data["openid"] = userData.openId;
            // data["userdata"] = JSON.stringify(datas);
            data["playerData"] = JSON.stringify(datas);

            /** 推送信息 */
            utils.post(utils.api.playerPushInfo, data, (flag, playerPushInfoTemp) => {
                // console.log('playerPushInfoTemp');
            })
        } else {
            console.log("存储本地：" + isNetwork);
            //保存用户数据到本地
            cc.sys.localStorage.setItem('userdata', JSON.stringify(datas));
        }


    },

    /**
     * 兑换种子时候，特殊处理数据
     * 扣除相应的钻石
     */
    exchangeSeed(diamondAmount, callback) {
        if (this.isExchangeSeed) {
            console.warn("正在兑换中...");
            return;
        }
        this.isExchangeSeed = true;
        //先暂停存储
        // this.unschedule(this.AutoSaveData);

        utils.post(utils.api.exchangeSeeds, { diamondAmount: diamondAmount, seedId: 8 }, (flag, value) => {
            console.log("兑换flag", flag);
            if (flag) {
                console.log("兑换种子", value.code, value.msg);
                //兑换成功后
                if (0 === value.code) {
                    //更新一次数据
                    let _playerData = JSON.parse(value.data.playerData);
                    console.log("兑换后的钻石：", _playerData.Diamond);
                    //更新本地钻石数据
                    this.SetDiamond(_playerData.Diamond, false);

                }
                callback(value);
            }

            this.isExchangeSeed = false;
            //重新开启存储
            // this.schedule(this.AutoSaveData, 15);
        })
    },
    /**
     * 获取是否租赁过的状态
     */
    getPlayerExchangeState(callback) {
        utils.get(utils.api.playerExchangeState, {}, (flag, value) => {
            console.log("租赁状态：", value);
            if (flag)
                callback(flag, value);
        })
    },

    /**
     * 暂时不需要从这里读取
     */
    getLandConfig() {
        utils.get(utils.api.landConfig, {}, (flag, value) => {
            if (flag && 0 === value.code) {
                this.ConfigLand = value.data;
            } else {
                console.warn("未能读取到config土地？");
            }
        })
    },
    //获取自己全部租赁土地
    getSelfUserLandList(callback) {
        utils.get(utils.api.userLandList, {}, (flag, value) => {
            if (flag && 0 === value.code) {
                GlobalD.UserLeaseLand = value.data;
                if (callback)
                    callback();
            } else {
                console.warn("读取到用户的土地错误？");
            }
        })
    },
    //获取用户全部租赁土地
    getOtherUserLandList(otherUserId, callback) {
        this.showToast(cc.find("Canvas/UICamera"), "载入玩家数据中..", 5);
        utils.get(utils.api.userLandAndCanStealList, { otherUserId: otherUserId }, (flag, value) => {
            console.log(otherUserId + ",获取其他用户土地数据:", value);
            if (flag && 0 === value.code) {
                GlobalD.OtherLeaseland = value.data;
                //todo 获取数据成功，进入切换流程,设置 false，处理其他用户对应的土地
                this.ManageUI.getComponent('ManageBuildings').spawnConfigLand(GlobalD.OtherLeaseland, false);

                //收起菜单
                GlobalD.game._ManageUIScript.onHideMenu();
                //收起底部菜单栏
                GlobalD.game._ManageUIScript.onBottomMenuView(false);
                //显示进入其他用户场景后菜单操作
                GlobalD.game._ManageUIScript.onOtherFarmerView(true);

                //关闭当前列表
                GlobalD.game._ManageUIScript.onListUserInfo_Close();

                // this.showToast(cc.find("Canvas/UICamera"), "载入成功..", 1);
                this.hideToast();
                if (callback)
                    callback();
            } else {
                this.showToast(cc.find("Canvas/UICamera"), "获取数据失败..", 1);
                console.warn("获取其他用户土地数据错误？");

            }

        })
    },
    //获取用户可以偷取的列表
    onGetCanStealUserList(page, limit, callback) {
        this.showToast(cc.find("Canvas/UICamera"), "刷新列表中..", 5);
        utils.get(utils.api.canStealUserList, { page: page, limit: limit }, (flag, value) => {
            this.showToast(cc.find("Canvas/UICamera"), "刷新完成！", 1);
            if (flag && 0 === value.code) {
                if (callback)
                    callback(value.data);
            } else {
                let myList = [];
                if (callback)
                    callback(myList);
            }

        })
    },

    onGetSnbInfoList(page, limit, callback) {

        utils.get(utils.api.snbList, { page: page, limit: limit }, (flag, value) => {
            // console.log("snb操作日志", value);
            if (flag && 0 === value.code) {
                if (callback)
                    callback(value.data);
            } else {
                let mySnbList = [];
                if (callback)
                    callback(mySnbList);
            }

        })
    },
    //狗的相关处理
    //获取状态
    onGetDogState(data, callback) {
        utils.get(utils.api.getEquipmentByType, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    onGetEquipmentListState(data, callback) {
        utils.get(utils.api.getListEquipment, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    onGetAddDogFood(data, callback) {
        utils.post(utils.api.addFood, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    onSetDogShowState(data, callback) {
        utils.post(utils.api.setDogShowState, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    //获取狗粮商城列表
    onGetMallFoodList(callback) {
        utils.get(utils.api.getMallFoodList, {}, (flag, value) => {
            if (flag)
                callback(value);
        })

    },
    //商城装备列表
    onGetMallEquipmentList(callback) {
        utils.get(utils.api.getMallEquipmentList, {}, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    onGetAddEquipment(data, callback) {
        utils.post(utils.api.addEquipment, data, (flag, value) => {
            console.log(value);
            callback(flag, value);
        })
    },
    //获取用户已租赁土地的状态
    getLandState(context) {
        let { landId, callback } = context;
        utils.get(utils.api.landState, { landId: landId }, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    //获取商城种子
    getMallSeed(callback) {
        utils.get(utils.api.mallSeed, {}, (flag, value) => {
            if (flag)
                callback(value);
        })
    },

    getWarehouseSeedAndFruit(callback) {
        utils.get(utils.api.getSeedAndFruit, {}, (flag, value) => {
            if (flag)
                callback(value);
        })
    },
    //获取种子状态
    onGetSeedState(data, callback) {
        utils.get(utils.api.getSeedState, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },

    //种植种子
    // data:{landId:1,seedId:1}
    onPlant(data, callback) {
        utils.get(utils.api.plant, data, (flag, value) => {
            if (flag)
                callback(value);
        })
    },

    //收取果实
    onAddFruit(data, callback) {
        if (this.isOnAddFruit) {
            console.log("收取果实过快！");
            return;
        }
        this.isOnAddFruit = true;
        utils.post(utils.api.addFruit, data, (flag, value) => {
            this.isOnAddFruit = false;
            if (flag)
                callback(value);
        })
    },

    //一键收取果实，偷取
    onStealAllFruit(data, callback) {
        if (this.isOnAddFruit) {
            console.log("一键收取果实过快！");
            return;
        }
        this.isOnAddFruit = true;
        this.showToast(cc.find("Canvas/UICamera"), "收取果实中..", 5);
        utils.post(utils.api.stealAllFruit, data, (flag, value) => {
            this.isOnAddFruit = false;
            this.hideToast();
            if (0 === value.code) {
                //如果返回一个体力信息，更新对应的新的用户信息。
                if (value.data.playerAttribute) {
                    GlobalD.PlayerAttribute = value.data.playerAttribute;
                    //这里需要更新体力值
                    this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
                }
            }

            if (flag)
                callback(value);
        })
    },

    //单个收取
    onStealFruit(data, callback) {
        if (this.isOnAddFruit) {
            console.log("偷取果实过快！");
            return;
        }
        this.isOnAddFruit = true;
        this.showToast(cc.find("Canvas/UICamera"), "偷取果实中..", 5);
        utils.post(utils.api.stealFruit, data, (flag, value) => {
            this.isOnAddFruit = false;
            this.hideToast();
            if (0 === value.code) {
                //如果返回一个体力信息，更新对应的新的用户信息。
                if (value.data.playerAttribute) {
                    GlobalD.PlayerAttribute = value.data.playerAttribute;
                    //这里需要更新体力值
                    this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
                }
            }

            if (flag)
                callback(value);
        })
    },

    //出售果实
    onSaleFruit(data, callback) {
        if (this.isOnSaleFruit) {
            console.log("出售果实过快！");
            return;
        }
        this.isOnSaleFruit = true;
        utils.post(utils.api.saleFruit, data, (flag, value) => {
            this.isOnSaleFruit = false;
            if (flag)
                callback(value);
        })
    },

    //赠送果实
    onGrantFruit(data, callback) {
        if (this.isOnGrantFruit) {
            console.log("赠送果实过快！");
            return;
        }
        this.isOnGrantFruit = true;
        utils.post(utils.api.grantFruit, data, (flag, value) => {
            this.isOnGrantFruit = false;
            if (flag)
                callback(value);
        })
    },

    //神农呗购买种子
    onBuySeedsWithSNB(snbAmount, seedId, callback) {
        utils.post(utils.api.snbBuySeeds, { payAmount: snbAmount, seedId: seedId }, (flag, value) => {
            //callback里面处理flag判断
            callback(flag, value);
        })
    },

    //获取用户的snb
    onGetUserSnb(callback) {
        utils.get(utils.api.userSnbInfo, {}, (flag, value) => {
            if (flag) {
                GlobalD.GameData.SetSNB(value.data.SNB + value.data.snbPart);
            }
            if (flag && callback)
                callback(value);
        })
    },

    /**
     * 支付cnt操作
     * @param {*} amount // 需支付金额
     * @param {*} payType 支付类型，1购买土地租凭， 2自然灾害防护，3野兽防护
     * @param {*} itemType 操作物品的id 字符串
     */
    payCNT(cntAmount, payType, itemType, callback) {
        console.log("购买金额：" + cntAmount + "购买类型PlayType：" + payType + "购买物品的id:" + itemType);
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能payCNT!");
            return;
        }
        //
        if (this.isPlayingCnt) {
            console.warn("同时触发支付CNT过快！");
            return;
        }
        if (GlobalD.GameData.GetCNT() < cntAmount) {
            console.log("cnt 不足，GetCNT：" + GlobalD.GameData.GetCNT() + "消费的cntAmount" + cntAmount);
            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "CNT不足！", 2, () => {
                console.log("finish toast! CNT不足！");
            });
            return;
        }
        this.isPlayingCnt = true;
        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "支付处理中...", 5, () => {
            console.log("finish toast!支付处理中...");
        });

        GlobalD.dapp.payCnt(cntAmount, payType, itemType).then((data) => {
            const [err, tx] = data;
            this.isPlayingCnt = false;
            if (err === null) {
                // TODO 成功, 支付为链上操作，需要提供回调接口给这边服务端确认交易成功后修改购买订单结果
                console.log(tx) // 交易hash，唯一标识符

                GlobalD.dapp.cntBalance().then((cntBalance) => {
                    //会延迟返回
                    // console.log("更新cnt:" + cntBalance) // string, 精度18，需要自行处理省略几位小数
                    GlobalD.GameData.SetCNT(cntBalance);
                });
                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "支付成功!", 5, () => {
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "区块确认中，请耐心等待！", 120);
                });


            } else {
                console.log(err)
                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 2, () => {
                    console.log("finish toast!");
                });
            }

            if (callback) {
                callback(data);
            }
        });
    },

    /**
     * 神农呗转换CNT ,比例是5:1
     * @param {*} snbAmount 
     * @param {*} callback 
     * @returns 
     */
    onSnbToCnt(snbAmount, callback) {
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能onSnbToCnt!");
            return;
        }
        // GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "暂不支持兑换CNT！", 2, () => {
        //     console.log("finish toast!");
        // });
        // return;
        if (this.isPlayingSnb) {
            console.warn("同时触发支付SNB过快！");
            return;
        }
        if (GlobalD.GameData.GetSNB() <= 0) {
            console.log("神农呗数量GetSNB:", GlobalD.GameData.GetSNB(), "替换snbAmount:", snbAmount);
            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "神农呗数量不足！", 2, () => {
                console.log("finish toast!");
            });
            return;
        }

        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "已发起兑换！", 5, () => {
            console.log("finish toast!");
        });
        this.isPlayingSnb = true;
        GlobalD.dapp.snbToCnt(snbAmount).then((data) => {
            //更新日志数据
            cc.find("GameNode/ManageDapp").getComponent("ManageDapp").onUpdateSnbList();
            const [err, tx] = data;
            this.isPlayingSnb = false;
            if (err === null) {
                // TODO 成功, 兑换为链上操作，需要提供回调接口给这边服务端确认交易成功后修改扣除SNB数量
                console.log(tx) // 交易hash，唯一标识符
                //扣除对应的神农呗，本地修改显示
                GlobalD.GameData.SetSNB(GlobalD.GameData.GetSNB() - snbAmount);

                GlobalD.dapp.cntBalance().then((cntBalance) => {
                    //会延迟返回
                    // console.log("更新cnt:" + cntBalance) // string, 精度18，需要自行处理省略几位小数
                    GlobalD.GameData.SetCNT(cntBalance);
                });


                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "区块确认中，请耐心等待！", 5, () => {
                    console.log("finish toast!");
                });

            } else {
                console.log(err)
                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 2, () => {
                    console.log("finish toast!");
                });
            }

            if (callback) {
                callback(data);
            }
        });
    },
    //站内收益
    onCntCanWithdrawBalance(callback) {
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能onGetCNTRevenue!");
            return;
        }
        GlobalD.dapp.cntCanWithdrawBalance().then((data) => {
            const { err, res } = data;
            if (err === null) {
                console.log(res) //Number 返回数字
                GlobalD.GameData.CNTDrawBalance = res;
            }
            //todo ，记录一个信息
            if (callback) {
                callback(data);
            }
        });
    },
    //站内收益提现
    onCntWithdraw(amount, callback) {
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能onCntWithdraw!");
            return;
        }
        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收益正在提现中", 10, () => {
            console.log("finish toast!");
        });
        GlobalD.dapp.cntWithdraw(amount).then((data) => {
            const [err, tx] = data;
            console.log("onCntWithdraw:", data);
            if (err === null) {
                console.log(tx) //String|null 交易唯一哈市
                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "提现成功！", 1, () => {
                    console.log("finish toast!");
                });
            } else {
                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 1, () => {
                    console.log("finish toast!");
                });
            }
            if (callback) {
                callback(data);
            }
        });
    },

    //获取账户站内CNT明细（村长和镇长才有）
    onCntLog(page, limit, callback) {
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能onGetSnbToCntInfo!");
            return;
        }
        GlobalD.dapp.cntLog(page, limit).then((data) => {
            const { err, res } = data;
            // if (err === null) {
            //     console.log(res) //
            // }
            if (callback) {
                callback(data);
            }
        });
    },

    //获取 神农呗转 CNT 日志
    onGetSnbToCntInfo(page, limit, callback) {
        if (!GlobalD.dapp) {
            console.warn("GlobalD.dapp未初始化，不能onGetSnbToCntInfo!");
            return;
        }
        GlobalD.dapp.swapLog(page, limit).then((data) => {
            const { err, res } = data;
            if (err === null) {
                console.log(res) //
            }
            if (callback) {
                callback(data);
            }
        });
    },

    //获取 snb 流水日志
    onGetSnbInfoList(page, limit, callback) {

        utils.get(utils.api.snbList, { page: page, limit: limit }, (flag, value) => {
            // console.log("snb操作日志", value);
            if (flag && 0 === value.code) {
                if (callback)
                    callback(value.data);
            } else {
                let mySnbList = [];
                if (callback)
                    callback(mySnbList);
            }

        })
    },

    //切换不同身份的场景，这里处理
    onSwitchAddressBg(_level) {
        //设置背景
        cc.find("Canvas/DynamicLoading_BG").getComponent("DynamicLoadingBg").setInfo(_level);
        //设置土地
        let _landBuildingsInfo = this.BuildingsParent.children;
        for (let i = _landBuildingsInfo.length - 1; i >= 0; i--) {
            let resetLandInfo = _landBuildingsInfo[i];
            if (resetLandInfo.name == "Labour_205_Holy_Farmland") {
                let leaseFarmlandInfoScript = resetLandInfo.getComponent("LeaseFarmlandInfo");
                leaseFarmlandInfoScript.onSwitchEnvBgFromLevel(_level);
            }
        }

    },



    updateToast() {
        if (this.toastEndTime <= 0) {
            this.toast.active = false
            if (this.isStart) {
                if (this.toastCallback != null && this.toastCallback != undefined) {
                    this.toastCallback();
                    // console.log(this.toastCallback);
                }
                this.isStart = false;
            }
            // console.log("this.toast.active:" + this.toast.active);
        }
        this.toastEndTime--;
    },
    //获取一个toast
    getToast() {
        return this.toast;
    },
    hideToast() {
        this.toastEndTime = -1;
        this.updateToast();
    },
    showToast(parent, content, time, callback) {
        if (callback) {
            this.toastCallback = callback;
        } else {
            this.toastCallback = null;
        }

        this.isStart = true;
        if (this.toast) {
            // console.log(this.toast.active);
            this.toast.active = true;
            this.toast.parent = parent;
            this.toast.zIndex = 999;
            let DetailLabel = this.toast.getChildByName('DetailLabel');
            DetailLabel.getComponent(cc.Label).string = content;
            this.toastEndTime = time;
        }
    },

    onTestToken() {
        utils.onTestToken();
    },
    onDestroy() {
        if (this.AutoSaveData) {
            this.unschedule(this.AutoSaveData);
            this.AutoSaveData = null;
        }
    }

});
