Files
pixelheros/assets/script/game/map/RogueConfig.ts
walkpan e7075004fe feat(monster&spawn): 新增飞行怪物支持,重构怪物移动与刷怪系统
抽离MonMoveComp拆分怪物移动逻辑,让MoveComp仅负责英雄移动
新增Fly和FlyBoss怪物类型,配置三层飞行轨道支持空中怪物
重写波次刷怪逻辑,移除固定5槽限制,按轨道自由排布怪物
将怪物生成上限与恢复阈值从5/3调整为50/30
优化渲染排序逻辑,为飞行怪添加持续浮动动画
移除跨波怪物属性继承,波次切换时自动清理残留怪物
2026-05-12 12:23:37 +08:00

168 lines
5.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file RogueConfig.ts
* @description Roguelike 关卡配置 —— 怪物类型、成长值、波次刷怪方案
*
* 职责:
* 1. 定义怪物属性成长类型UpType和每种类型的 AP / HP 每阶段成长值。
* 2. 定义怪物分类MonType和对应的怪物 UUID 池。
* 3. 定义每一波Wave的怪物占位配置WaveSlotConfig / DefaultWaveSlot
* 4. 提供全局刷怪强度偏差系数SpawnPowerBias
*
* 设计说明:
* - 战场固定 5 个占位槽(索引 0-4
* - Boss 默认占 3 个槽位,只要有连续 3 格空闲即可放置。
* - MissionMonComp 在每波开始时读取本配置,决定刷怪组合。
*
* 注意:
* - StageGrow / StageBossGrow 的索引 [0] 为 AP 成长,[1] 为 HP 成长。
* - 实际计算公式base_stat + stage × grow_value × SpawnPowerBias。
*/
// ======================== 属性成长类型枚举 ========================
/** 怪物属性成长类型 */
export enum UpType {
/** 平衡型AP 和 HP 均匀成长 */
AP1_HP1 = 0,
/** 强 HP 型:以血量为主成长 */
HP2 = 1,
/** 强 AP 型:以攻击力为主成长 */
AP2 = 2
}
// ======================== 普通怪成长配置 ========================
/**
* 普通怪每阶段成长值:[AP 成长, HP 成长]
* 每经历一波stage +1怪物的 base_ap / base_hp 增加对应值。
*/
export const StageGrow = {
[UpType.AP1_HP1]: [4,10], // 平衡型:每波攻击+4 血量+10
[UpType.HP2]: [2,20], // 强HP型每波攻击+2 血量+20
[UpType.AP2]: [8,0], // 强AP型每波攻击+8 血量+0
}
// ======================== Boss 额外成长配置 ========================
/**
* Boss 在普通怪成长基础上的 **额外** 成长值:[AP 增量, HP 增量]
* 实际 Boss 成长 = StageGrow + StageBossGrow。
*/
export const StageBossGrow = {
[UpType.AP1_HP1]: [3,16], // 平衡型 Boss额外攻击+3 血量+16
[UpType.HP2]: [1,24], // 强HP型 Boss额外攻击+1 血量+24
[UpType.AP2]: [10,4], // 强AP型 Boss额外攻击+10 血量+4
}
// ======================== 怪物类型定义 ========================
/** 怪物类型常量(用于 WaveSlotConfig 中引用) */
export const MonType = {
/** 近战普通怪 */
Melee: 0,
/** 远程普通怪 */
Long: 1,
/** 辅助怪(支持类) */
Support: 2,
/** 近战 Boss */
MeleeBoss: 3,
/** 远程 Boss */
LongBoss: 4,
/** 飞行普通怪 */
Fly: 5,
/** 飞行 Boss */
FlyBoss: 6,
}
// ======================== 怪物 UUID 池 ========================
/** 各类型对应的怪物 UUID 列表(随机抽取) */
export const MonList = {
[MonType.Melee]: [6001,6002,6003], // 近战怪池
[MonType.Long]: [6004,6005], // 远程怪池
[MonType.Support]: [6005], // 辅助怪池
[MonType.MeleeBoss]:[6006,6105], // 近战 Boss 池
[MonType.LongBoss]:[6104], // 远程 Boss 池
[MonType.Fly]: [6004, 6005], // 飞行怪池 (占位)
[MonType.FlyBoss]: [6104], // 飞行 Boss 池 (占位)
}
// ======================== 全局刷怪强度系数 ========================
/**
* 全局刷怪强度偏差系数。
* 所有怪物的最终 AP / HP 会乘以此系数。
* 后期可根据玩家强度动态调整以实现自适应难度。
*/
export const SpawnPowerBias = 1
// ======================== 波次占位配置数据结构 ========================
/** 单条波次占位配置 */
export interface IWaveSlot {
/** 怪物类型(参考 MonType */
type: number;
/** 该类型的怪物数量 */
count: number;
/** (可选)每个怪物占用几个槽位,默认 1大型 Boss 设为 2 (新方案中主要用作标识Boss) */
slotsPerMon?: number;
/** 可选飞行层0=地面, 1=第一层空中(+120), 2=第二层空中(+240)。默认地面为 0Fly/FlyBoss 类型默认 1 */
flyLane?: 0 | 1 | 2;
}
// =========================================================================================
// 【每波怪物占位与刷怪配置说明】
//
// 字段说明:
// - type: 怪物类型 (参考 MonType如近战 0远程 1Boss 3飞行 5 等)。
// - count: 该类型的怪在场上同时存在几个。
// - slotsPerMon: (可选) Boss 占位,旧方案占用多格,现作为标识。
// - flyLane: (可选) 飞行层0=地面1=空中1层2=空中2层。
//
// 【规则约束】:
// - 突破 5 槽限制,怪物按刷怪顺序依次从 X=280 开始向右(每隔 50排布。
// - Boss 和普通怪占据一个相同的 X 锚点,但视觉体积更大。
// =========================================================================================
/** 各波次的怪物占位配置key = 波次编号) */
export const WaveSlotConfig: { [wave: number]: IWaveSlot[] } = {
/** 第 1 波2 近战 + 1 近战Boss(默认占3格) */
1: [
{ type: MonType.Melee, count: 1 },
],
2: [
{ type: MonType.Melee, count: 1 },
{ type: MonType.Long, count: 1 },
],
3: [
{ type: MonType.Melee, count: 1 },
{ type: MonType.Long, count: 2 },
],
4: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 2 },
],
/** 第 1 波2 近战 + 1 近战Boss(默认占3格) */
10: [
{ type: MonType.MeleeBoss, count: 1 },
{ type: MonType.Long, count: 2 },
],
/** 第 2波2 近战 + 1 远程Boss(默认占3格) */
20: [
{ type: MonType.Melee, count: 2 },
{ type: MonType.LongBoss, count: 1 }
],
}
/**
* 默认占位配置:
* 当 WaveSlotConfig 中找不到对应波次时使用此兜底配置。
* 默认 2 近战 + 3 远程。
*/
export const DefaultWaveSlot: IWaveSlot[] = [
{ type: MonType.Melee, count: 2 },
{ type: MonType.Long, count: 3 }
]