const JobPageType = require('../utils/GameEnum').JobPageType;
const JobApi = require('../net/JobApi');
const GameNotificationKey = require('../utils/GameEnum').GameNotificationKey;
const jobLevelList = require('../data/jobLevel');
const jobList = require('../data/job');
const cardList = require('../data/item');
const GameModule = require('../utils/GameModule');
cc.Class({
extends: cc.Component,
properties: {
titleText: cc.RichText,
confirmButton: cc.Button,
confirmText: cc.RichText,
pageView: cc.PageView,
levelUpNode: cc.Node,
bgNode: cc.Node,
top: cc.Node,
consume: cc.Node,
user: cc.Node,
myActorList: [],
changeJobSuccessPrefab: cc.Prefab,
levelUpSuccessPrefab: cc.Prefab,
failPrefab: cc.Prefab,
tipsNode: cc.Node,
tipsLabel: cc.Label,
},
// LIFE-CYCLE CALLBACKS:
onLoad() {
this.node.height = cc.view.getVisibleSize().height;
if (cc.view.getVisibleSize().height >= 1624) {
this.top.getComponent(cc.Widget).top = 50;
this.bgNode.getComponent(cc.Widget).top = -50;
// this.informationNode.getComponent(cc.Widget).top = 185;
// this.infoTop = 185;
}
this.consume.getComponent('Consume').setConfirmButton(this.confirmButton);
},
start() {
},
showFromTalent(type, actors) {
this.myActorList = actors;
this.show(type, this.myActorList.pop(), 0);
},
show(type, actorInfo, zIndex) {
this.type = type;
this.actorInfo = actorInfo;
this.node.parent = cc.find('Canvas');
this.node.active = true;
this.node.zIndex = zIndex + 1;
switch (type) {
case JobPageType.ChangeJob:
this.changeJob();
break;
case JobPageType.ChooseJob:
this.chooseJob(actorInfo);
break;
case JobPageType.LevelUp:
this.levelUp();
break;
}
},
changeJob() {
this.consume.active = true;
this.user.active = false;
this.pageView.node.active = true;
this.levelUpNode.active = false;
this.pageView.getComponent('PVCtrl').bind(this.actorInfo.jobId);
this.titleText.string = '职业转换';
this.confirmText.string = '转职';
this.pageViewScript = this.pageView.getComponent('PVCtrl');
JobApi.changeJobList(this.actorInfo.uid,
(response) => {
this.userPack = response.userPack;
this.bindChangeJobComsume(this.pageViewScript.getSelectedJob());
},
(code, msg) => {
this.showTips('网络错误');
}
);
},
bindChangeJobComsume(selectedJob) {
let needCard = '';
let itemKey = Object.keys(selectedJob.itemInfo)[0];
cardList.forEach((cardInfo) => {
if (cardInfo.id == itemKey) {
needCard = cardInfo;
needCard.number = selectedJob.itemInfo[itemKey];
}
});
this.pageViewScript.bindSelectedJobText();
this.consume.getComponent('Consume').bindChangeJob(selectedJob.gold, needCard, this.userPack);
},
chooseJob() {
this.consume.active = false;
this.user.active = true;
this.pageView.node.active = true;
this.levelUpNode.active = false;
this.pageView.getComponent('PVCtrl').bind();
this.titleText.string = '选择职业';
this.confirmText.string = '确定';
this.pageViewScript = this.pageView.getComponent('PVCtrl');
this.pageViewScript.bindSelectedJobText();
this.bindChooseJob(this.actorInfo);
},
levelUp() {
this.consume.active = true;
this.user.active = false;
this.pageView.node.active = false;
this.levelUpNode.active = true;
this.titleText.string = '进阶';
this.confirmText.string = '进阶';
this.currentJobLevel = null;
this.nextJobLevel = null;
for (var i = 0; i < jobLevelList.length; i++) {
let jobLevelInfo = jobLevelList[i];
if (this.actorInfo.jobId === jobLevelInfo.jobId && this.actorInfo.jobLevel === jobLevelInfo.level) {
this.currentJobLevel = jobLevelInfo;
if (i >= jobLevelList.length - 1) {
return;
}
this.nextJobLevel = jobLevelList[i + 1];
this.spend = this.nextJobLevel.salary;
}
}
let needCard = '';
let itemKey = Object.keys(this.nextJobLevel.itemInfo)[0];
cardList.forEach((cardInfo) => {
if (cardInfo.id == itemKey) {
needCard = cardInfo;
needCard.number = this.nextJobLevel.itemInfo[itemKey];
}
});
this.upgradeName = this.nextJobLevel.name;
this.upgradeLevel = this.nextJobLevel.level;
let self = this;
JobApi.levelUpInfo(this.actorInfo.uid,
(response) => {
this.consume.getComponent('Consume').bindDataLevelUp(self.nextJobLevel.salary, needCard, response.userPack);
this.levelUpNode.getComponent('LevelUp').bind(self.actorInfo, self.nextJobLevel, response.wish);
},
(code, msg) => {
this.showTips('网络错误');
}
);
},
confirmClick() {
switch (this.type) {
case JobPageType.ChangeJob:
var job = this.pageView.getComponent('PVCtrl').getSelectedJob();
this.spend = job.gold;
JobApi.changeJob(this.actorInfo.uid, job.id,
(response, msg) => {
this.onChangeJobSuccess(msg);
},
(code, msg) => {
this.onFail(msg);
});
break;
case JobPageType.ChooseJob:
var job = this.pageView.getComponent('PVCtrl').getSelectedJob();
JobApi.chooseJob(this.actorInfo.uid, job.id,
(response) => {
this.onFail('选择成功', () => {
this.nextChoose();
});
},
(code, msg) => {
this.onFail(msg);
});
break;
case JobPageType.LevelUp:
JobApi.levelUp(this.actorInfo.uid,
(response) => {
this.onLevelUpSuccess();
},
(code, msg) => {
this.onFail(msg);
});
break;
}
},
close() {
this.node.destroy();
this.node.zIndex = 0;
},
nextChoose() {
if (this.myActorList && this.myActorList.length > 0) {
this.actorInfo = this.myActorList.pop();
this.bindChooseJob();
} else {
this.close();
GameEvent.fire(GameNotificationKey.RefreshUserInformation);
}
},
bindChooseJob() {
this.user.getComponent('Actor').bind(this.actorInfo);
},
onChangeJobSuccess(msg) {
GameModule.userInfo.grossIncome -= this.spend;
let self = this;
let targetJob = this.pageViewScript.getSelectedJob();
let lastJob = null;
jobList.forEach(jobInfo => {
if (jobInfo.id === this.actorInfo.jobId) {
lastJob = jobInfo;
}
});
this.changeJobSuccess = cc.instantiate(this.changeJobSuccessPrefab);
this.changeJobSuccess = this.changeJobSuccess.getComponent('ChangeJobSuccess');
this.changeJobSuccess.show(this.node, lastJob, targetJob, () => {
self.close();
});
GameEvent.fire(GameNotificationKey.RefreshUserInformation);
},
onLevelUpSuccess() {
GameModule.userInfo.grossIncome -= this.spend;
let self = this;
this.levelUpSuccess = cc.instantiate(this.levelUpSuccessPrefab);
this.levelUpSuccess = this.levelUpSuccess.getComponent('JobLevelUpSuccess');
this.levelUpSuccess.show(this.node, '进阶成功', '恭喜你的艺人进阶成为:', this.upgradeLevel, this.upgradeName, () => {
self.close();
});
GameEvent.fire(GameNotificationKey.RefreshUserInformation);
},
onFail(msg, callback) {
this.fail = cc.instantiate(this.failPrefab);
this.fail = this.fail.getComponent('JobPageFail');
this.fail.show(this.node, msg, callback);
},
setNeedChooseJobUsers(users) {
this.myActorList = users;
},
pageviewChangeEvent() {
if (this.type === JobPageType.ChangeJob) {
this.bindChangeJobComsume(this.pageViewScript.getSelectedJob());
} else if (this.type === JobPageType.ChooseJob) {
this.pageViewScript.bindSelectedJobText();
}
},
showTips(text) {
this.tipsNode.active = true;
this.tipsLabel.string = text;
this.scheduleOnce(() => {
this.tipsNode.active = false;
}, 2);
}
// update (dt) {},
});