| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import { _decorator, Component, Sprite, Enum } from "cc";
- import { DataSystem } from "../core/data/DataSystem";
- import { ConfigData } from "../data/ConfigData";
- import { platform } from "../data/jsb/platform";
- import { UserData } from "../data/UserData";
- import { UserHeroData } from "../hero/UserHeroData";
- import { TaskData } from "../task/TaskData";
- import { RedPointData } from "./RedPointData";
- const { ccclass, property } = _decorator;
- /**
- * 红点类型
- */
- export enum RedPointType {
- /**
- * 兵营是否可升级
- */
- Camp,
- /**
- * 是否有可升星、合成武将
- */
- Hero,
- /**
- * 是否有可领取奖励的任务
- */
- Task,
- /**
- * 是否有可领取的图鉴奖励
- */
- HeroReward,
- /**
- * 是否有抽奖次数
- */
- Draw,
- /**
- * 是否有征收粮食次数和奖励
- */
- GrainLevies,
- /**
- * 是否有贡献可领取
- */
- ContributionReward,
- /**
- *是否可领取切磋宝箱
- */
- ReceiveFightBox
- }
- /**
- * 红点组件
- * @author 袁浩
- * @description 给玩家提示
- */
- @ccclass("RedPoint")
- export class RedPoint extends Component {
- @property({ tooltip: "红点类型", type: Enum(RedPointType) })
- public type: RedPointType = RedPointType.HeroReward;
- /**
- * 某些红点是在列表项中的,则需要传递此值
- * 图鉴列表项:武将编号、任务列表:任务索引、征粮:索引
- */
- public param: number;
- private icon: Sprite;
- start() {
- this.icon = this.getComponent(Sprite);
- this.icon.enabled = false;
- //首次加载判断一次
- let data = DataSystem.getData(RedPointData);
- this.checkHerosReward(data);
- this.checkDraw(data);
- this.checkGrainLevies(data);
- this.checkTask();
- this.checkCamp();
- this.checkHeros();
- this.checkFission(data);
- this.checkFightBox(data);
- }
- update() {
- let data = DataSystem.getData(RedPointData);
- DataSystem.watch(RedPointData, "herosReward") && this.checkHerosReward(data);
- DataSystem.watch(RedPointData, "canDraw") && this.checkDraw(data);
- DataSystem.watch(RedPointData, "grainLevies") && this.checkGrainLevies(data);
- DataSystem.watch(TaskData, "hasReceived") && this.checkTask();
- DataSystem.watch(UserData, "prestige") && this.checkCamp();
- DataSystem.watch(RedPointData, "checkFission") && this.checkFission(data);
- DataSystem.watch(UserData, "contribution") && this.checkFission(data);
- DataSystem.watch(RedPointData, "canReceiveFightBox") && this.checkFightBox(data);
- this.checkHeros();
- }
- private checkCamp() {
- if (this.type == RedPointType.Camp) {
- let userData = DataSystem.getData(UserData);
- let barrackConfig = DataSystem.getData(ConfigData).get('barrack');
- if (barrackConfig[userData.campLv + 1]) {//如果没满级
- let needPrestige = barrackConfig[userData.campLv].cost;
- this.icon.enabled = userData.prestige >= needPrestige;
- }
- else {
- this.icon.enabled = false;
- }
- }
- }
- /**
- * 升星验证
- */
- private checkHeros() {
- if (this.type == RedPointType.Hero) {
- let userHero = DataSystem.getData(UserHeroData);
- let canUpstar = false;
- let canCompose = false;
- for (let i = 0; i < userHero.haveHeros.length; i++) {
- let hero = DataSystem.getData(UserHeroData).get(userHero.haveHeros[i]);
- let starConfig = DataSystem.getData(ConfigData).get("star")[hero.server.star];
- if (starConfig && hero.server.chip >= starConfig.nextReq) {
- canUpstar = true;
- break;
- }
- }
- for (let i = 0; i < userHero.notHavetHeros.length; i++) {
- let hero = DataSystem.getData(UserHeroData).get(userHero.notHavetHeros[i]);
- if (hero.server && !hero.server.active && hero.server.chip >= hero.client.needChip) {
- canCompose = true;
- }
- }
- this.icon.enabled = canUpstar || canCompose;
- }
- }
- /**
- * 图鉴奖励验证
- * @param data
- */
- private checkHerosReward(data: RedPointData) {
- if (this.type == RedPointType.HeroReward) {
- this.icon.enabled = data.herosReward.length > 0;
- }
- }
- /**
- * 抽奖验证
- * @param data
- */
- private checkDraw(data: RedPointData) {
- if (this.type == RedPointType.Draw) {
- this.icon.enabled = data.canDraw;
- }
- }
- /**
- * 征粮验证
- * @param data
- */
- private checkGrainLevies(data: RedPointData) {
- if (this.type == RedPointType.GrainLevies) {
- let hasLeviesReceive = data.grainLevies.times > 0;
- if (!hasLeviesReceive) {
- for (let i = 0; i < data.grainLevies.leviesDatas.length; i++) {
- if (!data.grainLevies.leviesDatas[i].isReceive) {
- hasLeviesReceive = true;
- break;
- }
- }
- }
- this.icon.enabled = hasLeviesReceive;
- }
- }
- /**
- * 检查任务
- * @param data
- */
- private checkTask() {
- let data = DataSystem.getData(TaskData);
- if (this.type == RedPointType.Task) {
- this.icon.enabled = data.hasReceived;
- }
- }
- /**
- * 神台红点检查
- * @param data
- */
- private checkFission(data: RedPointData) {
- if (this.type == RedPointType.ContributionReward) {
- this.icon.enabled = data.checkFission;
- !this.icon.enabled && (this.icon.enabled = DataSystem.getData(UserData).contribution >= 3000);
- }
- }
- /**
- * 检查切磋宝箱
- */
- private checkFightBox(data: RedPointData) {
- if (this.type == RedPointType.ReceiveFightBox) {
- this.icon.enabled = data.canReceiveFightBox;
- }
- }
- }
|