import { _decorator, Component, Node, tween, Widget, UITransform, Prefab, instantiate, JsonAsset, ProgressBar } from 'cc'; import { Http } from '../core/net/Http'; import { ConfigData } from '../Data/ConfigData'; import { g } from '../Data/g'; import { AchievementItem } from './AchievementItem'; const { ccclass, property } = _decorator; @ccclass('AchievementWindow') export class AchievementWindow extends Component { @property({ type: Node }) public displayNode: Node = null; @property({ type: ProgressBar }) public progressBar: ProgressBar = null; /** * 需要添加item的节点 */ @property({ type: Node }) public contentNode: Node = null; /** * item预制体 */ @property({ type: Prefab }) public lvPrefab: Prefab = null; private widget: Widget; private http: Http; /** * 解析出的配置数据 */ private jsonArray: Array; /** * 等级进度Map */ private progressArr: Array; async start() { this.progressArr = new Array(); this.progressArr.push(0.1); this.progressArr.push(0.33); this.progressArr.push(0.55); this.progressArr.push(0.77); this.progressArr.push(1); this.http = this.node.getComponent(Http); let getedArr: Array = await this.queryGetedData(); //读取配置文件 this.jsonArray = ConfigData.configMap.get("lvlreward"); //设置进度 this.progressBar.progress = this.getProgress() //深度复制 let reJsonArr = this.jsonArray.slice(0); reJsonArr.reverse().forEach(element => { let lvNode = instantiate(this.lvPrefab); let item: AchievementItem = lvNode.getComponent(AchievementItem); item.redNum.string = element.value + ""; item.title.string = element.id + ""; item.gradeRight.string = element.lvl; item.id = element.id; if (element.lvl <= g.userData.getLevel()) { item.canGet.node.active = true; item.geted.node.active = false; item.unGet.node.active = false; } else { item.unGet.node.active = true; item.canGet.node.active = false; item.geted.node.active = false; } if (getedArr.indexOf(element.id + "") != -1) { item.geted.node.active = true; item.unGet.node.active = false; item.canGet.node.active = false; } this.contentNode.addChild(lvNode); }); this.widget = this.displayNode.getComponent(Widget); tween(this.widget).to(0.5, { editorBottom: -30 }, { easing: "sineOut" }).start(); } /** * 关闭动画 */ onClose() { tween(this.widget).to(0.3, { editorBottom: this.displayNode.getComponent(UITransform).height * -1 }, { easing: "sineIn" }).call(() => { this.node.parent.destroy(); }).start(); } /** * 获取已领取奖励 */ async queryGetedData() { let data = await this.http.send("/api/levelReward/levelRewardList"); return data.data; } getProgress() { //获取当前等级 let level = g.userData.getLevel(); //获取当前高一级等级下标 let levelNext = null; for (let i = 0; i < this.jsonArray.length; i++) { if (this.jsonArray[i]["lvl"] >= level) { levelNext = i; break; } } //不高于配置最高等 if (levelNext != null) { let result: number = 0; if ((levelNext - 1) >= 0) { result = (this.progressArr[levelNext] - this.progressArr[levelNext - 1]) * (level - this.jsonArray[levelNext - 1]["lvl"]) / (this.jsonArray[levelNext]["lvl"] - this.jsonArray[levelNext - 1]["lvl"]) return result + this.progressArr[levelNext - 1]; } result = this.progressArr[levelNext] * level / this.jsonArray[levelNext]["lvl"] return result; } return 1; } }