import date from "../Unit/date.js" import gameToast from "../Network/gameToast" /** * 操作租赁土地的相关业务 */ cc.Class({ extends: cc.Component, properties: { leasePanelPrefabs: { default: null, type: cc.Prefab, serializable: true, }, //主信息面板 infoBox: cc.Node, //时间计算对象 showTimeOut: null, /** * 显示天数部分 */ upSliderNode: { default: null, type: cc.Node, serializable: true, }, multipleLabel: { default: null, type: cc.Label, serializable: true, toolTip: "显示的倍数" }, leaseDate: { default: null, type: cc.Label, serializable: true, toolTip: "剩余天数/总天数" }, /** * 成熟期部分 */ midSliderNode: { default: null, type: cc.Node, serializable: true, }, midDate: { default: null, type: cc.Label, serializable: true, toolTip: "剩余天数/总天数" }, midSliderProgressNode: { default: null, type: cc.Node, serializable: true, toolTip: "进度条" }, notLeased: { default: null, type: cc.Node, serializable: true, }, //初始化时候对应的土地的id initConfigLandId: -1, // configLandId: 1 // createTime: "2022-01-10 21:25:30" // id: 1 // isLease: 1 // isPlant: 0 // landDescribe: "土地1xxx" // leaseMultiple: 1 // leaseTime: "2022-01-10 21:25:17" // name: "土地1" // plantMature: 0 // plantStart: "2022-01-10 21:25:22" // updateTime: "2022-01-10 21:25:33" // userId: "4" // 已经租赁的土地信息 leaseLandInfo: { default: null, visible: false }, // createTime: "2022-01-10 21:25:30" // id: 4 // initMultiple: 1 // isInit: 1 // isLease: 0 // isPlant: 0 // landDescribe: "一倍土地" // leaseMultiple: 1 // leaseTime: "2022-01-10 21:25:17" // name: "土地4" // plantMature: 0 // plantStart: "2022-01-10 21:25:22" // posX: 19 // posY: 10 // sizeX: 2 // sizeY: 2 // updateTime: "2022-01-10 21:25:33" // 未初始化时候的土地信息 configLandInfo: { default: null, visible: false }, showLandInfo: { default: null, type: cc.Node, serializable: true, toolTip: "显示土地信息" }, landInfoPrefabs: { default: null, type: cc.Prefab, serializable: true, }, // 已经种植的作物信息 plantInfo: { default: null, visible: false }, showPlantInfo: { default: null, type: cc.Node, serializable: true, toolTip: "显示种植信息" }, plantInfoPrefabs: { default: null, type: cc.Prefab, serializable: true, }, //收获阶段 harvestNode: { default: null, type: cc.Node, serializable: true, }, stealHarvestNode: { default: null, type: cc.Node, serializable: true, }, isHarvest: false, /** * 成熟时候显示的图片 */ harvestSprite: { default: null, type: cc.SpriteFrame, }, _workingBuilding: null, //时间计算对象 timeInterval: null, //是否显示showHarvest isShowHarvest: false, isShowIndex: 0, //检查土地是否到期 isCheckLandState: false, _buildingView: null, //是否是自己的土地,记录一下 bSelfLand: true, // giveOutLightNode: { default: null, type: cc.Node, serializable: true, }, envBg: { default: null, type: cc.Node, serializable: true, }, envBgSpriteFrameList: { default: [], type: cc.SpriteFrame, }, }, // LIFE-CYCLE CALLBACKS: onLoad() { this._workingBuilding = this.node.getComponent("WorkingBuilding"); this._buildingView = cc.find("Canvas/UICamera/BuildingContainer/BuildingView").getComponent("BuildingView"); }, start() { this.harvestNode.on(cc.Node.EventType.TOUCH_START, () => { if (GlobalD.GameData.isOnAddFruit) return; console.log("点击收获"); GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获中..", 5); let data = { landId: this.leaseLandInfo.configLandId }; //果实收入仓库,重置土地种植信息 GlobalD.GameData.onAddFruit(data, (value) => { // console.log(value); if (0 === value.code) { //收成后处理相关状态 this.harvestNode.active = false; this.midSliderNode.active = false this._workingBuilding.onSetGrow(0, null); //更新仓库列表 this._buildingView.onUpdateList(); // "收获成功!" if (value.data.lossAmount > 0) { console.log("loss amount:" + value.data.lossAmount); GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获成功!损失了" + value.data.lossAmount + "个果实", 2); } else { GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获成功!", 2); } this.isShowHarvest = false; this.isShowIndex = 0; if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } } else if (706 === value.code) { //土地到期,没有更新刷新的处理刷新 GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1); //重置锁定状态显示 this.onLockLand(); } else { GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1); } }); }) this.stealHarvestNode.on(cc.Node.EventType.TOUCH_START, () => { // GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "请点击偷菜按钮收取!", 1); // return; //改成单个收取果实 if (GlobalD.GameData.isOnAddFruit) return; console.log("点击收获"); GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "偷取果实中..", 5); let data = { otherUserId: GlobalD.OtherUserInfo.userId, otherLandId: this.leaseLandInfo.configLandId }; //偷取果实收入仓库,重置土地种植信息 GlobalD.GameData.onStealFruit(data, (value) => { console.log(value); if (0 === value.code) { //收成后处理相关状态 this.onHideStealHarvest(); let _manageUI = cc.find("GameNode/ManageUI"); _manageUI.getComponent("ManageUI").onInitStealViewSuccessPrefab(value.data); //更新仓库列表 this._buildingView.onUpdateList(); //更新snb GlobalD.GameData.SetSNB(value.data.snb + value.data.snbPart); } else { GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1); } }); }) //如果是村长或者镇长,换地皮 this.onSwitchEnvBgFromLevel(GlobalD.Dapp.UserInfo.agent_level); }, onSwitchEnvBgFromLevel(agent_level) { this.envBg.getComponent(cc.Sprite).spriteFrame = this.envBgSpriteFrameList[agent_level]; }, onSpawnLeasePanel() { let leasePanel = cc.instantiate(this.leasePanelPrefabs); let parent = cc.find('Canvas/UICamera/DAPPContainer'); leasePanel.parent = parent; leasePanel.setPosition(0, 0); // leasePanel.zIndex = 999; //把操作对象传入 let leasePanelScript = leasePanel.getComponent("LeaseInfo"); leasePanelScript.leaseFarmlandInfoNode = this; /** * 初始化两个操作。一个是续约,续约的话,不给操作,只有续约按钮可点,相当于原来配置再购买一次 * * this.leaseLandInfo 如果购买了土地,这个参数不为空 */ if (this.leaseLandInfo) { //续约时候拦截输入,固定倍数 leasePanelScript.blockInput.active = true; //传入当前计算倍数 leasePanelScript.onInitLeaseInfo(this.leaseLandInfo.leaseMultiple); } else if (0 === this.configLandInfo.initMultiple) { // 固定土地开启,限制输入,设置默认值是1 leasePanelScript.blockInput.active = true; leasePanelScript.onInitLeaseInfo(1); } else { //多倍土地,可以自己输入 let limitValue = this.configLandInfo.initMultiple; if (GlobalD.GameSetting && GlobalD.GameSetting.maxLeaseMulti) { limitValue = GlobalD.GameSetting.maxLeaseMulti; console.log("LeaseFarmland:如果配置 maxLeaseMulti:", limitValue); } leasePanelScript.onInitLeaseInfo(limitValue); } }, /** * 解锁土地操作 */ onUnlockLand() { //直接删除此节点 if (this.notLeased) { this.notLeased.active = false; // this.notLeased.destroy(); // this.notLeased = null; } }, /** * 获取锁定状态 */ onGetUnlockLandState() { return this.notLeased.active; }, /** * 重新锁定 */ onLockLand() { //显示按钮 if (this.notLeased) { this.notLeased.active = true; } //清除当前租赁数据 this.leaseLandInfo = null; this.isShowHarvest = false; this.isShowIndex = 0; if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } //去除提示框 this.upSliderNode.parent.active = false; this.midSliderNode.active = false; this.harvestNode.active = false; this.stealHarvestNode.active = false; //重置土地图片 this._workingBuilding.onSetGrow(0, null); this.onSetInfoBoxActive(false); }, //设置config的土地信息 setConfigLandInfo(value) { this.configLandInfo = value; }, /** * 设置其他用户租赁的土地信息 * 比如去其他用户家里偷取物品,目前统一在这处理 */ setLeaseLandInfo(value, bSelf) { console.log("土地信息是,bSelf:", bSelf); if (!value) { console.log("已租赁土地状态为空:", value); return; } this.onSetInfoBoxActive(false); //设置意思显示相关 this.isShowHarvest = false; this.isShowIndex = 0; //重新设置租赁检测状态 this.isCheckLandState = false; this.leaseLandInfo = value; //先解绑一下信息 this.showLandInfo.off(cc.Node.EventType.TOUCH_START, this._showLandInfo, this); this.showPlantInfo.off(cc.Node.EventType.TOUCH_START, this._showPlantInfo, this); //每个作物直接实时计算时间 if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } //删除解锁图标 this.onUnlockLand(); this.bSelfLand = bSelf; //更新一下土地信息 this.updateLandState(bSelf); }, updateLandState(bSelf) { //如果是种植状态并且有返回种植信息 if (1 === this.leaseLandInfo.isPlant && this.leaseLandInfo.seedInfo) { //种植信息 //如果土地是租赁转态并且同时种植了 ,这里处理土地状态,显示种植信息 let _spriteFrame; switch (this.leaseLandInfo.seedInfo.picture) { case "Cabbage": _spriteFrame = this._buildingView.fruitSpriteFrame[0]; break; case "Potato": _spriteFrame = this._buildingView.fruitSpriteFrame[1]; break; case "Carrot": _spriteFrame = this._buildingView.fruitSpriteFrame[2]; break; case "Broccoli": _spriteFrame = this._buildingView.fruitSpriteFrame[3]; break; case "Tomato": _spriteFrame = this._buildingView.fruitSpriteFrame[4]; break; case "Squash": _spriteFrame = this._buildingView.fruitSpriteFrame[5]; break; case "Eggplant": _spriteFrame = this._buildingView.fruitSpriteFrame[6]; break; case "Pepper": _spriteFrame = this._buildingView.fruitSpriteFrame[7]; break; case "Lentil": _spriteFrame = this._buildingView.fruitSpriteFrame[8]; break; default: break; } //设置一个收获时候的图片 this.harvestSprite = _spriteFrame; this.midSliderNode.active = bSelf; // 进度条按小时计算 let _maturityAllHour = this.leaseLandInfo.seedInfo.maturity * 24 let _remainAllHour = this.leaseLandInfo.plantDaysRemaining * 24 + this.leaseLandInfo.plantHoursRemaining; //计算剩余时间显示(进度条) let _midProccess = _maturityAllHour === 0 ? 0 : _remainAllHour / _maturityAllHour; this.midSliderProgressNode.getComponent(cc.ProgressBar).progress = _midProccess; /** * 绑定生成显示信息面板,种植信息 */ this.showPlantInfo.on(cc.Node.EventType.TOUCH_START, this._showPlantInfo, this); } //显示剩余天数 this.upSliderNode.parent.active = bSelf; this.multipleLabel.string = this.leaseLandInfo.leaseMultiple; // 进去条按天算 let sliderProgressScript = this.upSliderNode.getComponent("slider_progress"); let _proccess = this.leaseLandInfo.leaseDays === 0 ? 0 : this.leaseLandInfo.leaseDaysRemaining / this.leaseLandInfo.leaseDays; sliderProgressScript.onSetProcgress(_proccess); /** * 绑定生成显示信息面板,现在土地信息 */ this.showLandInfo.on(cc.Node.EventType.TOUCH_START, this._showLandInfo, this); let lastUpdateTime = Date.now(); let elapsedTime = 0; let updateFrequency = 1; //ms this.timeInterval = setInterval(() => { let currentTime = Date.now(); let deltaTime = currentTime - lastUpdateTime; elapsedTime += deltaTime; if (elapsedTime >= updateFrequency) { elapsedTime -= updateFrequency; let _leaseDaysMill = this.leaseLandInfo.leaseDaysMill - elapsedTime; let _plantDaysMill = this.leaseLandInfo.plantDaysMill - elapsedTime; lastUpdateTime = currentTime; // 更新计时显示 let [_lDay, _lHour, _lMinutes, _lSeconds] = date.remainFromMillisecond(_leaseDaysMill); //todo 处理了 this.leaseLandInfo.leaseDaysRemaining if (0 !== _lDay) { this.leaseDate.string = "剩" + _lDay + "天/" + this.leaseLandInfo.leaseDays + "天"; } else if (0 !== _lHour) { this.leaseDate.string = "剩" + _lHour + "时/" + this.leaseLandInfo.leaseDays + "天"; } else if (0 !== _lMinutes) { this.leaseDate.string = "剩" + _lMinutes + "分/" + this.leaseLandInfo.leaseDays + "天"; } else { this.leaseDate.string = "剩" + _lSeconds + "秒/" + this.leaseLandInfo.leaseDays + "天"; } //todo 如果租赁时间到了,重新锁定 //重置锁定状态显示 if (!this.isCheckLandState) { if (_leaseDaysMill <= 0) { this.isCheckLandState = true; //检查一次土地 this.onCheckLand(this.leaseLandInfo.configLandId); } } if (1 === this.leaseLandInfo.isPlant && this.leaseLandInfo.seedInfo) { //获得服务器种植日期毫秒 let [_pDay, _pHour, _pMinutes, _pSeconds] = date.remainFromMillisecond(_plantDaysMill); //todo 处理了 this.leaseLandInfo.plantDaysRemaining if (0 !== _pDay) { //否则显示天和小时 this.midDate.string = "剩" + _pDay + "天" + _pHour + "时"; } else if (0 !== _pHour) { this.midDate.string = "剩" + _pHour + "时" + _pMinutes + "分"; } else { this.midDate.string = "剩" + _pMinutes + "分" + _pSeconds + "秒"; } if (!this.isShowHarvest) { if (_plantDaysMill <= 0) { this.isShowHarvest = true; this.isShowIndex = 3; //如果传回的毫秒是小于零,说明成熟了 //成熟阶段 this._workingBuilding.onSetGrow(3, this.harvestSprite); // console.log("土地:", _userLeaseLand[j].configLandId, "已经成熟,可以操作收取果实了!!"); //如果是自己的,显示收成 if (bSelf) { this.onShowHarvest(); } else { //存在可偷的状态才设置这个图标 if (1 === this.leaseLandInfo.canSteal) { this.onShowStealHarvest(); } } } else { let _maturityHour = this.leaseLandInfo.seedInfo.maturity * 24 let _ratio = (_pDay * 24 + _pHour) / _maturityHour; if (_ratio > 0.5 && 1 !== this.isShowIndex) { this.isShowIndex = 1; this._workingBuilding.onSetGrow(1, this.harvestSprite); console.log("_ratio:" + _ratio + "=" + this.leaseLandInfo.configLandId + ",状态:" + this.isShowIndex); } else if (_ratio <= 0.5 && _ratio >= 0 && 2 !== this.isShowIndex) { this.isShowIndex = 2; this._workingBuilding.onSetGrow(2, this.harvestSprite); console.log("_ratio:" + _ratio + "=" + this.leaseLandInfo.configLandId + ",状态:" + this.isShowIndex); } } } } } }); }, _showLandInfo() { let leasePanel = cc.instantiate(this.landInfoPrefabs); let parent = cc.find('Canvas/UICamera/DAPPContainer'); leasePanel.parent = parent; leasePanel.setPosition(0, 0); let leasePanelScript = leasePanel.getComponent("LandInfo"); let _date = date.datedifference(this.leaseLandInfo.createTime, this.leaseLandInfo.leaseTime); let { configLandId, rentalExpenses, createTime, leaseTime, leaseMultiple, landDescribe } = this.leaseLandInfo; leasePanelScript.setInfo(configLandId, rentalExpenses, _date + "天", createTime, leaseTime, leaseMultiple + "倍", landDescribe); }, _showPlantInfo() { let leasePanel = cc.instantiate(this.plantInfoPrefabs); let parent = cc.find('Canvas/UICamera/DAPPContainer'); leasePanel.parent = parent; leasePanel.setPosition(0, 0); // leasePanel.zIndex = 999; let leasePanelScript = leasePanel.getComponent("PlantInfo"); let _harvest = 0; if (this.leaseLandInfo.leaseDate === 1) { _harvest = this.leaseLandInfo.seedInfo.harvest1; } else if (this.leaseLandInfo.leaseDate === 2) { _harvest = this.leaseLandInfo.seedInfo.harvest2; } else if (this.leaseLandInfo.leaseDate === 3) { _harvest = this.leaseLandInfo.seedInfo.harvest3; } //price,maturity,plantStart,harvestQuantity,describe let { name, priceCnt, maturity, seedDescribe } = this.leaseLandInfo.seedInfo; leasePanelScript.setInfo(name, priceCnt, maturity + "天", this.leaseLandInfo.plantStart, _harvest, seedDescribe); }, //更新收获的状态 updateHarvest() { //todo 后续看看如何刷新,现在走的是开始刷新一次 // let _workingBuilding = housingTemp_farmland.getComponent("WorkingBuilding"); // //获得服务器种植日期毫秒 // let [_day, _hour, _minutes, _seconds] = date.remainFromMillisecond(_leaseLandInfo.plantDaysMill); // let _maturityHour = _leaseLandInfo.seedInfo.maturity * 24 // let _ratio = _hour / _maturityHour; // // console.log("生成的:" + _ratio); // if (_ratio > 0.5) { // _workingBuilding.onSetGrow(1, _spriteFrame); // } else if (_ratio >= 0) { // _workingBuilding.onSetGrow(2, _spriteFrame); // }else if (_leaseLandInfo.plantDaysMill <= 0) { // //如果传回的毫秒是小于零,说明成熟了 // //成熟阶段 // _workingBuilding.onSetGrow(3, _spriteFrame); // //todo,如果时间小的,走收获,收获成果实 // // console.log("土地:", _userLeaseLand[j].configLandId, "已经成熟,可以操作收取果实了!!"); // //todo 土地可收获状态 // leaseFarmlandInfoScript.onShowHarvest(); // } }, //检查土地状态 onCheckLand(configLandId) { GlobalD.GameData.getLandState({ landId: configLandId, callback: (value) => { console.log("检查土地数据:" + JSON.stringify(value.msg)); //这里只判断土地是否过期 if (706 === value.code) { //土地到期,没有更新刷新的处理刷新 GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), configLandId + "号," + value.msg, 2); //重置锁定状态显示 this.onLockLand(); } } }); }, /** * 场景有多个收获预制时候,用GameData限制 * 点击之后,重置土地信息, 并且收入进仓库果实列表中去 * 需要防多次触发 */ onShowHarvest() { this.harvestNode.active = true; }, /** * 场景有多个收获预制时候,用GameData限制 * 点击之后,偷取果实 * 需要防多次触发 */ onShowStealHarvest() { this.stealHarvestNode.active = true; }, onHideStealHarvest() { this.stealHarvestNode.active = false; }, /** * 设置总体信息面板显示 * @param {boolean} bActive */ onSetInfoBoxActive(bActive) { this.giveOutLightNode.active = bActive; if (!this.bSelfLand) { // console.log("其他用户的不用显示面板"); return; } if (this.leaseLandInfo) { this.infoBox.active = bActive; if (bActive) { if (this.showTimeOut) { clearTimeout(this.showTimeOut); this.showTimeOut = null; } //自动隐藏面板 this.showTimeOut = setTimeout(() => { this.infoBox.active = false; }, 5000) } } }, onDestroy() { if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } if (this.showTimeOut) { clearTimeout(this.showTimeOut); this.showTimeOut = null; } } });