7 Commits

Author SHA1 Message Date
panFD
c30900e508 feat(CardComp): add call_btn node reference
新增卡片组件的呼叫按钮节点绑定,同步更新预制件配置添加对应的节点id引用
2026-06-19 15:40:39 +08:00
panFD
3d7c9bfe54 feat: 新增技能触发类型标识与列表预制体,优化技能提示UI
1.  新增技能触发类型背景标识,支持追击/反击/复活等状态显示
2.  扩展技能提示接口,新增触发类型参数传递
3.  新增list-me列表预制体及其元数据
4.  调整部分UI精灵帧与布局参数
5.  修复技能名称显示调用参数不匹配问题
2026-06-19 15:40:28 +08:00
panFD
9220254c56 refactor(skill tooltip): 优化技能触发类型命名与 tooltip 背景配置
1. 修正 SkillTriggerName 中的技能触发类型文本翻译,使其更贴合游戏内实际表述
2. 为 tooltip 预制体和组件新增6种状态的背景节点引用
2026-06-19 15:10:19 +08:00
panFD
2d4bc1fd05 fix(ui/skillBox): 修复技能选择框布局与文本问题
调整了技能框预制体的节点位置、尺寸、字体大小,新增了标题文本"选择战斗技能",修正了资源引用id和布局偏移量,优化界面显示效果
2026-06-19 15:02:59 +08:00
panFD
18c873999b fix(missionCard): 修复卡牌升级提示逻辑并优化显示
1.  新增全局配置常量CARD_POOL_UPGRADE_WAVES,优先使用任务运行时配置
2.  重构升级波次计算逻辑,新增多种状态的提示文本:本回合升级、即将升级
3.  修复prefab布局,更新升级提示UI的样式和引用
4.  补充边界情况处理,避免配置耗尽后显示异常
2026-06-19 08:58:56 +08:00
panFD
40c27e04f2 refactor(config): 统一卡池等级与升级波次的数据源
1. 将卡池等级上限从硬编码改为引用FightSet.MAX_CARD_POOL_LEVEL
2. 提取卡池升级波次配置到GameSet中作为单一数据源
3. 移除MissionComp中的硬编码波次配置,改为引用全局配置
2026-06-19 08:38:39 +08:00
panFD
875d2d68b5 refactor: 调整测试模式、英雄等级和卡池配置
1. 开启单挑测试模式
2. 将英雄最大等级从3下调至2
3. 更新卡池升级波次配置为[4,7,10,13]
4. 修复任务预制体的精灵帧和节点缩放配置
2026-06-18 23:26:17 +08:00
24 changed files with 9298 additions and 6320 deletions

View File

@@ -164,12 +164,12 @@
"a": 206
},
"_spriteFrame": {
"__uuid__": "2423272e-e63b-4736-b15b-30b40cf98a23@b0413",
"__uuid__": "2423272e-e63b-4736-b15b-30b40cf98a23@586a7",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 1,
"_fillType": 1,
"_sizeMode": 1,
"_sizeMode": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,

File diff suppressed because it is too large Load Diff

View File

@@ -28,17 +28,17 @@
"_active": true,
"_components": [
{
"__id__": 541
"__id__": 547
},
{
"__id__": 543
"__id__": 549
},
{
"__id__": 545
"__id__": 551
}
],
"_prefab": {
"__id__": 547
"__id__": 553
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -270,25 +270,28 @@
},
{
"__id__": 488
},
{
"__id__": 532
}
],
"_active": true,
"_components": [
{
"__id__": 532
},
{
"__id__": 534
},
{
"__id__": 536
},
{
"__id__": 538
},
{
"__id__": 540
},
{
"__id__": 542
},
{
"__id__": 544
}
],
"_prefab": {
"__id__": 540
"__id__": 546
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -347,7 +350,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"y": 57.432,
"z": 0
},
"_lrot": {
@@ -477,7 +480,7 @@
"a": 255
},
"_spriteFrame": {
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@ec552",
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@a7b3a",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 1,
@@ -9437,7 +9440,7 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -135,
"x": -115,
"y": 0,
"z": 0
},
@@ -9488,7 +9491,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 5,
"y": 2,
"z": 0
},
"_lrot": {
@@ -9528,7 +9531,7 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 84,
"width": 64,
"height": 54.4
},
"_anchorPoint": {
@@ -9567,8 +9570,8 @@
"_string": "刷新",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 40,
"_fontSize": 40,
"_actualFontSize": 30,
"_fontSize": 30,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 0,
@@ -9646,7 +9649,7 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 67.671,
"x": 42.303,
"y": 4.061,
"z": 0
},
@@ -9796,8 +9799,8 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 240,
"height": 100
"width": 200,
"height": 80
},
"_anchorPoint": {
"__type__": "cc.Vec2",
@@ -9971,7 +9974,7 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 135,
"x": 115,
"y": 0,
"z": 0
},
@@ -10022,7 +10025,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 5,
"y": 2,
"z": 0
},
"_lrot": {
@@ -10062,7 +10065,7 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 84,
"width": 64,
"height": 54.4
},
"_anchorPoint": {
@@ -10101,8 +10104,8 @@
"_string": "刷新",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 40,
"_fontSize": 40,
"_actualFontSize": 30,
"_fontSize": 30,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 0,
@@ -10171,8 +10174,8 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 240,
"height": 100
"width": 200,
"height": 80
},
"_anchorPoint": {
"__type__": "cc.Vec2",
@@ -10330,7 +10333,7 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 570,
"width": 490,
"height": 100
},
"_anchorPoint": {
@@ -10431,6 +10434,165 @@
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "title",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 10
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 533
},
{
"__id__": 535
}
],
"_prefab": {
"__id__": 537
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 374.286,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 532
},
"_enabled": true,
"__prefab": {
"__id__": 534
},
"_contentSize": {
"__type__": "cc.Size",
"width": 154,
"height": 54.4
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "6dPcXbJ6ZLMKFX/I08po7c"
},
{
"__type__": "cc.Label",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 532
},
"_enabled": true,
"__prefab": {
"__id__": 536
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_string": "选择战斗技能",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 25,
"_fontSize": 25,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 0,
"_enableWrapText": true,
"_font": null,
"_isSystemFontUsed": true,
"_spacingX": 0,
"_isItalic": false,
"_isBold": true,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": true,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "a4wLRAtmNJSbx288TRTutC"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "23Txmi98VPPbg3RNDrGNXJ",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
@@ -10441,7 +10603,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 533
"__id__": 539
},
"_contentSize": {
"__type__": "cc.Size",
@@ -10469,7 +10631,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 535
"__id__": 541
},
"_alignFlags": 42,
"_target": null,
@@ -10505,7 +10667,7 @@
},
"_enabled": false,
"__prefab": {
"__id__": 537
"__id__": 543
},
"_resizeMode": 1,
"_layoutType": 1,
@@ -10543,7 +10705,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 539
"__id__": 545
},
"_id": ""
},
@@ -10574,7 +10736,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 542
"__id__": 548
},
"_contentSize": {
"__type__": "cc.Size",
@@ -10602,7 +10764,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 544
"__id__": 550
},
"_alignFlags": 45,
"_target": null,
@@ -10638,7 +10800,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 546
"__id__": 552
},
"_id": ""
},
@@ -10657,15 +10819,6 @@
"fileId": "d0FqR3MNdHHKbJYj7BXmc4",
"instance": null,
"targetOverrides": [
{
"__id__": 548
},
{
"__id__": 550
},
{
"__id__": 552
},
{
"__id__": 554
},
@@ -10710,6 +10863,15 @@
},
{
"__id__": 582
},
{
"__id__": 584
},
{
"__id__": 586
},
{
"__id__": 588
}
],
"nestedPrefabInstanceRoots": [
@@ -10737,7 +10899,7 @@
"__id__": 25
},
"targetInfo": {
"__id__": 549
"__id__": 555
}
},
{
@@ -10759,7 +10921,7 @@
"__id__": 25
},
"targetInfo": {
"__id__": 551
"__id__": 557
}
},
{
@@ -10781,7 +10943,7 @@
"__id__": 25
},
"targetInfo": {
"__id__": 553
"__id__": 559
}
},
{
@@ -10803,7 +10965,7 @@
"__id__": 25
},
"targetInfo": {
"__id__": 555
"__id__": 561
}
},
{
@@ -10825,7 +10987,7 @@
"__id__": 25
},
"targetInfo": {
"__id__": 557
"__id__": 563
}
},
{
@@ -10846,72 +11008,6 @@
"target": {
"__id__": 25
},
"targetInfo": {
"__id__": 559
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"c6fA+I52NLy7nwIG/TAXFX"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"BG_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 561
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"40n0LdBjNFe5UPFihdLgY/"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"icon_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 563
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"08p7XmUnpCJKHgFSs+XBKi"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"name_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 565
}
@@ -10929,7 +11025,7 @@
},
"sourceInfo": null,
"propertyPath": [
"cost_node"
"BG_node"
],
"target": {
"__id__": 184
@@ -10938,6 +11034,72 @@
"__id__": 567
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"40n0LdBjNFe5UPFihdLgY/"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"icon_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 569
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"08p7XmUnpCJKHgFSs+XBKi"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"name_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 571
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"c6fA+I52NLy7nwIG/TAXFX"
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 191
},
"sourceInfo": null,
"propertyPath": [
"cost_node"
],
"target": {
"__id__": 184
},
"targetInfo": {
"__id__": 573
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
@@ -10957,7 +11119,7 @@
"__id__": 184
},
"targetInfo": {
"__id__": 569
"__id__": 575
}
},
{
@@ -10979,7 +11141,7 @@
"__id__": 184
},
"targetInfo": {
"__id__": 571
"__id__": 577
}
},
{
@@ -11001,7 +11163,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 573
"__id__": 579
}
},
{
@@ -11023,7 +11185,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 575
"__id__": 581
}
},
{
@@ -11045,7 +11207,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 577
"__id__": 583
}
},
{
@@ -11067,7 +11229,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 579
"__id__": 585
}
},
{
@@ -11089,7 +11251,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 581
"__id__": 587
}
},
{
@@ -11111,7 +11273,7 @@
"__id__": 336
},
"targetInfo": {
"__id__": 583
"__id__": 589
}
},
{

View File

@@ -50,19 +50,22 @@
},
{
"__id__": 295
},
{
"__id__": 307
}
],
"_active": true,
"_components": [
{
"__id__": 307
"__id__": 323
},
{
"__id__": 309
"__id__": 325
}
],
"_prefab": {
"__id__": 311
"__id__": 327
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -5667,6 +5670,396 @@
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "call",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 308
},
{
"__id__": 314
}
],
"_active": true,
"_components": [
{
"__id__": 320
}
],
"_prefab": {
"__id__": 322
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": -23.213,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "btn_yellow",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 307
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 309
},
{
"__id__": 311
}
],
"_prefab": {
"__id__": 313
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 0.8,
"y": 0.8,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 308
},
"_enabled": true,
"__prefab": {
"__id__": 310
},
"_contentSize": {
"__type__": "cc.Size",
"width": 185,
"height": 81
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "f5+WQKeepDpI7jXqgvmtiO"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 308
},
"_enabled": true,
"__prefab": {
"__id__": 312
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "6165ffc9-a838-4a33-b569-bdbaaab0e6b4@b2501",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "08MkVcRXlJh64uV97FC5zt"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "979t7Rjp5IGpxx6E++HMV4",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Label",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 307
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 315
},
{
"__id__": 317
}
],
"_prefab": {
"__id__": 319
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 314
},
"_enabled": true,
"__prefab": {
"__id__": 316
},
"_contentSize": {
"__type__": "cc.Size",
"width": 63.5999755859375,
"height": 54.4
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "feOuVKuYxJK6z+M3tV8Ey3"
},
{
"__type__": "cc.Label",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 314
},
"_enabled": true,
"__prefab": {
"__id__": 318
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_string": "召唤",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 29.8,
"_fontSize": 29.8,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 0,
"_enableWrapText": true,
"_font": null,
"_isSystemFontUsed": true,
"_spacingX": 0,
"_isItalic": false,
"_isBold": true,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": true,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "00BfCWkAJL/p90pcsuwUDH"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "83KbPaQKpJ3p+hfLZ1PBTs",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 307
},
"_enabled": true,
"__prefab": {
"__id__": 321
},
"_contentSize": {
"__type__": "cc.Size",
"width": 148,
"height": 64.8
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "94GKNoSM1MwIqd0zy183DD"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "57KHqoGQRBmIdHCIXwuEoC",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
@@ -5677,7 +6070,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 308
"__id__": 324
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5705,10 +6098,13 @@
},
"_enabled": true,
"__prefab": {
"__id__": 310
"__id__": 326
},
"Lock": null,
"unLock": null,
"call_btn": {
"__id__": 307
},
"name_node": {
"__id__": 257
},

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "b2a3067a-af88-4ff7-acdd-7474b8a163d8",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "list-me"
}
}

View File

@@ -185,10 +185,10 @@
"a": 255
},
"_spriteFrame": {
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@d1468",
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@d5229",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_type": 1,
"_fillType": 0,
"_sizeMode": 0,
"_fillCenter": {
@@ -200,7 +200,10 @@
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_atlas": {
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73",
"__expectedType__": "cc.SpriteAtlas"
},
"_id": ""
},
{
@@ -279,8 +282,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -297.949,
"y": 0,
"x": -276.372,
"y": 8.188,
"z": 0
},
"_lrot": {
@@ -418,8 +421,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -299.563,
"y": 0,
"x": -277.986,
"y": 8.188,
"z": 0
},
"_lrot": {
@@ -577,8 +580,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -217.727,
"y": 0,
"x": -214.902,
"y": 8.188,
"z": 0
},
"_lrot": {
@@ -590,8 +593,8 @@
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 0.35,
"y": 0.35,
"x": 0.3,
"y": 0.3,
"z": 1
},
"_mobility": 0,
@@ -713,8 +716,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -139.467,
"y": 0,
"x": -136.642,
"y": 8.188,
"z": 0
},
"_lrot": {
@@ -872,8 +875,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 225.016,
"y": 0,
"x": 167.228,
"y": 8.1,
"z": 0
},
"_lrot": {
@@ -952,8 +955,8 @@
"_string": "999999",
"_horizontalAlign": 0,
"_verticalAlign": 1,
"_actualFontSize": 26,
"_fontSize": 25,
"_actualFontSize": 31,
"_fontSize": 30,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 2,
@@ -1031,8 +1034,8 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 181.966,
"y": 0,
"x": 140.032,
"y": 8.1,
"z": 0
},
"_lrot": {
@@ -1044,8 +1047,8 @@
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 0.4,
"y": 0.4,
"x": 0.3,
"y": 0.3,
"z": 1
},
"_mobility": 0,

File diff suppressed because it is too large Load Diff

View File

@@ -3292,7 +3292,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 617.5,
"y": 657.577,
"z": 0
},
"_lrot": {
@@ -3304,8 +3304,8 @@
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"x": 1.5,
"y": 1.5,
"z": 1
},
"_mobility": 0,
@@ -3332,8 +3332,8 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 740,
"height": 55
"width": 540,
"height": 117
},
"_anchorPoint": {
"__type__": "cc.Vec2",
@@ -3369,12 +3369,12 @@
"a": 255
},
"_spriteFrame": {
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@98637",
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73@4dd1c",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
@@ -3384,7 +3384,10 @@
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_atlas": {
"__uuid__": "cb93c900-b440-4571-91d1-7da1636e3d73",
"__expectedType__": "cc.SpriteAtlas"
},
"_id": ""
},
{
@@ -3399,15 +3402,15 @@
"node": {
"__id__": 134
},
"_enabled": true,
"_enabled": false,
"__prefab": {
"__id__": 140
},
"_alignFlags": 41,
"_target": null,
"_left": -10,
"_right": -10,
"_top": -5,
"_left": 90,
"_right": 0,
"_top": -89.59100000000001,
"_bottom": 0,
"_horizontalCenter": 0,
"_verticalCenter": 0,
@@ -3629,10 +3632,10 @@
"__id__": 151
},
"asset": {
"__uuid__": "0c80c911-642f-423a-8ebb-98aebbbe2ef0",
"__uuid__": "b2a3067a-af88-4ff7-acdd-7474b8a163d8",
"__expectedType__": "cc.Prefab"
},
"fileId": "70V66T2DlAP7ksTOaOBDja",
"fileId": "43WU05gfVAPr5YF69YW+M4",
"instance": {
"__id__": 153
},
@@ -3640,7 +3643,7 @@
},
{
"__type__": "cc.PrefabInstance",
"fileId": "50AgFB9kROhppT8Q5wAY6S",
"fileId": "e722VC+kdPfqeaFe1joI7B",
"prefabRootNode": {
"__id__": 1
},
@@ -3670,12 +3673,12 @@
"propertyPath": [
"_name"
],
"value": "melist"
"value": "list-me"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"70V66T2DlAP7ksTOaOBDja"
"43WU05gfVAPr5YF69YW+M4"
]
},
{
@@ -4318,7 +4321,7 @@
"__expectedType__": "cc.Prefab"
},
"melist_prefab": {
"__uuid__": "0c80c911-642f-423a-8ebb-98aebbbe2ef0",
"__uuid__": "b2a3067a-af88-4ff7-acdd-7474b8a163d8",
"__expectedType__": "cc.Prefab"
},
"_id": ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -84,8 +84,8 @@ export const CardInitCoins = 4
export const CARD_POOL_UPGRADE_DISCOUNT_PER_WAVE = 10
/** 卡池默认初始等级 */
export const CARD_POOL_INIT_LEVEL = CardLV.LV1
/** 卡池等级上限 */
export const CARD_POOL_MAX_LEVEL = CardLV.LV5
/** 卡池等级上限(统一由 FightSet.MAX_CARD_POOL_LEVEL 设定,保持单一数据源) */
export const CARD_POOL_MAX_LEVEL = FightSet.MAX_CARD_POOL_LEVEL as unknown as CardLV
/** 英雄最高等级限制 */
export const CARD_HERO_MAX_LEVEL = 1
/** 基础卡池(英雄、技能、功能) */

View File

@@ -28,7 +28,7 @@ export enum FightSet {
MORE_RC = 10,//更多次数 广告获取的次数
HEARTPOS = -320,//基地位置
HERO_MAX_NUM = 6,//英雄最大数量
MERGE_MAX = 3, //英雄最大等级
MERGE_MAX = 2, //英雄最大等级
MERGE_NEED = 3, //英雄升级需要的英雄数
// BACK_RANG=30,//后退范围
BACK_RANG = 30,//后退范围
@@ -43,10 +43,21 @@ export enum FightSet {
WAVE_HEAL_RATE = 0.5, // 回合结束时所有英雄恢复最大生命值的比例
PUNCTURE_DOWN = 50,
REFRESH_COST = 1,
BASE_COST=3
BASE_COST = 3,
// 刷新成本
/** 卡池等级上限(对应 CardLV 最大值) */
MAX_CARD_POOL_LEVEL = 5,
}
/**
* 卡池升级波次配置(单一数据源)。
* 索引 i 对应目标等级 = i + 2
* - 第 1 个波次 → 升至 LV2
* - 第 2 个波次 → 升至 LV3
* - 依此类推,上限为 FightSet.MAX_CARD_POOL_LEVEL
*/
export const CARD_POOL_UPGRADE_WAVES: number[] = [4, 7, 10, 13];
export const laneIdx = {
2: [-180, 90],
1: [-180, 0],

View File

@@ -100,14 +100,14 @@ export enum SkillTriggerType {
}
export const SkillTriggerName = {
[SkillTriggerType.Call]: "降临",
[SkillTriggerType.Dead]: "遗志",
[SkillTriggerType.FStart]: "手",
[SkillTriggerType.FEnd]: "终战",
[SkillTriggerType.Call]: "召唤",
[SkillTriggerType.Dead]: "亡语",
[SkillTriggerType.FStart]: "手",
[SkillTriggerType.FEnd]: "生息",
[SkillTriggerType.Field]: "光环",
[SkillTriggerType.Atking]: "击",
[SkillTriggerType.Atked]: "击",
[SkillTriggerType.Revive]: "涅槃",
[SkillTriggerType.Atking]: "击",
[SkillTriggerType.Atked]: "击",
[SkillTriggerType.Revive]: "复活",
}
export const SkillTriggerDesc = {

View File

@@ -249,7 +249,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
// 触发复活动画
if (targetView && reviveSkillConf) {
targetView.playReady(reviveSkillConf.readyAnm);
targetView.skill_name('', reviveSkillConf.uuid);
targetView.skill_name('', reviveSkillConf.uuid, SkillTriggerType.Revive);
// 延迟 0.5 秒后恢复状态,让特效有时间播放,同时也能体现“正在复活”的过程
targetView.scheduleOnce(() => {
if (targetView.node && targetView.node.isValid) {

View File

@@ -321,10 +321,10 @@ export class HeroViewComp extends CCComp {
Tooltip.load(pos, type, value, s_uuid, this.node);
}
/** 技能提示 */
public skill_name(value: string = "", s_uuid: number = 1001, y: number = 50) {
public skill_name(value: string = "", s_uuid: number = 1001, triggerType: string = "", y: number = 50) {
let pos = v3(0, 60);
pos.y = pos.y + y;
Tooltip.load(pos, TooltipTypes.skill, value, s_uuid, this.node);
Tooltip.load(pos, TooltipTypes.skill, value, s_uuid, this.node, 1, this.model?.fac ?? FacSet.MON, triggerType);
}
/** 血量提示(伤害数字) */
private hp_tip(type: number = 1, value: string = "", s_uuid: number = 1001, y: number = 0) {

View File

@@ -278,7 +278,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
if(castTimes >1){
val = "*"+castTimes.toString
}
heroView.skill_name(val,s_uuid)
heroView.skill_name(val,s_uuid,triggerType)
for (let i = 0; i < castTimes; i++) {
if (!heroView.node || !heroView.node.isValid) return;
if (isFriendly) {

View File

@@ -62,6 +62,9 @@ export class CardComp extends CCComp {
/** 解锁态图标节点(显示时表示本槽位未锁定,可点击上锁) */
@property(Node)
unLock: Node = null!
@property(Node)
call_btn: Node = null!
/** 英雄卡信息面板(显示 AP / HP 废弃,改用直接绑定 */
// @property(Node)
// info_node=null!

View File

@@ -45,7 +45,7 @@ import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { smc } from "../common/SingletonModuleComp";
import { HeroInfo, HType } from "../common/config/heroSet";
import { HeroViewComp } from "../hero/HeroViewComp";
import { FacSet, FightSet } from "../common/config/GameSet";
import { FacSet, FightSet, CARD_POOL_UPGRADE_WAVES } from "../common/config/GameSet";
import { MoveComp } from "../hero/MoveComp";
import { MissionHeroComp } from "./MissionHeroComp";
import { MissionEconomy } from "./MissionEconomy";
@@ -1050,26 +1050,35 @@ export class MissionCardComp extends CCComp {
if (this.poolLv >= CARD_POOL_MAX_LEVEL) {
nextLabel.string = `已满级`;
} else {
let upgradeWaves: number[] = [5, 10];
// 优先取 MissionComp 运行时配置,缺失时回退到全局常量
let upgradeWaves: number[] = CARD_POOL_UPGRADE_WAVES;
ecs.query(ecs.allOf(MissionComp)).forEach((entity) => {
const mission = entity.get(MissionComp);
if (mission && mission.cardPoolUpgradeWaves) {
if (mission && mission.cardPoolUpgradeWaves && mission.cardPoolUpgradeWaves.length > 0) {
upgradeWaves = mission.cardPoolUpgradeWaves;
}
});
// 已完成的升级次数 = 当前等级 - 初始等级
// 例poolLv=2INIT=1→ 已升 1 次 → 下一升级对应 upgradeWaves[1]
const upgradedCount = Math.max(0, Math.floor(this.poolLv) - CARD_POOL_INIT_LEVEL);
const currentWave = this.getCurrentWave();
let nextWave = -1;
for (let i = 0; i < upgradeWaves.length; i++) {
if (upgradeWaves[i] > currentWave) {
nextWave = upgradeWaves[i];
break;
}
}
if (nextWave !== -1) {
const remain = nextWave - currentWave;
nextLabel.string = `${remain} 回合后升级`;
} else {
if (upgradedCount >= upgradeWaves.length) {
// 配置已耗尽但等级未到上限(配置缺陷)
nextLabel.string = `已满级`;
} else {
const nextWave = upgradeWaves[upgradedCount];
if (nextWave > currentWave) {
const remain = nextWave - currentWave;
nextLabel.string = `${remain} 回合后升级`;
} else if (nextWave === currentWave) {
// 当前波次正好是升级波次(事件可能即将触发或刚刚触发)
nextLabel.string = `本回合升级`;
} else {
// nextWave < currentWave异常状态升级事件未按时触发
nextLabel.string = `即将升级`;
}
}
}
}

View File

@@ -39,7 +39,7 @@ import { HeroViewComp } from "../hero/HeroViewComp";
import { SkillTriggerHelper } from "../hero/SkillTriggerHelper";
import { UIID } from "../common/config/GameUIConfig";
import { SkillView } from "../skill/SkillView";
import { FacSet, FightSet } from "../common/config/GameSet";
import { FacSet, FightSet, CARD_POOL_UPGRADE_WAVES } from "../common/config/GameSet";
import { HeroInfo } from "../common/config/heroSet";
import { mLogger } from "../common/Logger";
import { Monster } from "../hero/Mon";
@@ -88,9 +88,8 @@ export class MissionComp extends CCComp {
private maxMonsterCount: number = 80;
/** 怪物数量恢复阈值(降至此值以下恢复刷怪) */
private resumeMonsterCount: number = 45;
/** 卡池升级波次配置:达到对应波次时,推送卡池升级事件 */
@property({ type: [CCInteger], tooltip: "卡池升级波次配置,例如 [10, 20] 表示第10波升到2级第20波升到3级" })
cardPoolUpgradeWaves: number[] = [5, 10];
/** 卡池升级波次配置(默认值来自 GameSet.CARD_POOL_UPGRADE_WAVES保持全局统一 */
public cardPoolUpgradeWaves: number[] = CARD_POOL_UPGRADE_WAVES;
// ======================== 编辑器绑定节点 ========================

View File

@@ -544,7 +544,7 @@ export const InfiniteModeConfig = {
*/
export const TestModeConfig = {
/** 是否开启单挑测试模式 */
enable: false,
enable: true,
/** 测试模式中生成怪物的基础生命值 (对应 1级 英雄) */
baseHp: 150,
/** 测试模式中生成怪物的基础攻击力 (对应 1级 英雄) */

View File

@@ -60,7 +60,7 @@ export class Tooltip extends ecs.Entity {
this.remove(TooltipCom);
super.destroy();
}
static load(pos: Vec3 = Vec3.ZERO,type:number=1,vaule:string="",s_uuid:number=1001,parent:any=null,cd:number=1,fac:number=FacSet.MON) {
static load(pos: Vec3 = Vec3.ZERO,type:number=1,vaule:string="",s_uuid:number=1001,parent:any=null,cd:number=1,fac:number=FacSet.MON,triggerType:string="") {
let node: Node;
if (Tooltip.pool.size() > 0) {
node = Tooltip.pool.get()!;
@@ -75,7 +75,7 @@ export class Tooltip extends ecs.Entity {
node.active = true;
var sv = node.getComponent(TooltipCom)!;
sv.init(type, vaule, s_uuid, fac);
sv.init(type, vaule, s_uuid, fac, triggerType);
// this.add(sv); // 不要添加到单例实体上,否则会覆盖或导致单例被销毁
}

View File

@@ -1,8 +1,9 @@
import { _decorator, Collider2D, Contact2DType, v3, IPhysics2DContact, Vec3, tween, Label, resources, SpriteFrame, Sprite, UIOpacity, Color, math, Tween } from "cc";
import { _decorator, Collider2D, Contact2DType, v3, IPhysics2DContact, Vec3, tween, Label, resources, SpriteFrame, Sprite, UIOpacity, Color, math, Tween,Node } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { SkillSet } from "../common/config/SkillSet";
import { FacSet, TooltipTypes } from "../common/config/GameSet";
import { SkillTriggerType } from "../common/config/heroSet";
import { Tooltip } from "./Tooltip";
const { ccclass, property } = _decorator;
@@ -11,11 +12,26 @@ const { ccclass, property } = _decorator;
@ccclass('TooltipCom')
@ecs.register('TooltipView', false)
export class TooltipCom extends CCComp {
@property(Node)
atking_bg: Node = null;
@property(Node)
atked_bg: Node = null;
@property(Node)
fstart_bg: Node = null;
@property(Node)
fend_bg: Node = null;
@property(Node)
dead_bg: Node = null;
@property(Node)
revive_bg: Node = null;
stype: number = 1; // 1:减少生命值2增加生命值3技能图标
value: string = "";
s_uuid: number = 1001;
fac: number = FacSet.MON;
/** 当前技能喊话对应的触发类型(空字符串表示普通主动技能) */
triggerType: string = "";
// 动画参数配置
private readonly popDuration = 0.15;
private readonly driftDuration = 0.5;
@@ -29,11 +45,12 @@ export class TooltipCom extends CCComp {
}
/** 初始化并播放动画 */
init(type: number, value: string, uuid: number, fac: number = FacSet.MON) {
init(type: number, value: string, uuid: number, fac: number = FacSet.MON, triggerType: string = "") {
this.stype = type;
this.value = value;
this.s_uuid = uuid;
this.fac = fac;
this.triggerType = triggerType;
// 初始化或获取 UIOpacity 组件
this._uiOpacity = this.node.getComponent(UIOpacity);
@@ -106,6 +123,8 @@ export class TooltipCom extends CCComp {
this.setupLabel("skill", "name", skillName+this.value);
// this.node.setPosition(v3(this.node.position.x, currentY));
this.node.setSiblingIndex(topSiblingIndex);
// 根据触发类型激活对应的背景标识(追击/反击/起手/生息/亡语/复活)
this.setupTriggerBg(this.triggerType);
break;
case TooltipTypes.uskill:
this.setupLabel("uskill", "name", this.value);
@@ -146,6 +165,34 @@ export class TooltipCom extends CCComp {
}
}
/**
* 根据技能触发类型激活对应的背景标识节点
* 仅 TooltipTypes.skill 走此分支,其他飘字类型不受影响
* 对象池复用场景下先统一关闭所有 _bg避免上一次的状态残留
*/
private setupTriggerBg(triggerType: string) {
// 先关闭所有触发类型背景,防止节点池复用时残留
this.atking_bg && (this.atking_bg.active = false);
this.atked_bg && (this.atked_bg.active = false);
this.fstart_bg && (this.fstart_bg.active = false);
this.fend_bg && (this.fend_bg.active = false);
this.dead_bg && (this.dead_bg.active = false);
this.revive_bg && (this.revive_bg.active = false);
if (!triggerType) return;
const bgMap: Record<string, Node | null> = {
[SkillTriggerType.Atking]: this.atking_bg,
[SkillTriggerType.Atked]: this.atked_bg,
[SkillTriggerType.FStart]: this.fstart_bg,
[SkillTriggerType.FEnd]: this.fend_bg,
[SkillTriggerType.Dead]: this.dead_bg,
[SkillTriggerType.Revive]: this.revive_bg,
};
const bg = bgMap[triggerType];
if (bg) bg.active = true;
}
playAnimation(scaleMax: number, isCrit: boolean, isHeal: boolean, sx: number = 1) {
// 随机 X 轴偏移 (防止重叠)
const randomX = (Math.random() - 0.5) * 60;