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 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>, Var)> {
struct Combo {
var: Var,
units: Vec<Var>,
}
fn get_combos() -> Vec<Combo> {
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());
}