65 lines
1.9 KiB
Rust
65 lines
1.9 KiB
Rust
use rand::prelude::*;
|
|
|
|
use cryp::{Stat};
|
|
|
|
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)]
|
|
pub enum Spec {
|
|
SpeedI,
|
|
|
|
// Pure redShield has to come first as it applies the base amount
|
|
// that is multiplied
|
|
LifeI,
|
|
RedShieldI,
|
|
BlueShieldI,
|
|
LRSI,
|
|
LBSI,
|
|
RBSI,
|
|
|
|
RedDamageI,
|
|
GreenDamageI,
|
|
BlueDamageI,
|
|
}
|
|
|
|
impl Spec {
|
|
pub fn affects(&self) -> Vec<Stat> {
|
|
match *self {
|
|
Spec::RedDamageI => vec![Stat::RedDamage],
|
|
Spec::GreenDamageI => vec![Stat::GreenDamage],
|
|
Spec::BlueDamageI => vec![Stat::BlueDamage],
|
|
|
|
Spec::SpeedI => vec![Stat::Speed],
|
|
|
|
Spec::RedShieldI => vec![Stat::RedShield],
|
|
Spec::BlueShieldI => vec![Stat::BlueShield],
|
|
Spec::LifeI => vec![Stat::Hp],
|
|
Spec::LRSI => vec![Stat::Hp, Stat::RedShield],
|
|
Spec::LBSI => vec![Stat::Hp, Stat::BlueShield],
|
|
Spec::RBSI => vec![Stat::BlueShield, Stat::RedShield],
|
|
|
|
}
|
|
}
|
|
|
|
pub fn apply(&self, modified: u64, base: u64) -> u64 {
|
|
let mut rng = thread_rng();
|
|
|
|
let i_min = 32;
|
|
let i_max = 64;
|
|
|
|
match *self {
|
|
Spec::RedDamageI => modified + (base * 5 / 100),
|
|
Spec::GreenDamageI => modified + (base * 5 / 100),
|
|
Spec::BlueDamageI => modified + (base * 5 / 100),
|
|
|
|
Spec::SpeedI => modified + (base * 5 / 100),
|
|
|
|
Spec::LifeI => modified + (base * 5 / 100),
|
|
Spec::RedShieldI => modified + rng.gen_range(i_min, i_max),
|
|
Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max),
|
|
Spec::LRSI => modified + (base * 5 / 100),
|
|
Spec::LBSI => modified + (base * 5 / 100),
|
|
Spec::RBSI => modified + (base * 5 / 100),
|
|
}
|
|
}
|
|
|
|
}
|