From 2e76966868d844ca171a6d63f625b821d6d88f37 Mon Sep 17 00:00:00 2001 From: Vincent Foulon Date: Sun, 21 Mar 2021 00:22:04 +0100 Subject: [PATCH] move climbing skill adjustment into climb module --- common/src/comp/ability.rs | 51 ++++++++++++++------------------------ common/src/states/climb.rs | 18 +++++++++++++- common/src/states/utils.rs | 8 +----- 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index c27ecfb470..4e2da69593 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -1072,39 +1072,24 @@ impl CharacterAbility { _ => {}, } }, - None => match self { - CharacterAbility::Roll { - ref mut immune_melee, - ref mut energy_cost, - ref mut roll_strength, - ref mut movement_duration, - .. - } => { - use skills::RollSkill::*; - *immune_melee = skillset.has_skill(Skill::Roll(ImmuneMelee)); - if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Cost)) { - *energy_cost *= 0.8_f32.powi(level.into()); - } - if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Strength)) { - *roll_strength *= 1.2_f32.powi(level.into()); - } - if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Duration)) { - *movement_duration *= 1.2_f32.powi(level.into()); - } - }, - CharacterAbility::Climb { - ref mut energy_cost, - ref mut movement_speed, - } => { - use skills::ClimbSkill::*; - if let Ok(Some(level)) = skillset.skill_level(Skill::Climb(Cost)) { - *energy_cost *= 0.8_f32.powi(level.into()); - } - if let Ok(Some(level)) = skillset.skill_level(Skill::Climb(Speed)) { - *movement_speed *= 1.2_f32.powi(level.into()); - } - }, - _ => {}, + None => if let CharacterAbility::Roll{ + ref mut immune_melee, + ref mut energy_cost, + ref mut roll_strength, + ref mut movement_duration, + .. + } = self { + use skills::RollSkill::*; + *immune_melee = skillset.has_skill(Skill::Roll(ImmuneMelee)); + if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Cost)) { + *energy_cost *= 0.8_f32.powi(level.into()); + } + if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Strength)) { + *roll_strength *= 1.2_f32.powi(level.into()); + } + if let Ok(Some(level)) = skillset.skill_level(Skill::Roll(Duration)) { + *movement_duration *= 1.2_f32.powi(level.into()); + } }, Some(_) => {}, } diff --git a/common/src/states/climb.rs b/common/src/states/climb.rs index 7f9645ee0a..ec2ecc717c 100644 --- a/common/src/states/climb.rs +++ b/common/src/states/climb.rs @@ -1,5 +1,8 @@ use crate::{ - comp::{CharacterState, Climb, EnergySource, InputKind, Ori, StateUpdate}, + comp::{ + skills::{ClimbSkill::*, Skill}, + CharacterState, Climb, EnergySource, InputKind, Ori, StateUpdate, + }, consts::GRAVITY, event::LocalEvent, states::{ @@ -25,6 +28,19 @@ pub struct Data { pub static_data: StaticData, } +impl Data { + pub fn create_adjusted_by_skills(join_data: &JoinData) -> Self { + let mut data = Data::default(); + if let Ok(Some(level)) = join_data.stats.skill_set.skill_level(Skill::Climb(Cost)) { + data.static_data.energy_cost *= 0.8_f32.powi(level.into()); + } + if let Ok(Some(level)) = join_data.stats.skill_set.skill_level(Skill::Climb(Speed)) { + data.static_data.movement_speed *= 1.2_f32.powi(level.into()); + } + data + } +} + impl Default for Data { fn default() -> Self { Data { diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 9988369ec5..d3c72284ea 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -407,13 +407,7 @@ pub fn handle_climb(data: &JoinData, update: &mut StateUpdate) { && data.body.can_climb() && update.energy.current() > 100 { - let ability = CharacterAbility::Climb { - energy_cost: 5.0, - movement_speed: 5.0, - } - .adjusted_by_skills(&data.stats.skill_set, None); - let ability_info = AbilityInfo::from_input(data, false, InputKind::Roll); - update.character = CharacterState::from((&ability, ability_info)); + update.character = CharacterState::Climb(climb::Data::create_adjusted_by_skills(data)); } }