first commit

This commit is contained in:
ytc1012
2025-11-18 18:38:53 +08:00
commit bea9db4488
1582 changed files with 335346 additions and 0 deletions

View File

@@ -0,0 +1,353 @@
import { ServerConfig } from "../config/ServerConfig";
import LoginCommand from "../login/LoginCommand";
import { MapCityData } from "../map/MapCityProxy";
import MapCommand from "../map/MapCommand";
import { NetManager } from "../network/socket/NetManager";
import ArmyProxy, { ArmyCmd, ArmyData } from "./ArmyProxy";
import GeneralCommand from "./GeneralCommand";
import { GenaralLevelConfig, GeneralConfig, GeneralData } from "./GeneralProxy";
import { EventMgr } from "../utils/EventMgr";
export default class ArmyCommand {
//单例
protected static _instance: ArmyCommand;
public static getInstance(): ArmyCommand {
if (this._instance == null) {
this._instance = new ArmyCommand();
}
return this._instance;
}
public static destory(): boolean {
if (this._instance) {
this._instance.onDestory();
this._instance = null;
return true;
}
return false;
}
//数据model
protected _proxy: ArmyProxy = new ArmyProxy();
constructor() {
EventMgr.on(ServerConfig.army_myList, this.onQryArmyList, this);
EventMgr.on(ServerConfig.army_myOne, this.onQryArmyOne, this);
EventMgr.on(ServerConfig.army_dispose, this.onGeneralDispose, this);
EventMgr.on(ServerConfig.army_conscript, this.onGeneralConscript, this);
EventMgr.on(ServerConfig.army_assign, this.onGeneralAssignArmy, this);
EventMgr.on(ServerConfig.army_push, this.onGeneralArmyStatePush, this);
EventMgr.on(ServerConfig.nationMap_scanBlock, this.onNationMapScanBlock, this);
//定时检测自己的军队是否有武将已经征兵完,如果是请求刷新
setInterval(() => {
let myCity: MapCityData = MapCommand.getInstance().cityProxy.getMyMainCity();
if (myCity != null){
let armyList: ArmyData[] = this.proxy.getArmyList(myCity.cityId);
if (armyList == null){
return
}
for (let i: number = 0; i < armyList.length; i++) {
var army = armyList[i];
if (army != null && army.isGenConEnd()){
console.log("有武将征兵完了");
this.qryArmyOne(army.cityId, army.order);
}
}
}
}, 1000);
}
public onDestory(): void {
EventMgr.targetOff(this);
}
public clearData(): void {
this._proxy.clearData();
}
public get proxy(): ArmyProxy {
return this._proxy;
}
/**军队列表回调*/
protected onQryArmyList(data: any, otherData: any): void {
console.log("onQryArmyList", data);
if (data.code == 0) {
let armyDatas: ArmyData[] = this._proxy.updateArmys(data.msg.cityId, data.msg.armys);
EventMgr.emit("update_army_list", armyDatas);
}
}
protected onQryArmyOne(data: any, otherData: any): void {
console.log("onQryArmyOne", data);
if (data.code == 0) {
let armyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army);
let armyDatas: ArmyData[] = this._proxy.getArmyList(data.msg.army.cityId);
EventMgr.emit("update_army_list", armyDatas);
EventMgr.emit("update_army", armyData);
}
}
/**配置将领回调*/
protected onGeneralDispose(data: any, otherData: any): void {
console.log("onGeneralDispose", data);
if (data.code == 0) {
let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army);
console.log("armyData", armyData);
EventMgr.emit("update_army", armyData);
}
}
/**征兵回调*/
protected onGeneralConscript(data: any, otherData: any): void {
console.log("onGeneralConscript", data);
if (data.code == 0) {
LoginCommand.getInstance().proxy.saveEnterData(data.msg);
EventMgr.emit("upate_my_roleRes");
let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army);
EventMgr.emit("update_army", armyData);
EventMgr.emit("conscript_army_success");
}
}
/**出征回调*/
protected onGeneralAssignArmy(data: any, otherData: any): void {
console.log("onGeneralAssignArmy", data);
if (data.code == 0) {
let armyData: ArmyData = this._proxy.updateArmy(data.msg.army.cityId, data.msg.army);
EventMgr.emit("update_army", armyData);
EventMgr.emit("update_army_assign");
}
}
/**军队状态变更*/
protected onGeneralArmyStatePush(data: any): void {
console.log("onGeneralArmyState", data);
if (data.code == 0) {
let armyData: ArmyData = this._proxy.updateArmy(data.msg.cityId, data.msg);
EventMgr.emit("update_army", armyData);
}
}
protected onNationMapScanBlock(data: any): void {
if (data.code == 0) {
for (let i: number = 0; i < data.msg.armys.length; i++) {
let armyData: ArmyData = this._proxy.updateArmy(data.msg.armys[i].cityId, data.msg.armys[i]);
EventMgr.emit("update_army", armyData);
}
}
}
/**我的角色属性*/
public updateMyProperty(datas: any[]): void {
if (datas.length > 0) {
let armyDatas: ArmyData[] = this._proxy.updateArmys(datas[0].cityId, datas);
EventMgr.emit("update_army_list", armyDatas);
}
}
/**获取军队当前体力*/
public getArmyPhysicalPower(armyData: ArmyData): number {
let minPower: number = 100;
for (let i: number = 0; i < armyData.generals.length; i++) {
let general: GeneralData = GeneralCommand.getInstance().proxy.getMyGeneral(armyData.generals[i]);
if (general && minPower > general.physical_power) {
minPower = general.physical_power;
}
}
return minPower;
}
/**获取军队将领列表*/
public getArmyGenerals(armyData: ArmyData): GeneralData[] {
let list: GeneralData[] = [];
for (let i: number = 0; i < armyData.generals.length; i++) {
let general: GeneralData = GeneralCommand.getInstance().proxy.getMyGeneral(armyData.generals[i]);
list.push(general);
}
return list;
}
/**根据将领列表获取军队体力*/
public getArmyPhysicalPowerByGenerals(generals: GeneralData[]): number {
let minPower: number = 100;
for (let i: number = 0; i < generals.length; i++) {
if (generals[i] && minPower > generals[i].physical_power) {
minPower = generals[i].physical_power;
}
}
return minPower;
}
/**获取军队当前士兵数*/
public getArmyCurSoldierCnt(armyData: ArmyData): number {
let cnt: number = 0;
for (let i: number = 0; i < armyData.soldiers.length; i++) {
cnt += armyData.soldiers[i];
}
return cnt;
}
/**根据将领列表获取军队总士兵数*/
public getArmyTotalSoldierCntByGenerals(generals: GeneralData[]): number {
let cnt: number = 0;
let levelCfg: GenaralLevelConfig = null;
for (let i: number = 0; i < generals.length; i++) {
if (generals[i]) {
levelCfg = GeneralCommand.getInstance().proxy.getGeneralLevelCfg(generals[i].level);
cnt += levelCfg.soldiers;
}
}
return cnt;
}
/**获取速度**/
public getArmySpeed(generals: GeneralData[]): number {
let empyt: boolean = true;
let speed: number = 1000000;
let cfg: GeneralConfig = null;
for (let i: number = 0; i < generals.length; i++) {
if (generals[i]) {
cfg = GeneralCommand.getInstance().proxy.getGeneralCfg(generals[i].cfgId);
speed = Math.min(speed, GeneralData.getPrValue(cfg.speed, cfg.speed_grow*generals[i].level, generals[i].speed_added));
empyt = false;
}
}
if (empyt){
return 0;
}else{
return speed;
}
}
public getArmyDestroy(generals: GeneralData[]): number {
let empyt: boolean = true;
let destory: number = 0;
let cfg: GeneralConfig = null;
for (let i: number = 0; i < generals.length; i++) {
if (generals[i]) {
cfg = GeneralCommand.getInstance().proxy.getGeneralCfg(generals[i].cfgId);
destory += GeneralData.getPrValue(cfg.destroy, cfg.destroy_grow*generals[i].level, generals[i].destroy_added);
empyt = false;
}
}
if (empyt){
return 0;
}else{
return destory;
}
}
/**根据将领列表获取军队阵营*/
public getArmyCamp(generals: GeneralData[]): number {
let cnt: number = 0;
let lastCamp: number = 0;
for (let i: number = 0; i < generals.length; i++) {
if (generals[i] && (generals[i].config.camp == lastCamp || lastCamp == 0)) {
lastCamp = generals[i].config.camp;
cnt++;
} else {
break;
}
}
if (cnt >= 3) {
return lastCamp;
}
return 0;
}
public getArmyStateDes(armyData: ArmyData): string {
let stateStr: string = "";
if (armyData.state > 0) {
if (armyData.cmd == ArmyCmd.Return) {
stateStr = "[撤退]";
} else {
stateStr = "[行军]";
}
} else {
if (armyData.cmd == ArmyCmd.Idle) {
stateStr = "[待命]";
} else if (armyData.cmd == ArmyCmd.Reclaim) {
stateStr = "[屯田]";
} else if (armyData.cmd == ArmyCmd.Conscript) {
stateStr = "[征兵]";
} else if (armyData.cmd == ArmyCmd.Garrison) {
stateStr = "[驻守]";
}else {
stateStr = "[停留]";
}
}
return stateStr;
}
/**请求自己的军队信息*/
public qryArmyList(cityId: number): void {
let sendData: any = {
name: ServerConfig.army_myList,
msg: {
cityId: cityId
}
};
NetManager.getInstance().send(sendData);
}
public qryArmyOne(cityId: number, order: number): void {
let sendData: any = {
name: ServerConfig.army_myOne,
msg: {
cityId: cityId,
order:order,
}
};
NetManager.getInstance().send(sendData);
}
/**给军队配置将领*/
public generalDispose(cityId: number = 0, generalId: number = 0, order: number = 0, position: number = 0, otherData: any): void {
let sendData: any = {
name: ServerConfig.army_dispose,
msg: {
cityId: cityId,
generalId: generalId,
order: order,
position: position,
}
};
NetManager.getInstance().send(sendData, otherData);
}
/**给军队征兵*/
public generalConscript(armyId: number = 0, cnts: number[] = [], otherData: any): void {
let sendData: any = {
name: ServerConfig.army_conscript,
msg: {
armyId: armyId,
cnts: cnts,
}
};
NetManager.getInstance().send(sendData, otherData);
}
/**出兵*/
public generalAssignArmy(armyId: number = 0, cmd: number = 0, x: number = 0, y: Number = 0, otherData: any = null): void {
let sendData: any = {
name: ServerConfig.army_assign,
msg: {
armyId: armyId,
cmd: cmd,
x: x,
y: y,
}
};
NetManager.getInstance().send(sendData, otherData);
}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "a02fca78-a476-4f81-8f42-c990e2acb027",
"files": [],
"subMetas": {},
"userData": {
"simulateGlobals": []
}
}

View File

@@ -0,0 +1,185 @@
import DateUtil from "../utils/DateUtil";
/**军队命令*/
export class ArmyCmd {
static Idle: number = 0;//空闲
static Attack: number = 1;//攻击
static Garrison: number = 2;//驻军
static Reclaim: number = 3;//屯田
static Return: number = 4;//撤退
static Conscript: number = 5;//征兵
static Transfer: number = 6;//调动
}
/**军队数据*/
export class ArmyData {
id: number = 0;
cityId: number = 0;
order: number = 0;
generals: number[] = [];
soldiers: number[] = [];
conTimes: number[] = [];
conCnts: number[] = [];
cmd: number = 0;
state: number = 0;
fromX: number = 0;
fromY: number = 0;
toX: number = 0;
toY: number = 0;
startTime: number = 0;
endTime: number = 0;
x: number = 0;
y: number = 0;
static createFromServer(serverData: any, armyData: ArmyData = null): ArmyData {
let data: ArmyData = armyData;
if (armyData == null) {
data = new ArmyData();
}
data.id = serverData.id;
data.cityId = serverData.cityId;
data.order = serverData.order;
data.generals = serverData.generals;
data.soldiers = serverData.soldiers;
data.conTimes = serverData.con_times;
data.conCnts = serverData.con_cnts;
data.state = serverData.state;
data.cmd = serverData.cmd;
if (data.cmd == ArmyCmd.Return) {
//返回的时候 坐标是反的
data.fromX = serverData.to_x;
data.fromY = serverData.to_y;
data.toX = serverData.from_x;
data.toY = serverData.from_y;
} else {
data.fromX = serverData.from_x;
data.fromY = serverData.from_y;
data.toX = serverData.to_x;
data.toY = serverData.to_y;
}
if (data.cmd == ArmyCmd.Idle || data.cmd == ArmyCmd.Conscript) {
//代表是停留在城池中
data.x = data.fromX;
data.y = data.fromY;
} else {
data.x = data.toX;
data.y = data.toY;
}
data.startTime = serverData.start * 1000;
data.endTime = serverData.end * 1000;
return data;
}
public isGenConEnd():boolean {
for (let index = 0; index < this.conTimes.length; index++) {
const conTime = this.conTimes[index];
if (conTime == 0) {
continue
}
if (DateUtil.isAfterServerTime(conTime*1000)){
return true;
}
}
return false
}
}
export default class ArmyProxy {
protected _maxArmyCnt: number = 5;//一个城池最大军队数量
//武将基础配置数据
protected _armys: Map<number, ArmyData[]> = new Map<number, ArmyData[]>();
public clearData(): void {
this._armys.clear();
}
public getArmyList(cityId: number): ArmyData[] {
if (this._armys.has(cityId) == false) {
return null;
}
return this._armys.get(cityId);
}
public updateArmys(cityId: number, datas: any[]): ArmyData[] {
let list: ArmyData[] = this.getArmyList(cityId);
if (list == null) {
list = new Array(this._maxArmyCnt);
this._armys.set(cityId, list);
}
for (var i = 0; i < datas.length; i++) {
let armyData: ArmyData = ArmyData.createFromServer(datas[i]);
list[armyData.order - 1] = armyData;
}
return list;
}
public updateArmy(cityId: number, data: any): ArmyData {
let list: ArmyData[] = this.getArmyList(cityId);
if (list == null) {
list = new Array(this._maxArmyCnt);
this._armys.set(cityId, list);
}
let armyData: ArmyData = list[data.order - 1];
list[data.order - 1] = ArmyData.createFromServer(data, armyData);
return list[data.order - 1];
}
public updateArmysNoCity(datas: any): ArmyData[] {
let list: ArmyData[] = [];
for(var i = 0; i < datas.length ;i++){
let armyData: ArmyData = ArmyData.createFromServer(datas[i]);
this.updateArmy(armyData.cityId,armyData);
list.push(armyData)
}
return list;
}
/**根据id获取军队*/
public getArmyById(id: number, cityId: number): ArmyData {
let list: ArmyData[] = this.getArmyList(cityId);
if (list) {
for (let i: number = 0; i < list.length; i++) {
if (list[i] && list[i].id == id) {
return list[i];
}
}
}
return null;
}
/**根据位置获取军队*/
public getArmyByOrder(order: number, cityId: number): ArmyData {
let list: ArmyData[] = this.getArmyList(cityId);
console.log("getArmyByOrder", order, cityId, list);
if (list) {
return list[order - 1];
}
return null;
}
public getAllArmys(): ArmyData[] {
let list:ArmyData[] = [];
this._armys.forEach((datas:ArmyData[]) => {
list = list.concat(datas);
})
return list;
}
public getArmysByPos(x: number, y: number) {
let list:ArmyData[] = [];
this._armys.forEach((armys:ArmyData[]) => {
armys.forEach(army => {
if (army.fromX == x && army.fromY == y){
list.push(army);
}
});
})
return list;
}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "e294bf68-3877-4252-9b17-821521fdad8f",
"files": [],
"subMetas": {},
"userData": {
"simulateGlobals": []
}
}

View File

@@ -0,0 +1,234 @@
import { ServerConfig } from "../config/ServerConfig";
import { NetManager } from "../network/socket/NetManager";
import GeneralProxy from "./GeneralProxy";
import { EventMgr } from "../utils/EventMgr";
export default class GeneralCommand {
//单例
protected static _instance: GeneralCommand;
public static getInstance(): GeneralCommand {
if (this._instance == null) {
this._instance = new GeneralCommand();
}
return this._instance;
}
public static destory(): boolean {
if (this._instance) {
this._instance.onDestory();
this._instance = null;
return true;
}
return false;
}
//数据model
protected _proxy: GeneralProxy = new GeneralProxy();
constructor() {
EventMgr.on(ServerConfig.general_myGenerals, this.onMyGenerals, this);
EventMgr.on(ServerConfig.general_push, this.onGeneralPush, this);
EventMgr.on(ServerConfig.general_drawGeneral, this.onDrawGenerals, this);
EventMgr.on(ServerConfig.general_composeGeneral, this.onComposeGeneral, this);
EventMgr.on(ServerConfig.general_addPrGeneral, this.onAddPrGeneral, this);
EventMgr.on(ServerConfig.general_convert, this.onGeneralConvert , this);
EventMgr.on(ServerConfig.general_upSkill, this.onUpSkill, this);
EventMgr.on(ServerConfig.general_downSkill, this.onDownSkill, this);
EventMgr.on(ServerConfig.general_lvSkill, this.onLvSkill, this);
}
public onDestory(): void {
EventMgr.targetOff(this);
}
public clearData(): void {
this._proxy.clearData();
}
public get proxy(): GeneralProxy {
return this._proxy;
}
/**我的将领列表*/
protected onMyGenerals(data: any): void {
console.log("onMyGeneralsonMyGenerals ", data);
if (data.code == 0) {
this._proxy.updateMyGenerals(data.msg.generals);
EventMgr.emit("update_my_generals");
}
}
protected onGeneralPush(data: any): void {
console.log("onGeneralPush ", data);
if (data.code == 0) {
this._proxy.updateGeneral(data.msg);
EventMgr.emit("update_general");
}
}
protected onDrawGenerals(data: any): void {
console.log("onDrawGenerals ", data);
if (data.code == 0) {
this._proxy.updateMyGenerals(data.msg.generals);
EventMgr.emit("update_my_generals");
EventMgr.emit("open_draw_result", data.msg.generals);
}
}
protected onComposeGeneral(data:any):void{
console.log("onComposeGeneral ", data);
if (data.code == 0) {
this._proxy.updateMyGenerals(data.msg.generals);
EventMgr.emit("update_my_generals");
EventMgr.emit("update_one_generals", data.msg.generals[data.msg.generals.length - 1]);
}
}
protected onAddPrGeneral(data:any):void{
console.log("onAddPrGeneral ", data);
if (data.code == 0) {
this._proxy.updateGeneral(data.msg.general);
EventMgr.emit("update_one_generals",data.msg.general);
}
}
protected onGeneralConvert(data:any):void{
console.log("onGeneralConvert ", data);
if (data.code == 0) {
this._proxy.removeMyGenerals(data.msg.gIds);
EventMgr.emit("general_convert", data.msg);
}
}
protected onUpSkill(data:any):void{
console.log("onUpSkill ", data);
}
protected onDownSkill(data:any):void{
console.log("onDownSkill ", data);
}
protected onLvSkill(data:any):void{
console.log("onLvSkill ", data);
}
/**我的角色属性*/
public updateMyProperty(datas: any[]): void {
this._proxy.updateMyGenerals(datas);
EventMgr.emit("update_my_generals");
}
public qryMyGenerals(): void {
let sendData: any = {
name: ServerConfig.general_myGenerals,
msg: {
}
};
NetManager.getInstance().send(sendData);
}
/**
* 抽卡
* @param drawTimes
*/
public drawGenerals(drawTimes:number = 1): void {
let sendData: any = {
name: ServerConfig.general_drawGeneral,
msg: {
drawTimes:drawTimes
}
};
NetManager.getInstance().send(sendData);
}
/**
*
* @param compId
* @param gIds
*/
public composeGeneral(compId:number = 1,gIds:number[] = []): void {
let sendData: any = {
name: ServerConfig.general_composeGeneral,
msg: {
compId:compId,
gIds:gIds
}
};
NetManager.getInstance().send(sendData);
}
public addPrGeneral(compId:number = 1,force_add:number,strategy_add:number,defense_add:number,speed_add:number,destroy_add:number): void {
let sendData: any = {
name: ServerConfig.general_addPrGeneral,
msg: {
compId:compId,
forceAdd:force_add,
strategyAdd:strategy_add,
defenseAdd:defense_add,
speedAdd:speed_add,
destroyAdd:destroy_add
}
};
NetManager.getInstance().send(sendData);
}
public convert(gIds:number[]): void {
let sendData: any = {
name: ServerConfig.general_convert,
msg: {
gIds:gIds
}
};
NetManager.getInstance().send(sendData);
}
public upSkill(gId:number, cfgId:number, pos:number): void {
let sendData: any = {
name: ServerConfig.general_upSkill,
msg: {
gId:gId,
cfgId:cfgId,
pos:Number(pos)
}
};
console.log("send upSkill:", sendData);
NetManager.getInstance().send(sendData);
}
public downSkill(gId:number, cfgId:number, pos:number): void {
let sendData: any = {
name: ServerConfig.general_downSkill,
msg: {
gId:gId,
cfgId:cfgId,
pos:Number(pos)
}
};
NetManager.getInstance().send(sendData);
}
public lvSkill(gId:number, pos:number) {
let sendData: any = {
name: ServerConfig.general_lvSkill,
msg: {
gId:gId,
pos:Number(pos)
}
};
NetManager.getInstance().send(sendData);
}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "c4f639d5-6166-491e-9150-f41d145c7395",
"files": [],
"subMetas": {},
"userData": {
"simulateGlobals": []
}
}

View File

@@ -0,0 +1,371 @@
import { SpriteFrame } from "cc";
/**武将(配置)*/
export class GeneralConfig {
name: string = "";
cfgId: number = 0;
force: number = 0;
strategy: number = 0;
defense: number = 0;
speed: number = 0;
destroy: number = 0;
cost: number = 0;
force_grow: number = 0;
strategy_grow: number = 0;
defense_grow: number = 0;
speed_grow: number = 0;
destroy_grow: number = 0;
physical_power_limit: number = 0;
cost_physical_power: number = 0;
probability: number = 0;
star: number = 0;
arms: number[] = [];
camp: number = 0;
}
/**武将等级配置*/
export class GenaralLevelConfig {
level: number = 0;
exp: number = 0;
soldiers: number = 0;
}
/**武将阵营枚举*/
export class GeneralCampType {
static Han: number = 1;
static Qun: number = 2;
static Wei: number = 3;
static Shu: number = 4;
static Wu: number = 5;
}
/**武将共有配置*/
export class GeneralCommonConfig {
physical_power_limit: number = 100;
cost_physical_power: number = 10;
recovery_physical_power: number = 10;
reclamation_time: number = 3600;
draw_general_cost: number = 0;
}
export class gSkill {
id: number = 0;
lv: number = 0;
cfgId: number = 0;
}
/**武将数据*/
export class GeneralData {
id: number = 0;
cfgId: number = 0;
exp: number = 0;
level: number = 0;
physical_power: number = 0;
order: number = 0;
star_lv: number = 0;
parentId: number = 0;
state: number = 0;
hasPrPoint: number = 0;
usePrPoint: number = 0;
force_added: number = 0;
strategy_added: number = 0;
defense_added: number = 0;
speed_added: number = 0;
destroy_added: number = 0;
config: GeneralConfig = new GeneralConfig();
skills: gSkill[] = [];
public static createFromServer(serverData: any, generalData: GeneralData = null, generalCfg: GeneralConfig): GeneralData {
let data: GeneralData = generalData;
if (data == null) {
data = new GeneralData();
}
data.id = serverData.id;
data.cfgId = serverData.cfgId;
data.exp = serverData.exp;
data.level = serverData.level;
data.order = serverData.order;
data.physical_power = serverData.physical_power;
data.star_lv = serverData.star_lv;
data.parentId = serverData.parentId;
data.state = serverData.state;
data.hasPrPoint = serverData.hasPrPoint;
data.usePrPoint = serverData.usePrPoint;
data.force_added = serverData.force_added;
data.strategy_added = serverData.strategy_added;
data.defense_added = serverData.defense_added;
data.speed_added = serverData.speed_added;
data.destroy_added = serverData.destroy_added;
data.config = generalCfg;
data.skills = serverData.skills;
// console.log("createFromServer:", data);
return data;
}
public static getPrValue(pr: number = 0, group:number, add: number = 0): number {
return (pr + group + add) / 100;
}
public static getPrStr(pr: number = 0, add: number = 0, lv: number = 0, grow: number = 0): string {
return (pr + add) / 100 + "+(" + lv * grow / 100 + ")";
}
}
export default class GeneralProxy {
//武将基础配置数据
protected _generalConfigs: Map<number, GeneralConfig> = new Map<number, GeneralConfig>();
protected _levelConfigs: GenaralLevelConfig[] = [];
protected _commonConfig: GeneralCommonConfig = new GeneralCommonConfig();
protected _generalTexs: Map<number, SpriteFrame> = new Map<number, SpriteFrame>();
protected _myGenerals: Map<number, GeneralData> = new Map<number, GeneralData>();
public clearData(): void {
this._myGenerals.clear();
}
public initGeneralConfig(cfgs: any[], bCost: any): void {
let cfgData: any = null;
let levelData: any = null;
for (let i: number = 0; i < cfgs.length; i++) {
console
if (cfgs[i]._name == "general") {
cfgData = cfgs[i].json.list;
} else if (cfgs[i]._name == "general_basic") {
levelData = cfgs[i].json.levels;
}
}
if (cfgData) {
this._generalConfigs.clear();
for (let i: number = 0; i < cfgData.length; i++) {
var cfg: GeneralConfig = new GeneralConfig();
cfg.cfgId = cfgData[i].cfgId;
cfg.name = cfgData[i].name;
cfg.force = cfgData[i].force;
cfg.strategy = cfgData[i].strategy;
cfg.defense = cfgData[i].defense;
cfg.speed = cfgData[i].speed;
cfg.destroy = cfgData[i].destroy;
cfg.cost = cfgData[i].cost;
cfg.force_grow = cfgData[i].force_grow;
cfg.strategy_grow = cfgData[i].strategy_grow;
cfg.defense_grow = cfgData[i].defense_grow;
cfg.speed_grow = cfgData[i].speed_grow;
cfg.destroy_grow = cfgData[i].destroy_grow;
cfg.physical_power_limit = bCost.general.physical_power_limit;
cfg.cost_physical_power = bCost.general.cost_physical_power;
cfg.star = cfgData[i].star;
cfg.arms = cfgData[i].arms;
cfg.camp = cfgData[i].camp;
this._generalConfigs.set(cfg.cfgId, cfg);
}
}
if (levelData) {
this._levelConfigs.length = levelData.length;
for (let i: number = 0; i < levelData.length; i++) {
var levelCfg: GenaralLevelConfig = new GenaralLevelConfig();
levelCfg.level = levelData[i].level;
levelCfg.exp = levelData[i].exp;
levelCfg.soldiers = levelData[i].soldiers;
this._levelConfigs[levelCfg.level - 1] = levelCfg;
}
}
this._commonConfig.physical_power_limit = bCost.general.physical_power_limit;
this._commonConfig.cost_physical_power = bCost.general.cost_physical_power;
this._commonConfig.recovery_physical_power = bCost.general.recovery_physical_power;
this._commonConfig.reclamation_time = bCost.general.reclamation_time;
this._commonConfig.draw_general_cost = bCost.general.draw_general_cost;
}
public initGeneralTex(texs: SpriteFrame[]): void {
this._generalTexs.clear();
for (let i: number = 0; i < texs.length; i++) {
let id: number = Number(String(texs[i].name).split("_")[1]);
this._generalTexs.set(id, texs[i]);
}
}
public updateMyGenerals(datas: any[]): void {
for (var i = 0; i < datas.length; i++) {
let data: GeneralData = GeneralData.createFromServer(datas[i], null, this._generalConfigs.get(datas[i].cfgId));
this._myGenerals.set(data.id, data);
}
}
public updateGeneral(data: any) {
if(data.state != 0){
this._myGenerals.delete(data.id);
}else{
let ids: number[] = [];
let general: GeneralData = GeneralData.createFromServer(data, this._myGenerals.get(data.id), this._generalConfigs.get(data.cfgId));
this._myGenerals.set(general.id, general);
ids.push(general.id);
}
}
public removeMyGenerals(ids: number[]) {
ids.forEach(id => {
this._myGenerals.delete(id);
});
}
/**武将配置*/
public getGeneralCfg(cfgId: number): GeneralConfig {
if (this._generalConfigs.has(cfgId)) {
return this._generalConfigs.get(cfgId);
}
return null;
}
public getGeneralAllCfg(): Map<number, GeneralConfig>{
return this._generalConfigs
}
/**武将等级配置*/
public getGeneralLevelCfg(level: number): GenaralLevelConfig {
if (level > 0 && level <= this._levelConfigs.length) {
return this._levelConfigs[level - 1];
}
return null;
}
public getMaxLevel(): number {
return this._levelConfigs.length;
}
/**武将头像素材*/
public getGeneralTex(cfgId: number): SpriteFrame {
if (this._generalTexs.has(cfgId)) {
return this._generalTexs.get(cfgId);
}
return null;
}
public setGeneralTex(cfgId: number, frame: SpriteFrame) {
this._generalTexs.set(cfgId, frame);
}
/**武将相关公有配置*/
public getCommonCfg(): GeneralCommonConfig {
return this._commonConfig;
}
public getMyActiveGeneralCnt() {
var arr = this.getMyGenerals()
var cnt = 0
arr.forEach(g => {
if(g.state == 0){
cnt += 1
}
});
return cnt
}
/**我的武将列表*/
public getMyGenerals(): GeneralData[] {
return Array.from(this._myGenerals.values());
}
public getMyGeneralsNotUse(): GeneralData[] {
var arr = Array.from(this._myGenerals.values());
let generals: GeneralData[] = [];
for (let i = 0; i < arr.length; i++) {
const obj = arr[i];
if (obj.order == 0 && obj.state == 0){
generals.push(obj);
}
}
return generals;
}
/**我的武将*/
public getMyGeneral(id: number): GeneralData {
if (this._myGenerals.has(id)) {
return this._myGenerals.get(id);
}
return null;
}
/**相同类型的武将id */
public getGeneralIds(cfgId: number): number[] {
let myGenerals: GeneralData[] = this.getMyGenerals();
let tempGenerals: number[] = [];
for (var i = 0; i < myGenerals.length; i++) {
if (myGenerals[i].cfgId == cfgId) {
tempGenerals.push(myGenerals[i].id)
}
}
return tempGenerals;
}
protected sortStar(a: GeneralData, b: GeneralData): number {
if(a.config.star < b.config.star){
return 1;
}else if(a.config.star == b.config.star){
return a.cfgId - b.cfgId;
}else{
return -1;
}
}
/**
* 排序 已经使用的
*/
public getUseGenerals(): GeneralData[] {
var tempArr: GeneralData[] = this.getMyGenerals().concat();
tempArr.sort(this.sortStar);
var temp: GeneralData[] = [];
for (var i = 0; i < tempArr.length; i++) {
if (tempArr[i].order > 0) {
console.log("tempArr[i].order:",tempArr[i].order,tempArr[i].config.name)
temp.push(tempArr[i]);
tempArr.splice(i, 1);
i--;
}
}
for (var i = 0; i < tempArr.length; i++) {
if (tempArr[i].parentId > 0) {
tempArr.splice(i, 1);
i--;
}
}
temp = temp.concat(tempArr);
return temp;
}
public getComposeGenerals(cfgId: number = 0, id: number = 0): GeneralData[] {
var temp: GeneralData[] = [];
var tempArr: GeneralData[] = this.getMyGenerals().concat();
for (var i = 0; i < tempArr.length; i++) {
if (tempArr[i].order > 0 || tempArr[i].id == id || tempArr[i].cfgId != cfgId || tempArr[i].parentId > 0) {
continue
}
temp.push(tempArr[i]);
}
return temp;
}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "9a494869-e1d0-43e7-b99a-735d5668fdd8",
"files": [],
"subMetas": {},
"userData": {
"simulateGlobals": []
}
}