refactor: 统一英雄属性中卡牌等级字段名称为pool_lv

将HeroAttrsComp中的card_lv字段重命名为pool_lv,以更准确地反映其表示英雄池等级的含义。同时更新所有相关引用点,包括HInfoComp的显示逻辑、Hero的加载方法以及MissionHeroCompComp的召唤队列和合成逻辑,确保数据一致性。
This commit is contained in:
panw
2026-04-02 17:36:00 +08:00
parent a63360f493
commit 52ed41bec1
4 changed files with 20 additions and 20 deletions

View File

@@ -63,7 +63,7 @@ export class Hero extends ecs.Entity {
* 2) 初始化表现与属性数据
* 3) 播放下落入场并在落地后启用碰撞与移动
*/
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001, dropToY:number = pos.y,hero_lv:number=1, card_lv:number=1) {
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001, dropToY:number = pos.y,hero_lv:number=1, pool_lv:number=1) {
// 英雄始终朝右,表现缩放固定为正向
scale = 1
// 英雄等级在当前规则下上限为 3避免超配表范围
@@ -98,7 +98,7 @@ export class Hero extends ecs.Entity {
model.hero_uuid = uuid;
model.hero_name = hero.name;
model.lv = hero_lv;
model.card_lv = card_lv;
model.pool_lv = pool_lv;
model.type = hero.type;
model.fac = FacSet.HERO;

View File

@@ -14,7 +14,7 @@ export class HeroAttrsComp extends ecs.Comp {
hero_uuid: number = 1001;
hero_name: string = "hero";
lv: number = 1;
card_lv: number = 1;
pool_lv: number = 1;
type: number = 0; // 0近战 1远程 2辅助
fac: number = 0; // 0:hero 1:monster
// ==================== 基础属性(有初始值) ====================

View File

@@ -57,7 +57,7 @@ export class HInfoComp extends CCComp {
const activeFrameNode = isHighLevel ? this.HF_node : this.NF_node;
if (activeFrameNode) {
const cardLvStr = `lv${this.model.card_lv ?? 1}`;
const cardLvStr = `lv${this.model.pool_lv ?? 1}`;
activeFrameNode.children.forEach(child => {
child.active = (child.name === cardLvStr);
});

View File

@@ -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);
}
}