From 2eebc29e212c472524d5c2c56ab86d84e792e40d Mon Sep 17 00:00:00 2001
From: Snowram <robin.gilh@gmail.com>
Date: Sun, 8 Nov 2020 14:10:27 +0100
Subject: [PATCH] Addressed comments

---
 common/src/comp/inventory/item/tool.rs | 184 ++++++++++++-------------
 voxygen/src/hud/util.rs                |   4 +-
 2 files changed, 92 insertions(+), 96 deletions(-)

diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs
index b56032b2e6..6099cbfef5 100644
--- a/common/src/comp/inventory/item/tool.rs
+++ b/common/src/comp/inventory/item/tool.rs
@@ -90,6 +90,11 @@ impl Tool {
         Duration::from_millis(self.stats.equip_time_millis as u64)
     }
 
+    /// Converts milliseconds to a `Duration` adjusted by `base_speed()`
+    pub fn adjusted_duration(&self, millis: u64) -> Duration {
+        Duration::from_millis(millis).div_f32(self.base_speed())
+    }
+
     pub fn get_abilities(&self) -> Vec<CharacterAbility> {
         use CharacterAbility::*;
         use ToolKind::*;
@@ -107,12 +112,9 @@ impl Tool {
                             knockback: 10.0,
                             range: 4.0,
                             angle: 30.0,
-                            base_buildup_duration: Duration::from_millis(350)
-                                .div_f32(self.base_speed()),
-                            base_swing_duration: Duration::from_millis(100)
-                                .div_f32(self.base_speed()),
-                            base_recover_duration: Duration::from_millis(400)
-                                .div_f32(self.base_speed()),
+                            base_buildup_duration: self.adjusted_duration(350),
+                            base_swing_duration: self.adjusted_duration(100),
+                            base_recover_duration: self.adjusted_duration(400),
                             forward_movement: 0.5,
                         },
                         combo_melee::Stage {
@@ -123,12 +125,9 @@ impl Tool {
                             knockback: 12.0,
                             range: 3.5,
                             angle: 180.0,
-                            base_buildup_duration: Duration::from_millis(400)
-                                .div_f32(self.base_speed()),
-                            base_swing_duration: Duration::from_millis(600)
-                                .div_f32(self.base_speed()),
-                            base_recover_duration: Duration::from_millis(400)
-                                .div_f32(self.base_speed()),
+                            base_buildup_duration: self.adjusted_duration(400),
+                            base_swing_duration: self.adjusted_duration(600),
+                            base_recover_duration: self.adjusted_duration(400),
                             forward_movement: 0.0,
                         },
                         combo_melee::Stage {
@@ -139,12 +138,9 @@ impl Tool {
                             knockback: 14.0,
                             range: 6.0,
                             angle: 10.0,
-                            base_buildup_duration: Duration::from_millis(500)
-                                .div_f32(self.base_speed()),
-                            base_swing_duration: Duration::from_millis(200)
-                                .div_f32(self.base_speed()),
-                            base_recover_duration: Duration::from_millis(300)
-                                .div_f32(self.base_speed()),
+                            base_buildup_duration: self.adjusted_duration(500),
+                            base_swing_duration: self.adjusted_duration(200),
+                            base_recover_duration: self.adjusted_duration(300),
                             forward_movement: 1.2,
                         },
                     ],
@@ -165,17 +161,17 @@ impl Tool {
                     angle: 45.0,
                     energy_drain: 500,
                     forward_speed: 4.0,
-                    buildup_duration: Duration::from_millis(250).div_f32(self.base_speed()),
-                    charge_duration: Duration::from_millis(600).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(500).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(250),
+                    charge_duration: self.adjusted_duration(600),
+                    swing_duration: self.adjusted_duration(100),
+                    recover_duration: self.adjusted_duration(500),
                     infinite_charge: true,
                     is_interruptible: true,
                 },
                 SpinMelee {
-                    buildup_duration: Duration::from_millis(750).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(500).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(500).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(750),
+                    swing_duration: self.adjusted_duration(500),
+                    recover_duration: self.adjusted_duration(500),
                     base_damage: (140.0 * self.base_power()) as u32,
                     knockback: 10.0,
                     range: 3.5,
@@ -198,9 +194,9 @@ impl Tool {
                             knockback: 8.0,
                             range: 3.5,
                             angle: 50.0,
-                            base_buildup_duration: Duration::from_millis(350).div_f32(self.base_speed()),
-                            base_swing_duration: Duration::from_millis(75).div_f32(self.base_speed()),
-                            base_recover_duration: Duration::from_millis(400).div_f32(self.base_speed()),
+                            base_buildup_duration: self.adjusted_duration(350),
+                            base_swing_duration: self.adjusted_duration(75),
+                            base_recover_duration: self.adjusted_duration(400),
                             forward_movement: 0.5,
                         },
                         combo_melee::Stage {
@@ -211,9 +207,9 @@ impl Tool {
                             knockback: 12.0,
                             range: 3.5,
                             angle: 30.0,
-                            base_buildup_duration: Duration::from_millis(500).div_f32(self.base_speed()),
-                            base_swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                            base_recover_duration: Duration::from_millis(500).div_f32(self.base_speed()),
+                            base_buildup_duration: self.adjusted_duration(500),
+                            base_swing_duration: self.adjusted_duration(100),
+                            base_recover_duration: self.adjusted_duration(500),
                             forward_movement: 0.25,
                         },
                     ],
@@ -225,9 +221,9 @@ impl Tool {
                     is_interruptible: false,
                 },
                 SpinMelee {
-                    buildup_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(250).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(100).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(100),
+                    swing_duration: self.adjusted_duration(250),
+                    recover_duration: self.adjusted_duration(100),
                     base_damage: (60.0 * self.base_power()) as u32,
                     knockback: 0.0,
                     range: 3.5,
@@ -240,10 +236,10 @@ impl Tool {
                 },
                 LeapMelee {
                     energy_cost: 450,
-                    buildup_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    movement_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(200).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(200),
+                    movement_duration: Duration::from_millis(200),
+                    swing_duration: self.adjusted_duration(200),
+                    recover_duration: self.adjusted_duration(200),
                     base_damage: (240.0 * self.base_power()) as u32,
                     knockback: 12.0,
                     range: 4.5,
@@ -262,9 +258,9 @@ impl Tool {
                         knockback: 0.0,
                         range: 3.5,
                         angle: 20.0,
-                        base_buildup_duration: Duration::from_millis(600).div_f32(self.base_speed()),
-                        base_swing_duration: Duration::from_millis(60).div_f32(self.base_speed()),
-                        base_recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                        base_buildup_duration: self.adjusted_duration(600),
+                        base_swing_duration: self.adjusted_duration(60),
+                        base_recover_duration: self.adjusted_duration(300),
                         forward_movement: 0.0,
                     }],
                     initial_energy_gain: 0,
@@ -283,16 +279,16 @@ impl Tool {
                     max_knockback: 60.0,
                     range: 3.5,
                     max_angle: 30.0,
-                    charge_duration: Duration::from_millis(1200).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                    charge_duration: self.adjusted_duration(1200),
+                    swing_duration: self.adjusted_duration(200),
+                    recover_duration: self.adjusted_duration(300),
                 },
                 LeapMelee {
                     energy_cost: 700,
-                    buildup_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    movement_duration: Duration::from_millis(800).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(150).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(200).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(100),
+                    movement_duration: Duration::from_millis(800),
+                    swing_duration: self.adjusted_duration(150),
+                    recover_duration: self.adjusted_duration(200),
                     base_damage: (240.0 * self.base_power()) as u32,
                     knockback: 25.0,
                     range: 4.5,
@@ -303,9 +299,9 @@ impl Tool {
             ],
             Farming => vec![BasicMelee {
                 energy_cost: 1,
-                buildup_duration: Duration::from_millis(600).div_f32(self.base_speed()),
-                swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                recover_duration: Duration::from_millis(150).div_f32(self.base_speed()),
+                buildup_duration: self.adjusted_duration(600),
+                swing_duration: self.adjusted_duration(100),
+                recover_duration: self.adjusted_duration(150),
                 base_damage: (50.0 * self.base_power()) as u32,
                 knockback: 0.0,
                 range: 3.5,
@@ -314,8 +310,8 @@ impl Tool {
             Bow => vec![
                 BasicRanged {
                     energy_cost: 0,
-                    buildup_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(200),
+                    recover_duration: self.adjusted_duration(300),
                     projectile: Projectile {
                         hit_solid: vec![projectile::Effect::Stick],
                         hit_entity: vec![
@@ -356,9 +352,9 @@ impl Tool {
                     max_damage: (200.0 * self.base_power()) as u32,
                     initial_knockback: 10.0,
                     max_knockback: 20.0,
-                    buildup_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    charge_duration: Duration::from_millis(1500).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(500).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(100),
+                    charge_duration: self.adjusted_duration(1500),
+                    recover_duration: self.adjusted_duration(500),
                     projectile_body: Body::Object(object::Body::MultiArrow),
                     projectile_light: None,
                     projectile_gravity: Some(Gravity(0.2)),
@@ -367,10 +363,10 @@ impl Tool {
                 },
                 RepeaterRanged {
                     energy_cost: 450,
-                    movement_duration: Duration::from_millis(300).div_f32(self.base_speed()),
-                    buildup_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    shoot_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(800).div_f32(self.base_speed()),
+                    movement_duration: Duration::from_millis(300),
+                    buildup_duration: self.adjusted_duration(200),
+                    shoot_duration: self.adjusted_duration(200),
+                    recover_duration: self.adjusted_duration(800),
                     leap: Some(5.0),
                     projectile: Projectile {
                         hit_solid: vec![projectile::Effect::Stick],
@@ -407,9 +403,9 @@ impl Tool {
             ],
             Dagger => vec![BasicMelee {
                 energy_cost: 0,
-                buildup_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                buildup_duration: self.adjusted_duration(100),
+                swing_duration: self.adjusted_duration(100),
+                recover_duration: self.adjusted_duration(300),
                 base_damage: (50.0 * self.base_power()) as u32,
                 knockback: 0.0,
                 range: 3.5,
@@ -417,12 +413,12 @@ impl Tool {
             }],
             Sceptre => vec![
                 BasicBeam {
-                    buildup_duration: Duration::from_millis(250).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(250).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(250),
+                    recover_duration: self.adjusted_duration(250),
                     beam_duration: Duration::from_secs(1),
                     base_hps: (60.0 * self.base_power()) as u32,
                     base_dps: (60.0 * self.base_power()) as u32,
-                    tick_rate: 2.0,
+                    tick_rate: 2.0 * self.base_speed(),
                     range: 25.0,
                     max_angle: 1.0,
                     lifesteal_eff: 0.20,
@@ -432,8 +428,8 @@ impl Tool {
                 },
                 BasicRanged {
                     energy_cost: 800,
-                    buildup_duration: Duration::from_millis(800).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(50).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(800),
+                    recover_duration: self.adjusted_duration(50),
                     projectile: Projectile {
                         hit_solid: vec![
                             projectile::Effect::Explode(Explosion {
@@ -498,8 +494,8 @@ impl Tool {
             Staff => vec![
                 BasicRanged {
                     energy_cost: 0,
-                    buildup_duration: Duration::from_millis(500).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(350).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(500),
+                    recover_duration: self.adjusted_duration(350),
                     projectile: Projectile {
                         hit_solid: vec![
                             projectile::Effect::Explode(Explosion {
@@ -543,12 +539,12 @@ impl Tool {
                     can_continue: true,
                 },
                 BasicBeam {
-                    buildup_duration: Duration::from_millis(250).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(250).div_f32(self.base_speed()),
-                    beam_duration: Duration::from_millis(500).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(250),
+                    recover_duration: self.adjusted_duration(250),
+                    beam_duration: self.adjusted_duration(500),
                     base_hps: 0,
                     base_dps: (150.0 * self.base_power()) as u32,
-                    tick_rate: 3.0,
+                    tick_rate: 3.0 * self.base_speed(),
                     range: 15.0,
                     max_angle: 22.5,
                     lifesteal_eff: 0.0,
@@ -558,9 +554,9 @@ impl Tool {
                 },
                 Shockwave {
                     energy_cost: 600,
-                    buildup_duration: Duration::from_millis(700).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(700),
+                    swing_duration: self.adjusted_duration(100),
+                    recover_duration: self.adjusted_duration(300),
                     damage: (200.0 * self.base_power()) as u32,
                     knockback: Knockback::Away(25.0),
                     shockwave_angle: 360.0,
@@ -574,9 +570,9 @@ impl Tool {
             Shield => vec![
                 BasicMelee {
                     energy_cost: 0,
-                    buildup_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(300).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(100),
+                    swing_duration: self.adjusted_duration(100),
+                    recover_duration: self.adjusted_duration(300),
                     base_damage: (40.0 * self.base_power()) as u32,
                     knockback: 0.0,
                     range: 3.0,
@@ -587,9 +583,9 @@ impl Tool {
             Unique(StoneGolemFist) => vec![
                 BasicMelee {
                     energy_cost: 0,
-                    buildup_duration: Duration::from_millis(400).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(250).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(400),
+                    swing_duration: self.adjusted_duration(100),
+                    recover_duration: self.adjusted_duration(250),
                     knockback: 25.0,
                     base_damage: 200,
                     range: 5.0,
@@ -597,9 +593,9 @@ impl Tool {
                 },
                 Shockwave {
                     energy_cost: 0,
-                    buildup_duration: Duration::from_millis(500).div_f32(self.base_speed()),
-                    swing_duration: Duration::from_millis(200).div_f32(self.base_speed()),
-                    recover_duration: Duration::from_millis(800).div_f32(self.base_speed()),
+                    buildup_duration: self.adjusted_duration(500),
+                    swing_duration: self.adjusted_duration(200),
+                    recover_duration: self.adjusted_duration(800),
                     damage: 500,
                     knockback: Knockback::TowardsUp(40.0),
                     shockwave_angle: 90.0,
@@ -612,9 +608,9 @@ impl Tool {
             ],
             Unique(BeastClaws) => vec![BasicMelee {
                 energy_cost: 0,
-                buildup_duration: Duration::from_millis(250).div_f32(self.base_speed(),
-                swing_duration: Duration::from_millis(250).div_f32(self.base_speed(),
-                recover_duration: Duration::from_millis(250).div_f32(self.base_speed(),
+                buildup_duration: self.adjusted_duration(250),
+                swing_duration: self.adjusted_duration(250),
+                recover_duration: self.adjusted_duration(250),
                 knockback: 25.0,
                 base_damage: 200,
                 range: 5.0,
@@ -622,17 +618,17 @@ impl Tool {
             }],
             Debug => vec![
                 CharacterAbility::Boost {
-                    movement_duration: Duration::from_millis(50).div_f32(self.base_speed()),
+                    movement_duration: Duration::from_millis(50),
                     only_up: false,
                 },
                 CharacterAbility::Boost {
-                    movement_duration: Duration::from_millis(50).div_f32(self.base_speed()),
+                    movement_duration: Duration::from_millis(50),
                     only_up: true,
                 },
                 BasicRanged {
                     energy_cost: 0,
                     buildup_duration: Duration::from_millis(0),
-                    recover_duration: Duration::from_millis(10).div_f32(self.base_speed()),
+                    recover_duration: self.adjusted_duration(10),
                     projectile: Projectile {
                         hit_solid: vec![projectile::Effect::Stick],
                         hit_entity: vec![projectile::Effect::Stick, projectile::Effect::Possess],
@@ -653,8 +649,8 @@ impl Tool {
             Empty => vec![BasicMelee {
                 energy_cost: 0,
                 buildup_duration: Duration::from_millis(0),
-                swing_duration: Duration::from_millis(100).div_f32(self.base_speed()),
-                recover_duration: Duration::from_millis(900).div_f32(self.base_speed()),
+                swing_duration: self.adjusted_duration(100),
+                recover_duration: self.adjusted_duration(900),
                 base_damage: 20,
                 knockback: 0.0,
                 range: 3.5,
diff --git a/voxygen/src/hud/util.rs b/voxygen/src/hud/util.rs
index aff752e1fc..268a628c48 100644
--- a/voxygen/src/hud/util.rs
+++ b/voxygen/src/hud/util.rs
@@ -105,7 +105,7 @@ fn tool_desc(tool: &Tool, desc: &str) -> String {
             "{}\n\nPower: {:0.1}\n\nSpeed: {:0.1}\n\n{}\n\n<Right-Click to use>",
             kind,
             power * 10.0,
-            speed * 10.0,
+            speed,
             desc
         )
     } else {
@@ -113,7 +113,7 @@ fn tool_desc(tool: &Tool, desc: &str) -> String {
             "{}\n\nPower: {:0.1}\n\nSpeed: {:0.1}\n\n<Right-Click to use>",
             kind,
             power * 10.0,
-            speed * 10.0
+            speed
         )
     }
 }