const HomeApi = require("../net/HomeApi"); const GameModule = require("../utils/GameModule"); const { GameNotificationKey } = require("../utils/GameEnum") cc.Class({ extends: cc.Component, properties: { scrollView: cc.ScrollView, levelHomeItem: cc.Prefab, levelHomeTop: cc.Prefab, levelHomeBottom: cc.Prefab, minContentPosition: -150, }, /** * home 初始化方法, 所有的初始化操作在这里操作, 必须在加入父节点之前调用 * */ init(uid, cityId) { this.uid = uid; this.cityId = cityId; this.buildingInfos = []; this.node.parent = cc.find("Canvas/game"); this.refreshTheme(); this.getNetworkData(); }, refreshTheme() { if (this.buildings) { for (let i = 0; i < this.buildings.length; i++) { let itemScript = this.buildings[i]; itemScript.init(this.cityId, i + 1); } } if (this.bottomScript) { this.bottomScript.init(this.cityId); } }, // LIFE-CYCLE CALLBACKS: onLoad() { this.buildings = []; this.matchScreenSize(); let topNode = cc.instantiate(this.levelHomeTop); this.scrollView.content.addChild(topNode); for (let i = 0; i < 5; i++) { let item = cc.instantiate(this.levelHomeItem); let itemScript = item.getComponent('LevelHomeItem'); itemScript.init(this.cityId, i + 1); this.scrollView.content.addChild(item); this.buildings.push(itemScript); } let bottomNode = cc.instantiate(this.levelHomeBottom); this.bottomScript = bottomNode.getComponent('LevelHomeBottom'); this.bottomScript.init(this.cityId); this.scrollView.content.addChild(bottomNode); this.scrollView.node.on("scrolling", (event) => { if (this.scrollView._isOutOfBoundary()) { if (this.scrollView._outOfBoundaryAmount.y > 0) { // 超出上面的界限 this.scrollView._outOfBoundaryAmount.y = 0; this.scrollView._adjustContentOutOfBoundary(); } else { // 超出下面的界限 if (this.scrollView._outOfBoundaryAmount.y < this.minContentPosition) { if (this.recordScrollViewPosition) { this.scrollView.content.setPosition(this.recordScrollViewPosition); return; } else { this.recordScrollViewPosition = this.scrollView.getContentPosition(); } } else { this.recordScrollViewPosition = null; } } } }, this); }, /** * 适配不同高度的屏幕尺寸 */ matchScreenSize() { let initHeight = 1624; let vsize = cc.view.getVisibleSize() let paddingY = (initHeight - vsize.height) / 2; if (paddingY < 0) { paddingY = 0; } this.scrollView.content.getComponent(cc.Layout).paddingTop = paddingY; // 底部加多一块100px的内边距, 让底楼不要完全显示出来 this.scrollView.content.getComponent(cc.Layout).paddingBottom = paddingY - 100; }, // 用来访问自己家园时, 重置scrollView位置 start() { this.scrollView.scrollToBottom(0.0); }, // 用来访问好友家园时, 重置scrollView位置 onEnable() { }, getNetworkData(callback) { // 获取目标用户的建筑 HomeApi.getUserBuildings(this.uid, this.cityId, (responseData) => { let reverseArray = responseData.buildings.reverse(); reverseArray.map((value, index, array) => { let model = Global.BuildingManager.getBuildingInfo(this.cityId, value.buildingId, value.level) if (model.isFull() && this.cityId === Global.cityId) { try { GameEvent.fire(GameNotificationKey.LevelHomeItemBuildingFull); } catch (error) { console.log(error); } } model.coinCount = value.coinCount; model.artists = value.artists || []; this.buildingInfos.push(model); }); GameModule.userInfo.setUserInfo(responseData.user); GameModule.userInfo.setGrossIncomeAndStars(responseData.grossIncome, responseData.stars); callback && callback(); // 开始设置建筑 this.configBuildings(); }, (error) => { console.log("error: " + error); }); }, configBuildings() { for (let i = 0; i < this.buildings.length; i++) { let itemScript = this.buildings[i]; itemScript.config(this.buildingInfos[i], this.uid); } }, });