feat: 新增指定目标卡池等级抽卡功能并调整UI布局

- 在drawCardsByRule函数中增加targetPoolLv参数,支持强制从指定等级卡池抽卡
- 修改MissionCardComp中刷新英雄卡牌逻辑,使用targetPoolLv替代heroLv参数
- 调整role_controller.prefab中多个UI元素的位置和尺寸
- 将开始按钮文本从"开始"改为"开始战斗"并加宽按钮
This commit is contained in:
walkpan
2026-04-05 21:12:39 +08:00
parent 96f06535e1
commit c93ccbcaec
4 changed files with 43 additions and 19 deletions

View File

@@ -1059,7 +1059,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 0, "x": 0,
"y": 459.545, "y": 435.147,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -2239,7 +2239,7 @@
"_left": 0, "_left": 0,
"_right": 0, "_right": 0,
"_top": 0, "_top": 0,
"_bottom": 459.545, "_bottom": 435.147,
"_horizontalCenter": 0, "_horizontalCenter": 0,
"_verticalCenter": 0, "_verticalCenter": 0,
"_isAbsLeft": true, "_isAbsLeft": true,
@@ -2582,7 +2582,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -180, "x": -180,
"y": 396.244, "y": 154.567,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -3016,7 +3016,7 @@
"_left": 0, "_left": 0,
"_right": 360, "_right": 360,
"_top": 0, "_top": 0,
"_bottom": 373.744, "_bottom": 132.067,
"_horizontalCenter": 0, "_horizontalCenter": 0,
"_verticalCenter": 0, "_verticalCenter": 0,
"_isAbsLeft": true, "_isAbsLeft": true,
@@ -4008,6 +4008,8 @@
"__id__": 0 "__id__": 0
}, },
"fileId": "33rSVysAVB1LO2v7wC2zZ1", "fileId": "33rSVysAVB1LO2v7wC2zZ1",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null "nestedPrefabInstanceRoots": null
}, },
{ {
@@ -4970,6 +4972,8 @@
"__id__": 0 "__id__": 0
}, },
"fileId": "50nlTzRABGJ4vZYBkdXijK", "fileId": "50nlTzRABGJ4vZYBkdXijK",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null "nestedPrefabInstanceRoots": null
}, },
{ {
@@ -5009,7 +5013,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 180, "x": 180,
"y": 394.952, "y": 153.275,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -5688,7 +5692,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -259, "x": -259,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -6142,7 +6146,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -85, "x": -85,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -6596,7 +6600,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 85, "x": 85,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -7050,7 +7054,7 @@
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 259, "x": 259,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
}, },
"_lrot": { "_lrot": {
@@ -7577,7 +7581,7 @@
"value": { "value": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -260, "x": -260,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
} }
}, },
@@ -7898,7 +7902,7 @@
"value": { "value": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": -86, "x": -86,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
} }
}, },
@@ -8219,7 +8223,7 @@
"value": { "value": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 86, "x": 86,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
} }
}, },
@@ -8540,7 +8544,7 @@
"value": { "value": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
"x": 260, "x": 260,
"y": 252.88, "y": 296.371,
"z": 0 "z": 0
} }
}, },
@@ -11990,7 +11994,7 @@
}, },
"_contentSize": { "_contentSize": {
"__type__": "cc.Size", "__type__": "cc.Size",
"width": 78, "width": 148,
"height": 58.4 "height": 58.4
}, },
"_anchorPoint": { "_anchorPoint": {
@@ -12026,7 +12030,7 @@
"b": 255, "b": 255,
"a": 255 "a": 255
}, },
"_string": "开始", "_string": "开始战斗",
"_horizontalAlign": 1, "_horizontalAlign": 1,
"_verticalAlign": 1, "_verticalAlign": 1,
"_actualFontSize": 35, "_actualFontSize": 35,

View File

@@ -224,6 +224,7 @@ export const drawCardsByRule = (
type?: CardType | CardType[] type?: CardType | CardType[]
heroType?: HType heroType?: HType
heroLv?: number heroLv?: number
targetPoolLv?: number
} = {} } = {}
): CardConfig[] => { ): CardConfig[] => {
const count = Math.max(0, Math.floor(options.count ?? 4)) const count = Math.max(0, Math.floor(options.count ?? 4))
@@ -233,6 +234,14 @@ export const drawCardsByRule = (
const typeSet = normalizeTypeFilter(options.type) const typeSet = normalizeTypeFilter(options.type)
pool = pool.filter(card => typeSet.has(card.type)) pool = pool.filter(card => typeSet.has(card.type))
} }
if (options.targetPoolLv !== undefined) {
// 如果指定了目标卡池等级,则强制从所有配置中筛选该等级的卡牌,无视当前的卡池等级限制
pool = CardPoolList.filter(card => card.pool_lv === options.targetPoolLv)
if (options.type !== undefined) {
const typeSet = normalizeTypeFilter(options.type)
pool = pool.filter(card => typeSet.has(card.type))
}
}
if (options.heroType !== undefined || options.heroLv !== undefined) { if (options.heroType !== undefined || options.heroLv !== undefined) {
pool = pool.filter(card => { pool = pool.filter(card => {
if (card.type !== CardType.Hero) return false if (card.type !== CardType.Hero) return false

View File

@@ -438,12 +438,12 @@ export class MissionCardComp extends CCComp {
return filled; return filled;
} }
private tryRefreshHeroCards(heroType?: HType, heroLv?: number): boolean { private tryRefreshHeroCards(heroType?: HType, targetPoolLv?: number): boolean {
const cards = drawCardsByRule(this.poolLv, { const cards = drawCardsByRule(this.poolLv, {
count: 4, count: 4,
type: CardType.Hero, type: CardType.Hero,
heroType, heroType,
heroLv targetPoolLv
}); });
if (cards.length <= 0) return false; if (cards.length <= 0) return false;
this.layoutCardSlots(); this.layoutCardSlots();
@@ -453,8 +453,8 @@ export class MissionCardComp extends CCComp {
private tryRefreshHeroCardsByEffect(refreshHeroType: SpecialRefreshHeroType, refreshLv: number): boolean { private tryRefreshHeroCardsByEffect(refreshHeroType: SpecialRefreshHeroType, refreshLv: number): boolean {
const heroType = this.resolveRefreshHeroType(refreshHeroType); const heroType = this.resolveRefreshHeroType(refreshHeroType);
const heroLv = refreshLv > 0 ? refreshLv : undefined; const targetPoolLv = refreshLv > 0 ? refreshLv : undefined;
return this.tryRefreshHeroCards(heroType, heroLv); return this.tryRefreshHeroCards(heroType, targetPoolLv);
} }
private resolveRefreshHeroType(refreshHeroType: SpecialRefreshHeroType): HType | undefined { private resolveRefreshHeroType(refreshHeroType: SpecialRefreshHeroType): HType | undefined {

View File

@@ -0,0 +1,11 @@
{
"ver": "1.0.1",
"importer": "text",
"imported": true,
"uuid": "fc76e3b0-5134-401a-b3ea-03251f9135ec",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}