rocalc 0.3.1

一款用于计算洛克王国:世界精灵对决的Rust库
Documentation
//! 定义精灵的基础属性

/// 定义六维面板
#[derive(Debug, Clone, Copy)]
pub struct Six {
    pub hp: f32,
    pub atk: f32,
    pub dfe: f32,
    pub m_atk: f32,
    pub m_dfe: f32,
    pub spd: f32,
}

/// 精灵的六项面板
#[derive(Debug, Clone, Copy)]
pub enum Panel {
    Hp,
    Atk,
    MAtk,
    Dfe,
    MDfe,
    Spd,
}

#[derive(Debug, Clone, Copy)]
/// 精灵的二十种性格
pub enum Car {
    /// 5种加速度性格
    ///
    /// 胆小
    Timid, // 胆小
    /// 开朗
    Sanguine, // 开朗
    /// 急躁
    Impatience, // 急躁
    /// 莽撞
    Obtrusion, // 莽撞
    /// 热情
    Enthusiasm, // 热情

    /// 5种加物攻性格
    ///
    /// 固执
    Stubborn, // 固执
    /// 调皮
    Naughty, // 调皮
    /// 大胆
    Bold, // 大胆
    /// 逞强
    Overreach, // 逞强
    /// 勇敢
    Brave, // 勇敢

    /// 5种加魔攻性格
    ///
    /// 聪明
    Clever, // 聪明
    /// 专注
    Concentration, // 专注
    /// 偏执
    Bigoted, // 偏执
    /// 理性
    Rational, // 理性
    /// 冷静
    Calm, // 冷静

    /// 5种加物抗性格
    ///
    /// 稳重
    Stable, // 稳重
    /// 天真
    Innocent, // 天真
    /// 懒散
    Indolent, // 懒散
    /// 坦率
    Frank, // 坦率
    /// 悠闲
    Leisure, // 悠闲

    /// 5种加魔抗性格
    ///
    /// 警惕
    Vigilant, // 警惕
    /// 害羞
    Shy, // 害羞
    /// 温顺
    Meek, // 温顺
    /// 焦虑
    Anxiety, // 焦虑
    /// 慎重
    Careful, // 慎重

    /// 5种加生命性格
    ///
    /// 沉默
    Silence, // 沉默
    /// 平和
    Peace, // 平和
    /// 忧郁
    Melancholy, // 忧郁
    /// 粗心
    Careless, // 粗心
    /// 踏实
    Sureness, // 踏实
}
/// 根据性格得出需要增减益的字段
impl Car {
    pub fn get_key(&self) -> [&Panel; 2] {
        match self {
            Car::Timid => [&Panel::Spd, &Panel::Atk],
            Car::Sanguine => [&Panel::Spd, &Panel::MAtk],
            Car::Impatience => [&Panel::Spd, &Panel::Dfe],
            Car::Obtrusion => [&Panel::Spd, &Panel::MDfe],
            Car::Enthusiasm => [&Panel::Spd, &Panel::Hp],

            Car::Stubborn => [&Panel::Atk, &Panel::MAtk],
            Car::Naughty => [&Panel::Atk, &Panel::Dfe],
            Car::Bold => [&Panel::Atk, &Panel::MDfe],
            Car::Overreach => [&Panel::Atk, &Panel::Hp],
            Car::Brave => [&Panel::Atk, &Panel::Spd],

            Car::Clever => [&Panel::MAtk, &Panel::Atk],
            Car::Concentration => [&Panel::MAtk, &Panel::Dfe],
            Car::Bigoted => [&Panel::MAtk, &Panel::MDfe],
            Car::Rational => [&Panel::MAtk, &Panel::Hp],
            Car::Calm => [&Panel::MAtk, &Panel::Spd],

            Car::Stable => [&Panel::Dfe, &Panel::Atk],
            Car::Innocent => [&Panel::Dfe, &Panel::MAtk],
            Car::Indolent => [&Panel::Dfe, &Panel::MDfe],
            Car::Frank => [&Panel::Dfe, &Panel::Hp],
            Car::Leisure => [&Panel::Dfe, &Panel::Spd],

            Car::Vigilant => [&Panel::MDfe, &Panel::Atk],
            Car::Shy => [&Panel::MDfe, &Panel::MAtk],
            Car::Meek => [&Panel::MDfe, &Panel::Dfe],
            Car::Anxiety => [&Panel::MDfe, &Panel::Hp],
            Car::Careful => [&Panel::MDfe, &Panel::Spd],

            Car::Silence => [&Panel::Hp, &Panel::Atk],
            Car::Peace => [&Panel::Hp, &Panel::MAtk],
            Car::Melancholy => [&Panel::Hp, &Panel::Dfe],
            Car::Careless => [&Panel::Hp, &Panel::MDfe],
            Car::Sureness => [&Panel::Hp, &Panel::Spd],
        }
    }
}

/// 通过 Panel 面板选择 Six 结构体中的字段
pub fn get_field_mut<'a>(prop: &'a mut Six, key: &'a Panel) -> Option<&'a mut f32> {
    match key {
        Panel::Hp => Some(&mut prop.hp),
        Panel::Atk => Some(&mut prop.atk),
        Panel::MAtk => Some(&mut prop.m_atk),
        Panel::Dfe => Some(&mut prop.dfe),
        Panel::MDfe => Some(&mut prop.m_dfe),
        Panel::Spd => Some(&mut prop.spd),
    }
}