From 0013c6437d16b52f82eac582d89f6d14db5c9cca Mon Sep 17 00:00:00 2001 From: ntr Date: Fri, 15 Mar 2019 15:24:24 +1100 Subject: [PATCH] move combos to structs --- server/src/vbox.rs | 103 ++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/server/src/vbox.rs b/server/src/vbox.rs index dc9921ef..9e646bf9 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -99,9 +99,9 @@ impl Var { _ => { 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)); - 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)> { +struct Combo { + var: Var, + units: Vec, +} + +fn get_combos() -> Vec { let mut combinations = vec![ - (vec![Var::Attack, Var::Red, Var::Red] , Var::Strike ), - (vec![Var::Attack, Var::Green, Var::Green] , Var::Heal ), - (vec![Var::Attack, Var::Blue, Var::Blue] , Var::Blast ), - (vec![Var::Attack, Var::Red, Var::Green] , Var::Strike ), - (vec![Var::Attack, Var::Green, Var::Blue] , Var::Heal ), - (vec![Var::Attack, Var::Red, Var::Blue] , Var::Blast ), + Combo { units: vec![Var::Attack, Var::Red, Var::Red], var: Var::Strike }, + Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal }, + Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast }, + Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Strike }, + Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Heal }, + Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Blast }, - (vec![Var::Block, Var::Red, Var::Red] , Var::Parry ), - (vec![Var::Block, Var::Green, Var::Green] , Var::Reflect ), - (vec![Var::Block, Var::Blue, Var::Blue] , Var::Toxic ), - (vec![Var::Block, Var::Red, Var::Green] , Var::Taunt ), - (vec![Var::Block, Var::Green, Var::Blue] , Var::Shield ), - // (vec![Var::Block, Var::Red, Var::Blue] , Var::Blast), + Combo { units: vec![Var::Block, Var::Red, Var::Red], var: Var::Parry }, + Combo { units: vec![Var::Block, Var::Green, Var::Green], var: Var::Reflect }, + Combo { units: vec![Var::Block, Var::Blue, Var::Blue], var: Var::Toxic }, + Combo { units: vec![Var::Block, Var::Red, Var::Green], var: Var::Taunt }, + Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Shield }, + // Combo { units: vec![Var::Block, Var::Red, Var::Blue], var: Var::Blast }, - (vec![Var::Buff, Var::Red, Var::Red] , Var::Empower), - (vec![Var::Buff, Var::Green, Var::Green] , Var::Triage), - (vec![Var::Buff, Var::Blue, Var::Blue] , Var::Amplify), - (vec![Var::Buff, Var::Red, Var::Green] , Var::Clutch), - // (vec![Var::Buff, Var::Green, Var::Blue] , Var::Heal), - (vec![Var::Buff, Var::Red, Var::Blue] , Var::Haste), + Combo { units: vec![Var::Buff, Var::Red, Var::Red], var: Var::Empower }, + Combo { units: vec![Var::Buff, Var::Green, Var::Green], var: Var::Triage }, + Combo { units: vec![Var::Buff, Var::Blue, Var::Blue], var: Var::Amplify }, + Combo { units: vec![Var::Buff, Var::Red, Var::Green], var: Var::Clutch }, + // Combo { units: vec![Var::Buff, Var::Green, Var::Blue], var: Var::Heal }, + Combo { units: vec![Var::Buff, Var::Red, Var::Blue], var: Var::Haste }, - (vec![Var::Debuff, Var::Red, Var::Red] , Var::Snare), - (vec![Var::Debuff, Var::Green, Var::Green] , Var::Purge), - (vec![Var::Debuff, Var::Blue, Var::Blue] , Var::Curse), - // (vec![Var::Debuff, Var::Red, Var::Green] , Var::Siphon), - (vec![Var::Debuff, Var::Green, Var::Blue] , Var::Siphon), - (vec![Var::Debuff, Var::Red, Var::Blue] , Var::Slow), + Combo { units: vec![Var::Debuff, Var::Red, Var::Red], var: Var::Snare }, + Combo { units: vec![Var::Debuff, Var::Green, Var::Green], var: Var::Purge }, + Combo { units: vec![Var::Debuff, Var::Blue, Var::Blue], var: Var::Curse }, + // Combo { units: vec![Var::Debuff, Var::Red, Var::Green], var: Var::Siphon }, + Combo { units: vec![Var::Debuff, Var::Green, Var::Blue], var: Var::Siphon }, + Combo { units: vec![Var::Debuff, Var::Red, Var::Blue], var: Var::Slow }, - (vec![Var::Stun, Var::Red, Var::Red] , Var::Strangle), - (vec![Var::Stun, Var::Green, Var::Green] , Var::Throw), - (vec![Var::Stun, Var::Blue, Var::Blue] , Var::Ruin), - // (vec![Var::Stun, Var::Red, Var::Green] , Var::Strike), - (vec![Var::Stun, Var::Green, Var::Blue] , Var::Silence), - (vec![Var::Stun, Var::Red, Var::Blue] , Var::Hex), + Combo { units: vec![Var::Stun, Var::Red, Var::Red], var: Var::Strangle }, + Combo { units: vec![Var::Stun, Var::Green, Var::Green], var: Var::Throw }, + Combo { units: vec![Var::Stun, Var::Blue, Var::Blue], var: Var::Ruin }, + // Combo { units: vec![Var::Stun, Var::Red, Var::Green], var: Var::Strike }, + Combo { units: vec![Var::Stun, Var::Green, Var::Blue], var: Var::Silence }, + Combo { units: vec![Var::Stun, Var::Red, Var::Blue], var: Var::Hex }, - (vec![Var::Damage, Var::Red, Var::Red] , Var::RedDamageI), - (vec![Var::Damage, Var::Green, Var::Green] , Var::GreenDamageI), - (vec![Var::Damage, Var::Blue, Var::Blue] , Var::BlueDamageI), - // (vec![Var::Damage, Var::Red, Var::Green] , Var::Strike), - // (vec![Var::Damage, Var::Green, Var::Blue] , Var::Silence), - // (vec![Var::Damage, Var::Red, Var::Blue] , Var::Hex), + Combo { units: vec![Var::Damage, Var::Red, Var::Red], var: Var::RedDamageI }, + Combo { units: vec![Var::Damage, Var::Green, Var::Green], var: Var::GreenDamageI }, + Combo { units: vec![Var::Damage, Var::Blue, Var::Blue], var: Var::BlueDamageI }, + // Combo { units: vec![Var::Damage, Var::Red, Var::Green], var: Var::Strike }, + // Combo { units: vec![Var::Damage, Var::Green, Var::Blue], var: Var::Silence }, + // Combo { units: vec![Var::Damage, Var::Red, Var::Blue], var: Var::Hex }, - (vec![Var::Hp, Var::Red, Var::Red] , Var::RedShieldI), - (vec![Var::Hp, Var::Green, Var::Green] , Var::LifeI), - (vec![Var::Hp, Var::Blue, Var::Blue] , Var::BlueShieldI), - (vec![Var::Hp, Var::Red, Var::Green] , Var::LRSI), - (vec![Var::Hp, Var::Green, Var::Blue] , Var::LBSI), - (vec![Var::Hp, Var::Red, Var::Blue] , Var::RBSI), + Combo { units: vec![Var::Hp, Var::Red, Var::Red], var: Var::RedShieldI }, + Combo { units: vec![Var::Hp, Var::Green, Var::Green], var: Var::LifeI }, + Combo { units: vec![Var::Hp, Var::Blue, Var::Blue], var: Var::BlueShieldI }, + Combo { units: vec![Var::Hp, Var::Red, Var::Green], var: Var::LRSI }, + Combo { units: vec![Var::Hp, Var::Green, Var::Blue], var: Var::LBSI }, + 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; } @@ -368,9 +373,9 @@ impl Vbox { // combos are sorted when created input.sort_unstable(); 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) } @@ -452,7 +457,7 @@ mod tests { // sort input so they align 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()); }