rocalc 0.3.0

一款用于计算洛克王国:世界精灵对决的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 {
    Timid, // 胆小
    Sanguine, // 开朗
    Impatience, // 急躁
    Obtrusion, // 莽撞
    Enthusiasm, // 热情
             
    Stubborn, // 固执
    Naughty, // 调皮
    Bold, // 大胆
    Overreach, // 逞强
    Brave, // 勇敢
           
    Clever, // 聪明
    Concentration, // 专注
    Bigoted, // 偏执
    Rational, // 理性
    Calm, // 冷静
          
    Stable, // 稳重
    Innocent, // 天真
    Indolent, // 懒散
    Frank, // 坦率
    Leisure, // 悠闲

    Vigilant, // 警惕
    Shy, // 害羞
    Meek, // 温顺
    Anxiety, // 焦虑
    Careful, // 慎重

    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],
        }
    }
}
 
//fn get_key(car: &Car) -> [&Panel; 2] {
//    match car {
//        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),
    }
}