shield specs

This commit is contained in:
ntr 2019-03-14 19:29:31 +11:00
parent 788c68c015
commit e6986d57cd
4 changed files with 50 additions and 22 deletions

View File

@ -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>>();

View File

@ -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),
}
}

View File

@ -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),