refactor: 统一英雄属性中卡牌等级字段名称为pool_lv
将HeroAttrsComp中的card_lv字段重命名为pool_lv,以更准确地反映其表示英雄池等级的含义。同时更新所有相关引用点,包括HInfoComp的显示逻辑、Hero的加载方法以及MissionHeroCompComp的召唤队列和合成逻辑,确保数据一致性。
This commit is contained in:
@@ -39,7 +39,7 @@ export class MissionHeroCompComp extends CCComp {
|
||||
/** 是否正在消费召唤队列,防止并发处理 */
|
||||
is_processing_queue:boolean=false
|
||||
/** 召唤请求队列,保证召唤与合成串行 */
|
||||
summon_queue:{ uuid: number; hero_lv: number; card_lv: number }[]=[]
|
||||
summon_queue:{ uuid: number; hero_lv: number; pool_lv: number }[]=[]
|
||||
/** 预留英雄列表 */
|
||||
heros:any=[]
|
||||
onLoad(){
|
||||
@@ -87,18 +87,18 @@ export class MissionHeroCompComp extends CCComp {
|
||||
const payload = args ?? event;
|
||||
const uuid = Number(payload?.uuid ?? 1001);
|
||||
const hero_lv = Math.max(1, Number(payload?.hero_lv ?? 1));
|
||||
const card_lv = Math.max(1, Number(payload?.pool_lv ?? 1));
|
||||
this.summon_queue.push({ uuid, hero_lv, card_lv });
|
||||
const pool_lv = Math.max(1, Number(payload?.pool_lv ?? 1));
|
||||
this.summon_queue.push({ uuid, hero_lv, pool_lv });
|
||||
this.processSummonQueue();
|
||||
}
|
||||
/** 添加英雄:固定出生点上方生成,再落至落点 */
|
||||
private addHero(uuid:number=1001,hero_lv:number=1, card_lv:number=1) {
|
||||
private addHero(uuid:number=1001,hero_lv:number=1, pool_lv:number=1) {
|
||||
console.log("addHero uuid:",uuid)
|
||||
let hero = ecs.getEntity<Hero>(Hero);
|
||||
let scale = 1
|
||||
const landingPos = this.resolveHeroLandingPos(uuid);
|
||||
let spawnPos:Vec3 = v3(landingPos.x, landingPos.y + MissionHeroCompComp.HERO_DROP_HEIGHT, 0);
|
||||
hero.load(spawnPos,scale,uuid,landingPos.y,hero_lv,card_lv);
|
||||
hero.load(spawnPos,scale,uuid,landingPos.y,hero_lv,pool_lv);
|
||||
return hero;
|
||||
}
|
||||
|
||||
@@ -117,8 +117,8 @@ export class MissionHeroCompComp extends CCComp {
|
||||
}
|
||||
|
||||
/** 添加合成后的新英雄,并覆盖为聚合后的属性 */
|
||||
private addMergedHero(uuid:number, hero_lv:number, card_lv:number, ap:number, hp_max:number): number {
|
||||
const hero = this.addHero(uuid, hero_lv, card_lv);
|
||||
private addMergedHero(uuid:number, hero_lv:number, pool_lv:number, ap:number, hp_max:number): number {
|
||||
const hero = this.addHero(uuid, hero_lv, pool_lv);
|
||||
const model = hero.get(HeroAttrsComp);
|
||||
if (!model) return hero_lv;
|
||||
model.ap = Math.max(0, ap);
|
||||
@@ -186,7 +186,7 @@ export class MissionHeroCompComp extends CCComp {
|
||||
while (this.summon_queue.length > 0) {
|
||||
const payload = this.summon_queue.shift();
|
||||
if (!payload) continue;
|
||||
await this.handleSingleSummon(payload.uuid, payload.hero_lv, payload.card_lv);
|
||||
await this.handleSingleSummon(payload.uuid, payload.hero_lv, payload.pool_lv);
|
||||
}
|
||||
} finally {
|
||||
this.is_processing_queue = false;
|
||||
@@ -194,8 +194,8 @@ export class MissionHeroCompComp extends CCComp {
|
||||
}
|
||||
|
||||
/** 处理单次召唤:先生成,再检测是否触发合成,再尝试链式合成 */
|
||||
private async handleSingleSummon(uuid: number, hero_lv: number, card_lv: number = 1) {
|
||||
this.addHero(uuid, hero_lv, card_lv);
|
||||
private async handleSingleSummon(uuid: number, hero_lv: number, pool_lv: number = 1) {
|
||||
this.addHero(uuid, hero_lv, pool_lv);
|
||||
if (!this.canMergeLevel(hero_lv)) return;
|
||||
const needCount = this.getMergeNeedCount();
|
||||
const aliveHeroes = this.getAliveHeroes();
|
||||
@@ -203,8 +203,8 @@ export class MissionHeroCompComp extends CCComp {
|
||||
if (mergeHeroes.length !== needCount) return;
|
||||
this.is_merging = true;
|
||||
try {
|
||||
const mergedLv = await this.mergeGroupHeroes(mergeHeroes, uuid, hero_lv, card_lv);
|
||||
await this.tryChainMerge(uuid, mergedLv, card_lv);
|
||||
const mergedLv = await this.mergeGroupHeroes(mergeHeroes, uuid, hero_lv, pool_lv);
|
||||
await this.tryChainMerge(uuid, mergedLv, pool_lv);
|
||||
} finally {
|
||||
this.is_merging = false;
|
||||
}
|
||||
@@ -258,7 +258,7 @@ export class MissionHeroCompComp extends CCComp {
|
||||
}
|
||||
|
||||
/** 执行一次完整合成:聚合属性、销毁素材、播放特效、生成高一级英雄 */
|
||||
private async mergeGroupHeroes(mergeHeroes: Hero[], uuid: number, hero_lv: number, card_lv: number): Promise<number> {
|
||||
private async mergeGroupHeroes(mergeHeroes: Hero[], uuid: number, hero_lv: number, pool_lv: number): Promise<number> {
|
||||
let sumAp = 0;
|
||||
let sumHpMax = 0;
|
||||
for (let i = 0; i < mergeHeroes.length; i++) {
|
||||
@@ -271,11 +271,11 @@ export class MissionHeroCompComp extends CCComp {
|
||||
const spawnPos:Vec3 = v3(landingPos.x, landingPos.y + MissionHeroCompComp.HERO_DROP_HEIGHT, 0);
|
||||
await this.mergeDestroyAtBirth(mergeHeroes, spawnPos);
|
||||
await this.playMergeBoomFx(spawnPos);
|
||||
return this.addMergedHero(uuid, Math.min(this.merge_max_lv, hero_lv + 1), card_lv, sumAp, sumHpMax);
|
||||
return this.addMergedHero(uuid, Math.min(this.merge_max_lv, hero_lv + 1), pool_lv, sumAp, sumHpMax);
|
||||
}
|
||||
|
||||
/** 链式合成:当前等级合成完成后,继续尝试更高等级,直到条件不满足 */
|
||||
private async tryChainMerge(uuid: number, startLv: number, card_lv: number) {
|
||||
private async tryChainMerge(uuid: number, startLv: number, pool_lv: number) {
|
||||
let checkLv = Math.max(1, startLv);
|
||||
const needCount = this.getMergeNeedCount();
|
||||
let guard = 0;
|
||||
@@ -293,7 +293,7 @@ export class MissionHeroCompComp extends CCComp {
|
||||
if (mergeHeroes.length < needCount) {
|
||||
break;
|
||||
}
|
||||
checkLv = await this.mergeGroupHeroes(mergeHeroes, uuid, checkLv, card_lv);
|
||||
checkLv = await this.mergeGroupHeroes(mergeHeroes, uuid, checkLv, pool_lv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user