const DWTool = require("../utils/DWTool"); const HomeApi = require("../net/HomeApi"); const { GameNotificationKey } = require("../utils/GameEnum"); const Base64 = require("../lib/Base64").Base64; const AlertManager = require("../utils/AlertManager"); cc.Class({ extends: cc.Component, properties: { content: cc.Node, scrollView: cc.ScrollView, talentBtn: cc.Button, confirmBtn: cc.Button, }, init(buildingInfo, uid, isSelf) { this.buildingInfo = buildingInfo; this.uid = uid; this.isSelf = isSelf; }, // LIFE-CYCLE CALLBACKS: onLoad() { this.node.height = cc.view.getVisibleSize().height; this.contentY = this.content.y = (this.content.height - this.node.height) / 2; this._residentList = []; this._itemScripts = []; this._currentResidentArtist = null; this.getNetworkData(); GameEvent.on(GameNotificationKey.RefreshResidentArtistList, this, () => { for (let child of this.scrollView.content.children) { child.destroy(); } this.getNetworkData(); }); this.confirmEvent = _.debounce(() => { if (this._currentResidentArtist && !this._currentResidentArtist.isStationed) { let reportFormInfo = {}; reportFormInfo["artistUid"] = this._currentResidentArtist.uid; reportFormInfo["buildingId"] = this.buildingInfo.buildingId; reportFormInfo["buildingLevel"] = this.buildingInfo.level; reportFormInfo["targetUid"] = this.uid; HomeApi.friendStation(JSON.stringify(reportFormInfo), (responseData) => { this.close(); // 入驻成功, 要将现有的金币收取, 并且刷新入驻艺人列表 GameEvent.fire(GameNotificationKey.ResidentArtist, this.uid, this.buildingInfo.buildingId); // 触发入驻通知,opt = 5 GameEvent.fire(GameNotificationKey.NoticeRoleOpt, this.uid, 5) }, (code, msg) => { // 亲密度不够 if (code === 814) { AlertManager.showIntimacyBotEnough(); } console.log(msg); }); } else { this.node.destroy(); } }, 1000, true); this.showTalentEvent = _.debounce(() => { this.close(); AlertManager.showTalentAlert(); }, 1000, true); }, onDestroy() { GameEvent.off(GameNotificationKey.RefreshResidentArtistList, this); }, start() { this.content.y = -cc.view.getVisibleSize().height; let s = cc.sequence(cc.moveTo(0.2, 0, this.contentY + 20).easing(cc.easeCubicActionOut()), cc.moveBy(0.05, 0, -20)); this.content.runAction(s); }, getNetworkData() { HomeApi.friendGetArtistsByBuildingId(this.uid, this.buildingInfo.buildingId, (responseData) => { this._residentList = responseData.list || []; this.canBeStationedList = this._residentList.filter(item => item.canBeStationed == 1); this.cannotBeStationedList = this._residentList.filter(item => item.canBeStationed == 0); if (this.canBeStationedList.length === 0) { this.talentBtn.node.active = true; this.confirmBtn.node.active = false; } else { this.talentBtn.node.active = false; this.confirmBtn.node.active = true; } this.layout(); }, (err) => { console.log(err); }); }, layout() { if (this._residentList.length === 0) { this.loadTaletPrefab() .then((result) => { let item = cc.instantiate(result); this.scrollView.content.addChild(item); }); } else { if (this.canBeStationedList.length === 0) { this.loadTaletPrefab() .then((talent) => { let item = cc.instantiate(talent); this.scrollView.content.addChild(item); return this.loadDashPrefab(); }) .then((dash) => { let item = cc.instantiate(dash); this.scrollView.content.addChild(item); return this.loadPlaceholderItemPrefab(); }) .then((cannotBeStationedItem) => { for (let i = 0; i < this.cannotBeStationedList.length; i++) { let item = cc.instantiate(cannotBeStationedItem); let itemScript = item.getComponent(`ArtistResidentItemPlaceholder`); itemScript.init(this.cannotBeStationedList[i]); this.scrollView.content.addChild(item); } }).catch((err) => { console.log(err); }); } else { this.loadItemPrefab() .then((canBeStationedItem) => { for (let i = 0; i < this.canBeStationedList.length; i++) { let item = cc.instantiate(canBeStationedItem); let itemScript = item.getComponent(`ArtistResidentItem`); this._itemScripts.push(itemScript) itemScript.init(this.uid, this.buildingInfo, this.isSelf, this.canBeStationedList[i], (artistData) => { this._currentResidentArtist = artistData; this._itemScripts.forEach(itemScript => { itemScript.setStyle(this._currentResidentArtist.uid); }); }); this.scrollView.content.addChild(item); } if (this.cannotBeStationedList.length > 0) { return this.loadDashPrefab(); } return; }) .then((dash) => { if (!dash) { return; } let item = cc.instantiate(dash); this.scrollView.content.addChild(item); return this.loadPlaceholderItemPrefab(); }) .then((cannotBeStationedItem) => { if (!cannotBeStationedItem) { return; } for (let i = 0; i < this.cannotBeStationedList.length; i++) { let item = cc.instantiate(cannotBeStationedItem); let itemScript = item.getComponent(`ArtistResidentItemPlaceholder`); itemScript.init(this.cannotBeStationedList[i]); this.scrollView.content.addChild(item); } }).catch((err) => { console.log(err); }); } } }, guide() { if (this._itemScripts.length > 0) { let itemScript = this._itemScripts[0]; itemScript.selectItem(); } }, /** * 星探的预制件 */ loadTaletPrefab() { return new Promise((resolve, reject) => { cc.loader.loadRes('./prefabs/artist_resident_talent', cc.Prefab, (error, prefab) => { if (error) { reject(error); } else { resolve(prefab) } }); }); }, /** * 虚线的预制件 */ loadDashPrefab() { return new Promise((resolve, reject) => { cc.loader.loadRes('./prefabs/artist_resident_dash', cc.Prefab, (error, prefab) => { if (error) { reject(error); } else { resolve(prefab) } }); }); }, loadItemPrefab() { return new Promise((resolve, reject) => { cc.loader.loadRes('./prefabs/artist_resident_item', cc.Prefab, (error, prefab) => { if (error) { reject(error); } else { resolve(prefab) } }); }); }, loadPlaceholderItemPrefab() { return new Promise((resolve, reject) => { cc.loader.loadRes('./prefabs/artist_resident_item_placeholder', cc.Prefab, (error, prefab) => { if (error) { reject(error); } else { resolve(prefab) } }); }); }, confirm() { this.confirmEvent(); }, showTalent() { this.showTalentEvent(); }, close() { let finish = cc.callFunc(() => { this.node.destroy(); }, this) this.content.runAction(cc.sequence(cc.moveTo(0.2, 0, -cc.view.getVisibleSize().height).easing(cc.easeCubicActionIn()), finish)); // this.node.destroy(); }, // update (dt) {}, });