| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704 |
- 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;
- }
- }
- });
|