feat(config-editor): add RecordValue type and enum mirror
This commit is contained in:
15
extensions/pixelhero-config-editor/src/io/recordValue.ts
Normal file
15
extensions/pixelhero-config-editor/src/io/recordValue.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
/** IO 层对配置对象字面量值的结构化表示。零依赖。 */
|
||||
export type RecordValue =
|
||||
| { kind: 'num'; value: number }
|
||||
| { kind: 'str'; value: string }
|
||||
| { kind: 'bool'; value: boolean }
|
||||
| { kind: 'enumRef'; qualifier: string; member: string } // 如 FacSet.HERO
|
||||
| { kind: 'speed'; level: string } // AtkSpeedSet[AtkSpeedLv.X].cd
|
||||
| { kind: 'obj'; props: Record<string, RecordValue> }
|
||||
| { kind: 'arr'; items: RecordValue[] }
|
||||
| { kind: 'raw'; text: string }; // 未识别表达式,原样保留
|
||||
|
||||
export function isScalar(v: RecordValue): boolean {
|
||||
return v.kind === 'num' || v.kind === 'str' || v.kind === 'bool'
|
||||
|| v.kind === 'enumRef' || v.kind === 'speed' || v.kind === 'raw';
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
export interface EnumMember { label: string; value: number | string; }
|
||||
export interface EnumDef { qualifier: string; members: EnumMember[]; }
|
||||
|
||||
export const ENUMS: Record<string, EnumDef> = {
|
||||
HType: { qualifier: 'HType', members: [
|
||||
{ label: '近战 Melee', value: 0 }, { label: '中程 Mid', value: 1 }, { label: '远程 Long', value: 2 } ] },
|
||||
FacSet: { qualifier: 'FacSet', members: [
|
||||
{ label: '英雄 HERO', value: 0 }, { label: '怪物 MON', value: 1 } ] },
|
||||
TGroup: { qualifier: 'TGroup', members: [
|
||||
{ label: '自身 Self', value: 0 }, { label: '友方含己 Ally', value: 1 },
|
||||
{ label: '友方 Team', value: 2 }, { label: '敌方 Enemy', value: 3 }, { label: '全体 All', value: 4 } ] },
|
||||
DTType: { qualifier: 'DTType', members: [
|
||||
{ label: '单体 single', value: 0 }, { label: '范围 range', value: 1 }, { label: '3x3 aoe_grid', value: 2 } ] },
|
||||
SkillKind: { qualifier: 'SkillKind', members: [
|
||||
{ label: '伤害 Damage', value: 0 }, { label: '治疗 Heal', value: 1 }, { label: '护盾 Shield', value: 2 },
|
||||
{ label: '辅助 Support', value: 3 }, { label: '金币 Gold', value: 4 } ] },
|
||||
DType: { qualifier: 'DType', members: [
|
||||
{ label: '物理 ATK', value: 0 }, { label: '冰 ICE', value: 1 }, { label: '火 FIRE', value: 2 }, { label: '风 WIND', value: 3 } ] },
|
||||
IType: { qualifier: 'IType', members: [
|
||||
{ label: '近战 Melee', value: 0 }, { label: '远程 remote', value: 1 }, { label: '辅助 support', value: 2 } ] },
|
||||
RType: { qualifier: 'RType', members: [
|
||||
{ label: '直线 linear', value: 0 }, { label: '贝塞尔 bezier', value: 1 },
|
||||
{ label: '固定起点 fixed', value: 2 }, { label: '固定终点 fixedEnd', value: 3 } ] },
|
||||
EType: { qualifier: 'EType', members: [
|
||||
{ label: '动画结束 animationEnd', value: 0 }, { label: '时间结束 timeEnd', value: 1 }, { label: '碰撞 collision', value: 2 } ] },
|
||||
FieldSkillType: { qualifier: 'FieldSkillType', members: [
|
||||
{ label: '召唤次数 SummonCount', value: 1 }, { label: '死亡次数 DeadCount', value: 2 },
|
||||
{ label: '开场次数 StartCount', value: 3 }, { label: '结束次数 EndCount', value: 4 },
|
||||
{ label: '每波金币 WaveGold', value: 5 }, { label: '卖出金币 SellGold', value: 6 },
|
||||
{ label: '战后回复 WaveHeal', value: 7 }, { label: '英雄攻击 HeroAtk', value: 8 },
|
||||
{ label: '英雄击晕 HeroStun', value: 9 }, { label: '英雄暴击 HeroCrit', value: 10 },
|
||||
{ label: '英雄暴伤 HeroCritDamage', value: 11 }, { label: '英雄攻速 HeroSpeed', value: 12 },
|
||||
{ label: '购买优惠 BuyDiscount', value: 13 }, { label: '刷新优惠 RefreshDiscount', value: 14 },
|
||||
{ label: '英雄生命 HeroHp', value: 16 }, { label: '英雄风怒 HeroWindFury', value: 17 },
|
||||
{ label: '英雄穿刺 HeroPuncture', value: 18 }, { label: '攻击次数 AtkCount', value: 19 },
|
||||
{ label: '受击次数 BeAtkCount', value: 20 } ] },
|
||||
AtkSpeedLv: { qualifier: 'AtkSpeedLv', members: [
|
||||
{ label: '极速++ VeryFast1', value: 1 }, { label: '极速+ VeryFast2', value: 2 }, { label: '极速 VeryFast3', value: 3 },
|
||||
{ label: '快速++ Fast1', value: 4 }, { label: '快速+ Fast2', value: 5 }, { label: '快速 Fast3', value: 6 },
|
||||
{ label: '中速++ Normal1', value: 7 }, { label: '中速+ Normal2', value: 8 }, { label: '中速 Normal3', value: 9 },
|
||||
{ label: '一般+ Mid1', value: 10 }, { label: '一般 Mid2', value: 11 }, { label: '一般- Mid3', value: 12 },
|
||||
{ label: '慢 Slow1', value: 13 }, { label: '慢+ Slow2', value: 14 }, { label: '慢++ Slow3', value: 15 },
|
||||
{ label: '很慢 VerySlow1', value: 16 }, { label: '很慢+ VerySlow2', value: 17 }, { label: '很慢++ VerySlow3', value: 18 } ] },
|
||||
Attrs: { qualifier: 'Attrs', members: [
|
||||
{ label: 'ap', value: 'ap' }, { label: 'hp', value: 'hp' }, { label: 'hp_max', value: 'hp_max' },
|
||||
{ label: 'critical', value: 'critical' }, { label: 'critical_damage', value: 'critical_damage' },
|
||||
{ label: 'stun_chance', value: 'stun_chance' }, { label: 'puncture_chance', value: 'puncture_chance' },
|
||||
{ label: 'wfuny', value: 'wfuny' }, { label: 'freeze_chance', value: 'freeze_chance' },
|
||||
{ label: 'knockback_chance', value: 'knockback_chance' } ] },
|
||||
};
|
||||
|
||||
/** qualifier(如 'FacSet')→ 对应 enumId(如 'FacSet')。当前两者同名。 */
|
||||
export const QUALIFIER_TO_ID: Record<string, string> = Object.fromEntries(
|
||||
Object.entries(ENUMS).map(([id, def]) => [def.qualifier, id])
|
||||
);
|
||||
Reference in New Issue
Block a user