123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- const DWTool = require('../utils/DWTool');
- const { GameNotificationKey } = require("../utils/GameEnum");
- const ThemeManager = require("../utils/ThemeManger");
- const HomeApi = require("../net/HomeApi");
- cc.Class({
- extends: cc.Component,
- properties: {
- // Public Properties
- /** 当前显示的图片 */
- buildSprite: cc.Sprite,
- // 两边的柱子
- pillars: [cc.Sprite],
- bottomBg: cc.Sprite,
- lockBottomBg: cc.Sprite,
- /** 未解锁状态的节点 */
- lockNode: cc.Node,
- /** 需要花费所有金币 */
- costLabel: cc.Label,
- /** 建筑昵称 */
- buildNameLabel: cc.Label,
- /** 这里当做升级建筑按钮 */
- updateBtn: cc.Sprite,
- lockBottomNode: cc.Node,
- /** 等级节点 */
- levelProgressNode: cc.Node,
- /** 等级进度条 */
- levelProgressBar: cc.ProgressBar,
- /** 等级 */
- levelProgressLabel: cc.RichText,
- /** 生产金币节点 */
- rateProgressNode: cc.Node,
- /** 生产金币进度条 */
- rateProgressBar: cc.ProgressBar,
- /** 生产了多少金币 */
- rateProgressLabel: cc.Label,
- /** 倒计时 */
- countdownLabel: cc.Label,
- artistList: cc.Node,
- artistListItem: cc.Prefab,
- openDoorSkeletion: sp.Skeleton,
- updateSkeletion: sp.Skeleton,
- // 显示加成的节点
- additionNode: cc.Node,
- // 显示加成倍数
- additionLabel: cc.Label,
- // 满级提示
- maxNode: cc.Node,
- addition: {
- get: function () {
- if (!this._addition) {
- this._addition = 0;
- }
- return this._addition;
- },
- set: function (value) {
- this._addition = value;
- if (this._addition === 0) {
- this.additionNode.active = false;
- } else {
- this.additionNode.active = true;
- this.additionLabel.string = `X${this._addition}`;
- }
- }
- },
- countDown: {
- get: function () {
- if (!this._countDown) {
- this._countDown = 0;
- }
- return this._countDown;
- },
- set: function (value) {
- this._countDown = value;
- this.countdownLabel.string = DWTool.calculateTime(this._countDown);
- this._preCountDown = this._countDown;
- }
- },
- rate: {
- get: function () {
- if (!this._rate) {
- this._rate = 0;
- }
- return this._rate;
- },
- set: function (value) {
- this._rate = value;
- if (this.addition > 0) {
- this._rate = this._rate * this.addition;
- }
- this.rateProgressLabel.string = DWTool.coinParse(this._rate);
- }
- },
- },
- // LIFE-CYCLE CALLBACKS:
- onLoad() {
- this._currentTime = 0;
- this.humanList = [];
- this.isFirstLoad = true;
- // 监听自定义事件
- this.setEventListener();
- },
- // 当该节点active为false时, 重置数据
- onDisable() {
- this.addition = 0;
- this.isFirstLoad = true;
- this.buildingInfo = null;
- for (let child of this.artistList.children) { child.destroy(); }
- for (let child of this.humanList) { child.destroy(); }
- this.countDown = 0;
- this.rate = 0;
- this._currentTime = 0;
- this.levelProgressBar.progress = 0;
- this.rateProgressBar.progress = 0;
- this.levelProgressLabel.string = "";
- },
- onDestroy() {
- GameEvent.off(GameNotificationKey.ResidentArtist, this);
- GameEvent.off(GameNotificationKey.RefreshLevelHomeArtistList, this);
- },
- setEventListener() {
- // 这个是入驻艺人成功时调用的
- GameEvent.on(GameNotificationKey.ResidentArtist, this, (uid, buildingId) => {
- if (this.node.active && this.uid === uid && this.buildingInfo.buildingId === buildingId) {
- HomeApi.friendGetArtistsInBuilding(this.uid, this.buildingInfo.buildingId, (data) => {
- this.artists = data.list || [];
- this.artistListLayout();
-
- }, (code, msg) => {
- console.log(msg);
- })
- }
- });
- // 这个是召回驱赶艺人时调用的
- GameEvent.on(GameNotificationKey.RefreshLevelHomeArtistList, this, (uid, buildingId) => {
- if (this.node.active && this.uid === uid && this.buildingInfo.buildingId === buildingId) {
- HomeApi.friendGetArtistsInBuilding(this.uid, this.buildingInfo.buildingId, (data) => {
- this.artists = data.list || [];
- this.artistListLayout();
-
- }, (code, msg) => {
- console.log(msg);
- })
- }
- });
- },
- /**
- * Public Method, 用来设置建筑背景图
- * @param {*} index
- */
- init(cityId, index) {
- if (arguments.length < 2) {
- throw new Error("init Missing parameter...");
- }
- this.cityId = cityId;
- this.index = index;
- ThemeManager.setItemBuildSpriteFrame(this.cityId, this.buildSprite, index);
- ThemeManager.setItemPillarSpriteFrame(this.cityId, this.pillars);
- ThemeManager.setItemDownSpriteFrame(this.cityId, this.bottomBg);
- ThemeManager.setItemLockDownSpriteFrame(this.cityId, this.lockBottomBg);
- },
- /**
- * Public Method, 配置建筑的内部样式
- * @param {*} buildingInfo 建筑信息
- * @param {*} uid 当前用户的uid
- */
- config(buildingInfo, uid) {
- if (arguments.length < 2) {
- throw new Error("Config Missing parameter...");
- }
- this.buildingInfo = buildingInfo;
- this.uid = uid;
- this.artists = this.buildingInfo.artists;
- // 这里设置一些只需要设置一次的数据
- this.countDown = buildingInfo.rateUnit;
- this.buildNameLabel.string = buildingInfo.name;
- this._notPickupCount = buildingInfo.coinCount;
- if (buildingInfo.coinCount === this.coinArrayMax * 10) {
- this.rateProgressBar.progress = 1;
- this.countdownLabel.string = DWTool.calculateTime(0);
- }
- this.levelProgressBar.progress = buildingInfo.level / Global.BuildingManager.getLevelCount(buildingInfo.buildingId);
- this.levelProgressLabel.string = `<outline color=#ffffff width=2><b><color= #0e689c>LV.${buildingInfo.level}</c></b></outline>`
- if (this.isFirstLoad) {
- this.isFirstLoad = false;
- this.artistListLayout();
- }
- this.layout(buildingInfo);
- },
- artistListLayout() {
- for (let child of this.artistList.children) { child.destroy(); }
- for (let child of this.humanList) { child.destroy(); }
- let self = this;
- let addAddItemToList = function () {
- let addArtistItem = cc.instantiate(self.artistListItem);
- self.artistList.addChild(addArtistItem);
- let addArtistScript = addArtistItem.getComponent('LevelHomeArtistItem');
- addArtistScript.initWithBuildingInfo(self.buildingInfo, self.uid, false);
- }
- let addArtistItemToList = function (artist) {
- let artistItem = cc.instantiate(self.artistListItem);
- self.artistList.addChild(artistItem);
- let artistScript = artistItem.getComponent('LevelHomeArtistItem');
- artistScript.initWithArtistData(self.buildingInfo, self.uid, false, artist);
- }
- let addHuman = function (artist, index) {
- DWTool.loadResPrefab("./prefabs/artist_man")
- .then((prefab) => {
- let human = cc.instantiate(prefab);
- human.getComponent('ArtistMan').init(artist);
- human.getComponent('ArtistMan').direction = (index > 0) ? 1 : -1;
- self.node.addChild(human);
- self.humanList.push(human);
- });
- }
- // 当没有自己艺人, 也没有好友艺人入驻时, 这里还得区分主态和客态
- if (this.artists.length === 0) {
- addAddItemToList();
- // 没有艺人不显示倍数
- this.addition = 0;
- } else {
- // 有艺人入驻要显示倍数
- this.additionNode.active = true;
- if (this.artists.length === 1) {
- let artist = this.artists[0];
- this.addition += artist.stationJobLevel + 1;
- // 这里要区分主态和客态, 去别人家园时, 如果有一个是客态自己的艺人, 那么另一个就是可以入驻的按钮
- if (artist.role === 2) {
- addArtistItemToList(artist);
- addHuman(artist, (Math.random() - 0.5) * 2);
- addAddItemToList();
-
- } else {
-
- addArtistItemToList(artist);
- addHuman(artist, (Math.random() - 0.5) * 2);
- }
- } else {
- for (let i = 0; i < this.artists.length; i++) {
- let artist = this.artists[i];
- this.addition += artist.stationJobLevel + 1;
- addArtistItemToList(artist);
- addHuman(artist, i);
- }
- }
- }
- },
- layout(buildingInfo) {
- if (buildingInfo.isUnlocked) {
- this.lockNode.active = false;
- this.rate = buildingInfo.rate;
- this.maxNode.active = (buildingInfo.hasNext != 1) ? true : false;
- } else {
- this.lockNode.active = true;
- this.countDown = 0;
- this.rateProgressBar.progress = 0;
- this.totalRate = 0;
- this.costLabel.string = 0;
- }
- this.updateBtn.node.active = false;
- },
- update(dt) {
- if (this.buildingInfo) {
- // 不断刷新界面
- this.layout(this.buildingInfo);
- // 只有已经解锁进度条才会走
- if (this.buildingInfo.isUnlocked) {
- // 进度条走完, 开始生产金币
- if (Math.floor(this.rateProgressBar.progress) === 1) {
- this.rateProgressBar.progress = 0;
- this._currentTime = 0;
- } else {
- this._currentTime += dt;
- this.rateProgressBar.progress = this._currentTime / this.countDown;
- let resultCountDown = this.countDown - Math.floor(this._currentTime);
- if (this._preCountDown !== resultCountDown) {
- this.countdownLabel.string = DWTool.calculateTime(resultCountDown);
- this._preCountDown = resultCountDown;
- }
- }
- }
- }
- },
- });
|