| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- import { Data } from "../core/data/Data";
- import { DataSystem } from "../core/data/DataSystem";
- import { MapData } from "../core/data/MapData";
- import { Http } from "../core/net/Http";
- import { ConfigData } from "../data/ConfigData";
- import { UserData } from "../data/UserData";
- import { RedPointData } from "../main/RedPointData";
- import { FormationData } from "./formation/FormationData";
- /**
- * 用户英雄数据
- * @author 袁浩
- */
- export class UserHeroData extends MapData<number, UserHero> {
- /**
- * 已拥有的武将
- */
- public haveHeros: number[] = [];
- /**
- * 未拥有的武将
- */
- public notHavetHeros: number[] = [];
- /**
- * 从服务端拉取数据
- * @param http
- */
- public async pull(http: Http) {
- let result = await http.send("/api/hero/getHero");
- if (result && result.data) {
- let heroConfig: { [key: string]: Hero_Client } = DataSystem.getData(ConfigData).get("general");
- let haveHeros = [];//已拥有的英雄
- let notHavetHeros = [];//未拥有的英雄
- for (let key in heroConfig) {
- let client = JSON.parse(JSON.stringify(heroConfig[key]));//不污染配置
- let serverHero = result.data[key];
- if (serverHero && serverHero.active) {//如果已经激活
- haveHeros.push(client.id);
- this.set(client.id, { client: client, server: serverHero });
- }
- else {
- notHavetHeros.push(client.id);
- this.set(client.id, { client: client, server: serverHero || null });
- }
- }
- this.haveHeros = haveHeros;
- this.notHavetHeros = notHavetHeros;
- }
- }
- /**
- * 添加英雄
- * @param id
- */
- public addHero(id: number) {
- id = parseInt(id + "");
- let clientData = DataSystem.getData(ConfigData).get("general")[id];
- let chip = 0;
- if (this.has(id) && this.get(id).server) {//如果原来有碎片
- chip = this.get(id).server.chip;
- }
- let hero: UserHero = {
- client: clientData,
- server: {
- id: id,
- chip: chip,
- star: clientData.initStar,
- lv: DataSystem.getData(UserData).campLv,
- percent: 0,
- active: true
- }
- }
- if (this.haveHeros.indexOf(id) == -1) {//首次获得
- this.haveHeros.push(id);
- let index = this.notHavetHeros.indexOf(id);
- if (index != -1) {
- this.notHavetHeros.splice(index, 1);
- }
- DataSystem.getData(RedPointData).herosReward.push(id);
- }
- this.set(id, hero);
- }
- /**
- * 添加碎片
- * @param id 英雄编号
- * @param chip 碎片数量
- */
- public addChip(id: number, chip: number) {
- id = parseInt(id + "");
- chip = parseInt(chip + "");
- let hero: UserHero = this.get(id);
- if (hero && hero.server) {
- hero.server.chip += chip;
- }
- else {
- let clientData = DataSystem.getData(ConfigData).get("general")[id];
- hero = {
- client: clientData,
- server: {
- id: id,
- chip: chip,
- star: clientData.initStar,
- active: false,
- lv: DataSystem.getData(UserData).campLv,
- percent: 0
- }
- }
- }
- this.set(id, hero);
- }
- public sort(heroList: number[], camp: number, preUnlockHeros: number[] = [], nextUnlockHeros: number[] = [], nextCampLv: number = 0) {
- let userHeroData = DataSystem.getData(UserHeroData);
- let formationData = DataSystem.getData(FormationData);
- let formationHeroList = [];
- let noformationHeroList = [];
- let unlock_hechengHeroList = [];
- let unlock_huoquHeroList = [];
- let lockHeroList = [];
- for (let i = 0; i < heroList.length; i++) {
- const hero = userHeroData.get(heroList[i]);
- if (preUnlockHeros.indexOf(hero.client.id) != -1) {//如果已经解锁
- hero.client.isunlock = true;
- }
- if (hero.client.isunlock || (nextUnlockHeros.indexOf(hero.client.id) != -1 && camp == 0)) {//如果已经解锁或者即将解锁
- if (camp == 0 || hero.client.camp == camp) {
- if (hero.server && hero.server.active) {//已解锁
- if (!!formationData.getIDByHero(hero.client.id)) {//在阵上
- formationHeroList.push(hero);
- }
- else {
- noformationHeroList.push(hero);
- }
- }
- else {
- if (hero.client.isunlock) {//如果已经解锁
- let chip = !!hero.server ? hero.server.chip : 0;
- if (chip >= hero.client.needChip) {//合成
- unlock_hechengHeroList.push(hero);
- }
- else {//获取
- unlock_huoquHeroList.push(hero);
- }
- }
- else {
- lockHeroList.push(hero);
- }
- }
- hero.client.unlockLv = hero.client.isunlock ? nextCampLv - 1 : nextCampLv;
- }
- }
- }
- formationHeroList.sort((a: UserHero, b: UserHero): number => {
- if (a.client.color > b.client.color) {
- return -1;
- }
- else if (a.client.color < b.client.color) {
- return 1;
- }
- else {
- if (a.server.star > b.server.star) {
- return -1;
- }
- else if (a.server.star < b.server.star) {
- return 1;
- }
- else {
- if (a.server.lv > b.server.lv) {
- return -1;
- }
- else if (a.server.lv < b.server.lv) {
- return 1;
- }
- if (a.server.id > b.server.id) {
- return -1;
- }
- else if (a.server.id < b.server.id) {
- return 1;
- }
- return 0;
- }
- }
- });
- noformationHeroList.sort((a: UserHero, b: UserHero): number => {
- if (a.client.color > b.client.color) {
- return -1;
- }
- else if (a.client.color < b.client.color) {
- return 1;
- }
- else {
- if (a.server.star > b.server.star) {
- return -1;
- }
- else if (a.server.star < b.server.star) {
- return 1;
- }
- else {
- if (a.server.lv > b.server.lv) {
- return -1;
- }
- else if (a.server.lv < b.server.lv) {
- return 1;
- }
- if (a.server.id > b.server.id) {
- return -1;
- }
- else if (a.server.id < b.server.id) {
- return 1;
- }
- return 0;
- }
- }
- });
- unlock_hechengHeroList.sort((a: UserHero, b: UserHero): number => {
- if (a.client.color > b.client.color) {
- return -1;
- }
- else if (a.client.color < b.client.color) {
- return 1;
- }
- else {
- if (a.client.id > b.client.id) {
- return -1;
- }
- else if (a.client.id < b.client.id) {
- return 1;
- }
- return 0;
- }
- });
- unlock_huoquHeroList.sort((a: UserHero, b: UserHero): number => {
- if (a.client.color > b.client.color) {
- return -1;
- }
- else if (a.client.color < b.client.color) {
- return 1;
- }
- else {
- if (a.client.id > b.client.id) {
- return -1;
- }
- else if (a.client.id < b.client.id) {
- return 1;
- }
- return 0;
- }
- });
- lockHeroList.sort((a: UserHero, b: UserHero): number => {
- if (a.client.unlockLv > b.client.unlockLv) {
- return -1;
- }
- else if (a.client.unlockLv < b.client.unlockLv) {
- return 1;
- }
- else {
- if (a.client.color > b.client.color) {
- return -1;
- }
- else if (a.client.color < b.client.color) {
- return 1;
- }
- else {
- if (a.client.id > b.client.id) {
- return -1;
- }
- else if (a.client.id < b.client.id) {
- return 1;
- }
- return 0;
- }
- }
- });
- return formationHeroList.concat(noformationHeroList).concat(unlock_hechengHeroList).concat(unlock_huoquHeroList).concat(lockHeroList);
- }
- }
- export interface UserHero {
- client: Hero_Client;
- server: Hero_Server;
- }
- export interface Hero_Client {
- id: number;
- name: string;
- isunlock: boolean;
- camp: number;
- color: number;
- unlockLv: number;
- initStar: number;
- needChip: number;
- hero_res: string;
- attack: number;
- attSpeed: number;
- commander: number;
- upRatio: string;
- skillID: number;
- introduce: string;
- }
- export interface Hero_Server {
- /**
- * 编号
- */
- id: number;
- /**
- * 碎片
- */
- chip: number;
- /**
- * 武将星级
- */
- star: number;
- /**
- * 武将等级
- */
- lv: number;
- /**
- * 升级进度
- */
- percent: number;
- /**
- * 是否已拥有
- */
- active: boolean;
- }
|