move combos to structs

This commit is contained in:
ntr 2019-03-15 15:24:24 +11:00
parent 2321450139
commit 0013c6437d

View File

@ -99,9 +99,9 @@ impl Var {
_ => { _ => {
let combos = get_combos(); let combos = get_combos();
let combo = combos.iter().find(|c| c.1 == *self) let combo = combos.iter().find(|c| c.var == *self)
.unwrap_or_else(|| panic!("unable to find components for {:?}", self)); .unwrap_or_else(|| panic!("unable to find components for {:?}", self));
return combo.0.iter().fold(0, |acc, c| acc + c.cost()); return combo.units.iter().fold(0, |acc, c| acc + c.cost());
}, },
} }
} }
@ -167,59 +167,64 @@ impl Var {
} }
} }
fn get_combos() -> Vec<(Vec<Var>, Var)> { struct Combo {
var: Var,
units: Vec<Var>,
}
fn get_combos() -> Vec<Combo> {
let mut combinations = vec![ let mut combinations = vec![
(vec![Var::Attack, Var::Red, Var::Red] , Var::Strike ), Combo { units: vec![Var::Attack, Var::Red, Var::Red], var: Var::Strike },
(vec![Var::Attack, Var::Green, Var::Green] , Var::Heal ), Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal },
(vec![Var::Attack, Var::Blue, Var::Blue] , Var::Blast ), Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast },
(vec![Var::Attack, Var::Red, Var::Green] , Var::Strike ), Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Strike },
(vec![Var::Attack, Var::Green, Var::Blue] , Var::Heal ), Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Heal },
(vec![Var::Attack, Var::Red, Var::Blue] , Var::Blast ), Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Blast },
(vec![Var::Block, Var::Red, Var::Red] , Var::Parry ), Combo { units: vec![Var::Block, Var::Red, Var::Red], var: Var::Parry },
(vec![Var::Block, Var::Green, Var::Green] , Var::Reflect ), Combo { units: vec![Var::Block, Var::Green, Var::Green], var: Var::Reflect },
(vec![Var::Block, Var::Blue, Var::Blue] , Var::Toxic ), Combo { units: vec![Var::Block, Var::Blue, Var::Blue], var: Var::Toxic },
(vec![Var::Block, Var::Red, Var::Green] , Var::Taunt ), Combo { units: vec![Var::Block, Var::Red, Var::Green], var: Var::Taunt },
(vec![Var::Block, Var::Green, Var::Blue] , Var::Shield ), Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Shield },
// (vec![Var::Block, Var::Red, Var::Blue] , Var::Blast), // Combo { units: vec![Var::Block, Var::Red, Var::Blue], var: Var::Blast },
(vec![Var::Buff, Var::Red, Var::Red] , Var::Empower), Combo { units: vec![Var::Buff, Var::Red, Var::Red], var: Var::Empower },
(vec![Var::Buff, Var::Green, Var::Green] , Var::Triage), Combo { units: vec![Var::Buff, Var::Green, Var::Green], var: Var::Triage },
(vec![Var::Buff, Var::Blue, Var::Blue] , Var::Amplify), Combo { units: vec![Var::Buff, Var::Blue, Var::Blue], var: Var::Amplify },
(vec![Var::Buff, Var::Red, Var::Green] , Var::Clutch), Combo { units: vec![Var::Buff, Var::Red, Var::Green], var: Var::Clutch },
// (vec![Var::Buff, Var::Green, Var::Blue] , Var::Heal), // Combo { units: vec![Var::Buff, Var::Green, Var::Blue], var: Var::Heal },
(vec![Var::Buff, Var::Red, Var::Blue] , Var::Haste), Combo { units: vec![Var::Buff, Var::Red, Var::Blue], var: Var::Haste },
(vec![Var::Debuff, Var::Red, Var::Red] , Var::Snare), Combo { units: vec![Var::Debuff, Var::Red, Var::Red], var: Var::Snare },
(vec![Var::Debuff, Var::Green, Var::Green] , Var::Purge), Combo { units: vec![Var::Debuff, Var::Green, Var::Green], var: Var::Purge },
(vec![Var::Debuff, Var::Blue, Var::Blue] , Var::Curse), Combo { units: vec![Var::Debuff, Var::Blue, Var::Blue], var: Var::Curse },
// (vec![Var::Debuff, Var::Red, Var::Green] , Var::Siphon), // Combo { units: vec![Var::Debuff, Var::Red, Var::Green], var: Var::Siphon },
(vec![Var::Debuff, Var::Green, Var::Blue] , Var::Siphon), Combo { units: vec![Var::Debuff, Var::Green, Var::Blue], var: Var::Siphon },
(vec![Var::Debuff, Var::Red, Var::Blue] , Var::Slow), Combo { units: vec![Var::Debuff, Var::Red, Var::Blue], var: Var::Slow },
(vec![Var::Stun, Var::Red, Var::Red] , Var::Strangle), Combo { units: vec![Var::Stun, Var::Red, Var::Red], var: Var::Strangle },
(vec![Var::Stun, Var::Green, Var::Green] , Var::Throw), Combo { units: vec![Var::Stun, Var::Green, Var::Green], var: Var::Throw },
(vec![Var::Stun, Var::Blue, Var::Blue] , Var::Ruin), Combo { units: vec![Var::Stun, Var::Blue, Var::Blue], var: Var::Ruin },
// (vec![Var::Stun, Var::Red, Var::Green] , Var::Strike), // Combo { units: vec![Var::Stun, Var::Red, Var::Green], var: Var::Strike },
(vec![Var::Stun, Var::Green, Var::Blue] , Var::Silence), Combo { units: vec![Var::Stun, Var::Green, Var::Blue], var: Var::Silence },
(vec![Var::Stun, Var::Red, Var::Blue] , Var::Hex), Combo { units: vec![Var::Stun, Var::Red, Var::Blue], var: Var::Hex },
(vec![Var::Damage, Var::Red, Var::Red] , Var::RedDamageI), Combo { units: vec![Var::Damage, Var::Red, Var::Red], var: Var::RedDamageI },
(vec![Var::Damage, Var::Green, Var::Green] , Var::GreenDamageI), Combo { units: vec![Var::Damage, Var::Green, Var::Green], var: Var::GreenDamageI },
(vec![Var::Damage, Var::Blue, Var::Blue] , Var::BlueDamageI), Combo { units: vec![Var::Damage, Var::Blue, Var::Blue], var: Var::BlueDamageI },
// (vec![Var::Damage, Var::Red, Var::Green] , Var::Strike), // Combo { units: vec![Var::Damage, Var::Red, Var::Green], var: Var::Strike },
// (vec![Var::Damage, Var::Green, Var::Blue] , Var::Silence), // Combo { units: vec![Var::Damage, Var::Green, Var::Blue], var: Var::Silence },
// (vec![Var::Damage, Var::Red, Var::Blue] , Var::Hex), // Combo { units: vec![Var::Damage, Var::Red, Var::Blue], var: Var::Hex },
(vec![Var::Hp, Var::Red, Var::Red] , Var::RedShieldI), Combo { units: vec![Var::Hp, Var::Red, Var::Red], var: Var::RedShieldI },
(vec![Var::Hp, Var::Green, Var::Green] , Var::LifeI), Combo { units: vec![Var::Hp, Var::Green, Var::Green], var: Var::LifeI },
(vec![Var::Hp, Var::Blue, Var::Blue] , Var::BlueShieldI), Combo { units: vec![Var::Hp, Var::Blue, Var::Blue], var: Var::BlueShieldI },
(vec![Var::Hp, Var::Red, Var::Green] , Var::LRSI), Combo { units: vec![Var::Hp, Var::Red, Var::Green], var: Var::LRSI },
(vec![Var::Hp, Var::Green, Var::Blue] , Var::LBSI), Combo { units: vec![Var::Hp, Var::Green, Var::Blue], var: Var::LBSI },
(vec![Var::Hp, Var::Red, Var::Blue] , Var::RBSI), Combo { units: vec![Var::Hp, Var::Red, Var::Blue], var: Var::RBSI },
]; ];
combinations.iter_mut().for_each(|set| set.0.sort_unstable()); combinations.iter_mut().for_each(|set| set.units.sort_unstable());
return combinations; return combinations;
} }
@ -368,9 +373,9 @@ impl Vbox {
// combos are sorted when created // combos are sorted when created
input.sort_unstable(); input.sort_unstable();
let combos = get_combos(); let combos = get_combos();
let combo = combos.iter().find(|c| c.0 == input).ok_or(err_msg("not a combo"))?; let combo = combos.iter().find(|c| c.units == input).ok_or(err_msg("not a combo"))?;
self.bound.push(combo.1); self.bound.push(combo.var);
Ok(self) Ok(self)
} }
@ -452,7 +457,7 @@ mod tests {
// sort input so they align // sort input so they align
input.sort_unstable(); input.sort_unstable();
let combo = combos.iter().find(|c| c.0 == input); let combo = combos.iter().find(|c| c.units == input);
assert!(combo.is_some()); assert!(combo.is_some());
} }