From 33941657f8922bd08bcc5ded46bebd3ffbe1c97d Mon Sep 17 00:00:00 2001 From: Mashy Date: Thu, 21 Mar 2019 15:27:47 +1000 Subject: [PATCH] Flat health spec and bonus fn --- server/src/spec.rs | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/server/src/spec.rs b/server/src/spec.rs index 2dcc768c..aabf2b91 100644 --- a/server/src/spec.rs +++ b/server/src/spec.rs @@ -54,6 +54,15 @@ impl Spec { let i_min = 32; let i_max = 64; + + fn apply_bonus(colours: Vec, reqs: Vec, bonuses: Vec) -> u64 { + bonuses.iter().enumerate().fold(0, |acc, (i, b)| { + acc + match (colours.iter().all(|colour| colour >= &reqs[i])) { + true => bonuses[i], + false => 0 + } + }) + } match *self { Spec::RedDamageI => modified + { @@ -80,15 +89,33 @@ impl Spec { Spec::SpeedI => modified + base.pct(5), - Spec::LifeI => modified + base.pct(5), - Spec::RedShieldI => modified + rng.gen_range(i_min, i_max), - Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max), - Spec::LRSI => modified + { - if team_colours.red > 5 && team_colours.green > 5 { base.pct(10) } - else { base.pct(5) } + Spec::LifeI => modified + { + let mut bonus = 10 * team_colours.green as u64; + bonus + apply_bonus(vec![team_colours.green], vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) + }, + Spec::RedShieldI => modified + { + let mut bonus = 10 * team_colours.red as u64; + bonus + apply_bonus(vec![team_colours.red], vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) + }, + Spec::BlueShieldI => modified + { + let mut bonus = 10 * team_colours.blue as u64; + bonus + apply_bonus(vec![team_colours.blue], vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) + }, + Spec::LRSI => modified + { + let mut bonus = 5 * (team_colours.green + team_colours.red) as u64; + bonus + apply_bonus(vec![team_colours.green, team_colours.red], + vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) + }, + Spec::LBSI => modified + { + let mut bonus = 5 * (team_colours.green + team_colours.blue) as u64; + bonus + apply_bonus(vec![team_colours.green, team_colours.blue], + vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) + }, + Spec::RBSI => modified + { + let mut bonus = 5 * (team_colours.red + team_colours.blue) as u64; + bonus + apply_bonus(vec![team_colours.red, team_colours.blue], + vec![5, 10, 20], vec![bonus, bonus * 2, bonus * 3]) }, - Spec::LBSI => modified + base.pct(5), - Spec::RBSI => modified + base.pct(5), } }