///|
/// 正式 API 中使用枚举表达 body part,而不是直接暴露原始字符串。
pub(all) enum BodyPartKind {
Move
Work
Carry
Attack
RangedAttack
Heal
Tough
} derive(Show, Eq, Compare)
///|
/// 转换为 raw 层使用的原始 body part 字符串。
pub fn BodyPartKind::to_raw(self : BodyPartKind) -> String {
match self {
Move => @raw.BODY_PART_MOVE
Work => @raw.BODY_PART_WORK
Carry => @raw.BODY_PART_CARRY
Attack => @raw.BODY_PART_ATTACK
RangedAttack => @raw.BODY_PART_RANGED_ATTACK
Heal => @raw.BODY_PART_HEAL
Tough => @raw.BODY_PART_TOUGH
}
}
///|
fn body_part_kind_from_raw(raw_kind : String) -> BodyPartKind {
match raw_kind {
@raw.BODY_PART_MOVE => Move
@raw.BODY_PART_WORK => Work
@raw.BODY_PART_CARRY => Carry
@raw.BODY_PART_ATTACK => Attack
@raw.BODY_PART_RANGED_ATTACK => RangedAttack
@raw.BODY_PART_HEAL => Heal
@raw.BODY_PART_TOUGH => Tough
_ => panic()
}
}
///|
/// 第一阶段资源类型先只覆盖 Energy,但正式 API 仍采用枚举结构。
pub(all) enum ResourceKind {
Energy
} derive(Show, Eq, Compare)
///|
/// 转换为 raw 层使用的原始资源字符串。
pub fn ResourceKind::to_raw(self : ResourceKind) -> String {
match self {
Energy => @raw.RESOURCE_ENERGY
}
}
///|
/// 结构原型名称用于创建 construction site。
pub(all) enum StructureKind {
Spawn
Extension
Road
Rampart
Wall
Tower
Container
} derive(Show, Eq, Compare)
///|
/// 转换为 raw 层使用的原始结构 prototype 名称。
pub fn StructureKind::to_prototype_name(self : StructureKind) -> String {
match self {
Spawn => "StructureSpawn"
Extension => "StructureExtension"
Road => "StructureRoad"
Rampart => "StructureRampart"
Wall => "StructureWall"
Tower => "StructureTower"
Container => "StructureContainer"
}
}
///|
/// 返回当前已知的结构原型种类列表。
pub fn structure_kinds() -> Array[StructureKind] {
[Spawn, Extension, Road, Rampart, Wall, Tower, Container]
}