shield specs
This commit is contained in:
parent
788c68c015
commit
e6986d57cd
@ -72,7 +72,7 @@ impl CrypStat {
|
||||
pub fn recalculate(&mut self, specs: &Vec<Spec>) -> &mut CrypStat {
|
||||
let specs = specs
|
||||
.iter()
|
||||
.filter(|s| s.affects() == self.stat)
|
||||
.filter(|s| s.affects().contains(&self.stat))
|
||||
.map(|s| *s)
|
||||
.collect::<Vec<Spec>>();
|
||||
|
||||
|
||||
@ -1,38 +1,59 @@
|
||||
use rand::prelude::*;
|
||||
|
||||
use cryp::{Stat};
|
||||
|
||||
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq)]
|
||||
pub enum Spec {
|
||||
SpeedI,
|
||||
HpI,
|
||||
|
||||
LifeI,
|
||||
RedShieldI,
|
||||
BlueShieldI,
|
||||
LRSI,
|
||||
LBSI,
|
||||
RBSI,
|
||||
|
||||
RedDamageI,
|
||||
GreenDamageI,
|
||||
BlueDamageI,
|
||||
RedShieldI,
|
||||
BlueShieldI,
|
||||
}
|
||||
|
||||
impl Spec {
|
||||
pub fn affects(&self) -> Stat {
|
||||
pub fn affects(&self) -> Vec<Stat> {
|
||||
match *self {
|
||||
Spec::RedDamageI => Stat::RedDamage,
|
||||
Spec::GreenDamageI => Stat::GreenDamage,
|
||||
Spec::BlueDamageI => Stat::BlueDamage,
|
||||
Spec::RedShieldI => Stat::RedShield,
|
||||
Spec::BlueShieldI => Stat::BlueShield,
|
||||
Spec::SpeedI => Stat::Speed,
|
||||
Spec::HpI => Stat::Hp,
|
||||
Spec::RedDamageI => vec![Stat::RedDamage],
|
||||
Spec::GreenDamageI => vec![Stat::GreenDamage],
|
||||
Spec::BlueDamageI => vec![Stat::BlueDamage],
|
||||
Spec::RedShieldI => vec![Stat::RedShield],
|
||||
Spec::BlueShieldI => vec![Stat::BlueShield],
|
||||
Spec::SpeedI => vec![Stat::Speed],
|
||||
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::HpI => modified + (base * 5 / 100),
|
||||
Spec::RedShieldI => modified + 50,
|
||||
Spec::BlueShieldI => modified + 50,
|
||||
|
||||
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),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -36,7 +36,11 @@ pub enum Var {
|
||||
Hp,
|
||||
Speed,
|
||||
|
||||
HpI,
|
||||
LifeI,
|
||||
LRSI,
|
||||
LBSI,
|
||||
RBSI,
|
||||
|
||||
RedDamageI,
|
||||
BlueDamageI,
|
||||
GreenDamageI,
|
||||
@ -141,7 +145,10 @@ impl Var {
|
||||
Var::BlueDamageI => Some(Spec::BlueDamageI),
|
||||
Var::GreenDamageI => Some(Spec::GreenDamageI),
|
||||
|
||||
Var::HpI => Some(Spec::HpI),
|
||||
Var::LifeI => Some(Spec::LifeI),
|
||||
Var::LRSI => Some(Spec::LRSI),
|
||||
Var::LBSI => Some(Spec::LBSI),
|
||||
Var::RBSI => Some(Spec::RBSI),
|
||||
Var::RedShieldI => Some(Spec::RedShieldI),
|
||||
Var::BlueShieldI => Some(Spec::BlueShieldI),
|
||||
|
||||
@ -360,11 +367,11 @@ impl Vbox {
|
||||
},
|
||||
Var::Hp => match colour_code {
|
||||
ColourCode::RR => Var::RedShieldI,
|
||||
ColourCode::GG => Var::HpI,
|
||||
ColourCode::GG => Var::LifeI,
|
||||
ColourCode::BB => Var::BlueShieldI,
|
||||
ColourCode::RG => return Err(err_msg("unhandled skill combo")),
|
||||
ColourCode::GB => return Err(err_msg("unhandled skill combo")),
|
||||
ColourCode::BR => return Err(err_msg("unhandled skill combo")),
|
||||
ColourCode::RG => Var::LRSI,
|
||||
ColourCode::GB => Var::LBSI,
|
||||
ColourCode::BR => Var::RBSI,
|
||||
},
|
||||
|
||||
_ => panic!("wrong base {:?}", base),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user