feat(英雄列表): 调整英雄卡牌UI并支持等级显示
- 调整英雄卡牌预制体的尺寸、缩放和位置 - 在英雄信息面板中添加等级节点显示 - 修改英雄属性显示逻辑,根据英雄等级计算属性值 - 移除冗余的技能信息更新代码,简化逻辑结构
This commit is contained in:
@@ -3587,8 +3587,8 @@
|
|||||||
},
|
},
|
||||||
"_lscale": {
|
"_lscale": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 1,
|
"x": 1.5,
|
||||||
"y": 1,
|
"y": 1.5,
|
||||||
"z": 1
|
"z": 1
|
||||||
},
|
},
|
||||||
"_mobility": 0,
|
"_mobility": 0,
|
||||||
@@ -4024,8 +4024,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 320,
|
"width": 213.33333333333334,
|
||||||
"height": 450
|
"height": 300
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -4983,8 +4983,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 320,
|
"width": 213.33333333333334,
|
||||||
"height": 450
|
"height": 300
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -9804,8 +9804,8 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 145.307,
|
"x": 135.807,
|
||||||
"y": -205.5,
|
"y": -202.5,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -10459,8 +10459,8 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -141.951,
|
"x": -132.451,
|
||||||
"y": -205.5,
|
"y": -202.5,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@@ -12118,6 +12118,9 @@
|
|||||||
"next_btn": {
|
"next_btn": {
|
||||||
"__id__": 489
|
"__id__": 489
|
||||||
},
|
},
|
||||||
|
"lv_node": {
|
||||||
|
"__id__": 266
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
* - HeroInfo / HeroList(heroSet)—— 英雄静态配置与全量英雄 UUID 列表
|
* - HeroInfo / HeroList(heroSet)—— 英雄静态配置与全量英雄 UUID 列表
|
||||||
* - SkillSet / IType(SkillSet)—— 技能配置与类型枚举
|
* - SkillSet / IType(SkillSet)—— 技能配置与类型枚举
|
||||||
*/
|
*/
|
||||||
import { _decorator, Animation, AnimationClip, Button, Event, Label, Node, NodeEventType, Sprite, resources, tween, Vec3 } from "cc";
|
import { _decorator, Animation, AnimationClip, Button, Event, Label, Node, NodeEventType, Sprite, resources, tween, Vec3, Widget } from "cc";
|
||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
||||||
import { HeroInfo, HeroList } from "../common/config/heroSet";
|
import { HeroInfo, HeroList } from "../common/config/heroSet";
|
||||||
@@ -218,10 +218,37 @@ export class HListComp extends CCComp {
|
|||||||
const hero = HeroInfo[this.huuid];
|
const hero = HeroInfo[this.huuid];
|
||||||
if (!hero) return;
|
if (!hero) return;
|
||||||
|
|
||||||
this.setLabelText(this.name_node, hero.name);
|
const heroLv = Math.max(1, Math.floor(hero.lv ?? 1));
|
||||||
this.setLabelText(this.ap_node, `${hero.ap}`);
|
const suffix = heroLv >= 2 ? "★".repeat(heroLv - 1) : "";
|
||||||
this.setLabelText(this.hp_node, `${hero.hp}`);
|
this.setLabelText(this.name_node, `${suffix}${hero.name || ""}${suffix}`);
|
||||||
this.updateSkillInfo(hero);
|
|
||||||
|
this.setLabelText(this.ap_node, `${(hero.ap ?? 0) * heroLv}`);
|
||||||
|
this.setLabelText(this.hp_node, `${(hero.hp ?? 0) * heroLv}`);
|
||||||
|
|
||||||
|
if (this.info_node) {
|
||||||
|
const infoLabel = this.info_node.getChildByName("info")?.getComponent(Label);
|
||||||
|
if (infoLabel) infoLabel.string = `${hero.info || ""}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cardLvStr = `lv${hero.cards_lv ?? 1}`;
|
||||||
|
if (this.lv_node) {
|
||||||
|
this.lv_node.active = true;
|
||||||
|
this.lv_node.children.forEach(child => {
|
||||||
|
if (child.name === "light") {
|
||||||
|
child.active = false;
|
||||||
|
} else if (child.name === "bg") {
|
||||||
|
child.active = true;
|
||||||
|
} else {
|
||||||
|
child.active = (child.name === cardLvStr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const widget = this.lv_node.getComponent(Widget);
|
||||||
|
if (widget) widget.updateAlignment();
|
||||||
|
this.lv_node.children.forEach(child => {
|
||||||
|
const childWidget = child.getComponent(Widget);
|
||||||
|
if (childWidget) childWidget.updateAlignment();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 初始化 5 个轮播位的英雄动画 */
|
/** 初始化 5 个轮播位的英雄动画 */
|
||||||
@@ -315,64 +342,7 @@ export class HListComp extends CCComp {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================== 技能信息 ========================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新技能信息面板:
|
|
||||||
* 遍历英雄的技能列表,为 Line1~Line5 节点填充技能名、等级、CD、描述。
|
|
||||||
* 同时根据技能类型(近战 / 远程 / 辅助)切换对应图标。
|
|
||||||
*
|
|
||||||
* @param hero 英雄配置数据(含 skills 字段)
|
|
||||||
*/
|
|
||||||
private updateSkillInfo(hero: any) {
|
|
||||||
if (!this.info_node) return;
|
|
||||||
|
|
||||||
const skills = Object.values(hero.skills || {});
|
|
||||||
|
|
||||||
for (let i = 1; i <= 5; i++) {
|
|
||||||
let line = this.findNodeByName(this.info_node, `Line${i}`) || this.findNodeByName(this.info_node, `line${i}`);
|
|
||||||
if (!line) continue;
|
|
||||||
|
|
||||||
const skill: any = skills[i - 1];
|
|
||||||
if (skill) {
|
|
||||||
line.active = true;
|
|
||||||
const skillId = skill.uuid;
|
|
||||||
const config = SkillSet[skillId];
|
|
||||||
|
|
||||||
// 拼接技能信息文本
|
|
||||||
const text = config ? `${config.name} Lv.${skill.lv} CD:${skill.cd}s ${config.info}` : `未知技能 CD:${skill.cd}s`;
|
|
||||||
|
|
||||||
const noteNode = this.findNodeByName(line, "note");
|
|
||||||
const label = noteNode?.getComponent(Label) || noteNode?.getComponentInChildren(Label) || line.getComponentInChildren(Label);
|
|
||||||
if (label) {
|
|
||||||
label.string = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 切换技能类型图标
|
|
||||||
this.updateLineTypeIcon(line, config?.IType);
|
|
||||||
} else {
|
|
||||||
line.active = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新技能行的类型图标(互斥显示):
|
|
||||||
* - Melee → 近战图标
|
|
||||||
* - remote → 远程图标
|
|
||||||
* - support → 辅助图标
|
|
||||||
*
|
|
||||||
* @param line 技能行节点
|
|
||||||
* @param iType 技能类型枚举
|
|
||||||
*/
|
|
||||||
private updateLineTypeIcon(line: Node, iType?: IType) {
|
|
||||||
const meleeNode = this.findNodeByName(line, "Melee");
|
|
||||||
const remoteNode = this.findNodeByName(line, "remote");
|
|
||||||
const supportNode = this.findNodeByName(line, "support");
|
|
||||||
if (meleeNode) meleeNode.active = iType === IType.Melee;
|
|
||||||
if (remoteNode) remoteNode.active = iType === IType.remote;
|
|
||||||
if (supportNode) supportNode.active = iType === IType.support;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** ECS 组件移除时销毁节点 */
|
/** ECS 组件移除时销毁节点 */
|
||||||
reset() {
|
reset() {
|
||||||
|
|||||||
Reference in New Issue
Block a user