123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- const HomeApi = require("../net/HomeApi");
- const GameModule = require("../utils/GameModule");
- const { GameNotificationKey } = require("../utils/GameEnum")
- const AlertManager = require('../utils/AlertManager')
- cc.Class({
- extends: cc.Component,
- properties: {
- scrollView: cc.ScrollView,
- levelHomeItem: cc.Prefab,
- levelHomeTop: cc.Prefab,
- levelHomeBottom: cc.Prefab,
- minContentPosition: -150,
- _unlockBuilding: [],
- firstLoad: true,
- },
- /**
- * 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.topScript) {
- this.topScript.init(this.cityId);
- }
- 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.unlockBuilding = [];
- this.matchScreenSize();
- let topNode = cc.instantiate(this.levelHomeTop);
- this.topScript = topNode.getComponent('LevelHomeTop');
- this.topScript.init(this.cityId);
- 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);
- GameEvent.on(GameNotificationKey.showCatFlyAnimation, this, () => {
- this.scrollView.scrollToTop(0.2);
- });
- GameEvent.on(GameNotificationKey.ReloadLevelHomeData, this, () => {
- this.refreshTheme();
- this.getNetworkData();
- });
- GameEvent.on(GameNotificationKey.ResetLevelHomePaddingBottom, this, () => {
- this.resetPaddingBottom();
- })
- },
- /**
- * 适配不同高度的屏幕尺寸
- */
- 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;
- this.scrollView.elastic = false;
- // 底部加多一块100px的内边距, 让底楼不要完全显示出来
- this.scrollView.content.getComponent(cc.Layout).paddingBottom = paddingY - 100;
-
- },
- resetPaddingBottom() {
- let initHeight = 1624;
- let vsize = cc.view.getVisibleSize()
- let paddingY = (initHeight - vsize.height) / 2;
- if (GameModule.userInfo.stars >= 20) {
- this.scrollView.elastic = true;
- // 底部加多一块100px的内边距, 让底楼不要完全显示出来
- this.scrollView.content.getComponent(cc.Layout).paddingBottom = paddingY - 100;
- } else {
- this.scrollView.elastic = false;
- // 底部加多一块100px的内边距, 让底楼不要完全显示出来
- this.scrollView.content.getComponent(cc.Layout).paddingBottom = paddingY - 275;
- }
- this.scrollView.scrollToBottom(0);
- },
- // 用来访问自己家园时, 重置scrollView位置
- start() {
- this.scrollView.scrollToBottom(0.0);
- },
- // 用来访问好友家园时, 重置scrollView位置
- onEnable() {
- },
- getNetworkData(callback) {
- // 获取目标用户的建筑
- HomeApi.getUserBuildings(this.uid, this.cityId, (responseData) => {
-
- // 清空数据
- this.buildingInfos = [];
- // 满级后去别的城市就置零
- GameModule.userInfo.levelHomeItemFullCount = 0;
- let sortArray = responseData.buildings.sort((a, b) => {
- return a.buildingId < b.buildingId;
- });
- let offlineGrossIncome = 0;
- sortArray.map((value, index, array) => {
- let model = Global.BuildingManager.getBuildingInfo(this.cityId, value.buildingId, value.level)
- this._unlockBuilding[index] = model.isUnlocked ? 1 : 0;
- if (model.isFull() && this.cityId === Global.devCityId) {
- try {
- GameEvent.fire(GameNotificationKey.LevelHomeItemBuildingFull);
- } catch (error) {
- console.log(error);
- }
- }
- model.coinCount = value.coinCount;
- model.artists = value.artists || [];
- if (model.artists.length > 0) { // 有艺人入驻的情况
-
- let addition = 0;
- for (let i = 0; i < model.artists.length; i++) {
- let artist = model.artists[i];
- addition += artist.stationJobLevel + 1;
- }
- offlineGrossIncome += (model.coinCount * (model.rate * addition));
- } else { // 无艺人入驻时
- offlineGrossIncome += (model.coinCount * model.rate);
- }
- this.buildingInfos.push(model);
- });
- this._unlockBuilding = this._unlockBuilding.reverse();
- GameModule.userInfo.setUserInfo(responseData.user);
- GameModule.userInfo.setGrossIncomeAndStars(responseData.grossIncome, responseData.user.stars);
- // this.resetPaddingBottom();
- callback && callback();
- // 开始设置建筑
- this.configBuildings();
- // 计算离线收益
- // if (this.firstLoad) {
- // this.firstLoad = false;
- // AlertManager.showOfflineGrossIncome(offlineGrossIncome);
- // }
- }, (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, this._unlockBuilding, (newBuildingInfo) => {
- this.buildingInfos[i] = newBuildingInfo;
- });
- }
- },
- onDestroy() {
- GameEvent.off(GameNotificationKey.showCatFlyAnimation, this);
- },
- });
|