diff --git a/Cargo.lock b/Cargo.lock index 92fd92aa35..bdbf7973ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5995,7 +5995,6 @@ dependencies = [ "hashbrown 0.9.1", "image", "indexmap", - "inline_tweak", "lazy_static", "num-derive", "num-traits 0.2.14", diff --git a/assets/common/abilities/axe/spin.ron b/assets/common/abilities/axe/spin.ron index beade00a33..a26b860d02 100644 --- a/assets/common/abilities/axe/spin.ron +++ b/assets/common/abilities/axe/spin.ron @@ -7,7 +7,7 @@ SpinMelee( range: 3.5, energy_cost: 100, is_infinite: true, - is_helicopter: Yes, + movement_behavior: AxeHover, is_interruptible: false, forward_speed: 0.0, num_spins: 1, diff --git a/assets/common/abilities/sword/spin.ron b/assets/common/abilities/sword/spin.ron index 907a1f3ef7..64edbfb839 100644 --- a/assets/common/abilities/sword/spin.ron +++ b/assets/common/abilities/sword/spin.ron @@ -7,7 +7,7 @@ SpinMelee( range: 3.5, energy_cost: 150, is_infinite: false, - is_helicopter: No, + movement_behavior: ForwardGround, is_interruptible: true, forward_speed: 1.0, num_spins: 3, diff --git a/assets/common/abilities/unique/stonegolemfist/spin.ron b/assets/common/abilities/unique/stonegolemfist/spin.ron index 5b2b2234e6..06f2756ffb 100644 --- a/assets/common/abilities/unique/stonegolemfist/spin.ron +++ b/assets/common/abilities/unique/stonegolemfist/spin.ron @@ -7,7 +7,7 @@ SpinMelee( range: 7.5, energy_cost: 0, is_infinite: false, - is_helicopter: Golem, + movement_behavior: GolemHover, is_interruptible: false, forward_speed: 0.0, num_spins: 1, diff --git a/common/Cargo.toml b/common/Cargo.toml index fefde8a3f1..b4a79f060f 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -28,7 +28,6 @@ spin_sleep = "1.0" tracing = { version = "0.1", default-features = false } vek = { version = "0.12.0", features = ["serde"] } uuid = { version = "0.8.1", default-features = false, features = ["serde", "v4"] } -inline_tweak = "1.0.2" # Assets assets_manager = {version = "0.4.2", features = ["bincode", "ron", "json", "hot-reloading"]} diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index 85170c0c82..7fdbaf2c1e 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -152,7 +152,7 @@ pub enum CharacterAbility { range: f32, energy_cost: u32, is_infinite: bool, - is_helicopter: spin_melee::Helicopter, + movement_behavior: spin_melee::MovementBehavior, is_interruptible: bool, forward_speed: f32, num_spins: u32, @@ -653,14 +653,14 @@ impl CharacterAbility { ref mut swing_duration, ref mut energy_cost, ref mut is_infinite, - ref mut is_helicopter, + ref mut movement_behavior, .. } => { *is_infinite = skillset.has_skill(Axe(SInfinite)); - *is_helicopter = if skillset.has_skill(Axe(SHelicopter)) { - spin_melee::Helicopter::Yes + *movement_behavior = if skillset.has_skill(Axe(SHelicopter)) { + spin_melee::MovementBehavior::AxeHover } else { - spin_melee::Helicopter::No + spin_melee::MovementBehavior::ForwardGround }; if let Ok(Some(level)) = skillset.skill_level(Axe(SDamage)) { *base_damage = @@ -1255,7 +1255,7 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState { range, energy_cost, is_infinite, - is_helicopter, + movement_behavior, is_interruptible, forward_speed, num_spins, @@ -1269,7 +1269,7 @@ impl From<(&CharacterAbility, AbilityKey)> for CharacterState { range: *range, energy_cost: *energy_cost, is_infinite: *is_infinite, - is_helicopter: *is_helicopter, + movement_behavior: *movement_behavior, is_interruptible: *is_interruptible, forward_speed: *forward_speed, num_spins: *num_spins, diff --git a/common/src/states/spin_melee.rs b/common/src/states/spin_melee.rs index f4673d1d30..9d301f3e6c 100644 --- a/common/src/states/spin_melee.rs +++ b/common/src/states/spin_melee.rs @@ -7,7 +7,6 @@ use crate::{ }, Damage, DamageSource, GroupTarget, Knockback, }; -use inline_tweak::*; use serde::{Deserialize, Serialize}; use std::time::Duration; use vek::Vec3; @@ -31,8 +30,8 @@ pub struct StaticData { pub energy_cost: u32, /// Whether spin state is infinite pub is_infinite: bool, - /// Used to maintain classic axe spin physics - pub is_helicopter: Helicopter, + /// Used to dictate how movement functions in this state + pub movement_behavior: MovementBehavior, /// Whether the state can be interrupted by other abilities pub is_interruptible: bool, /// Used for forced forward movement @@ -62,15 +61,14 @@ impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData) -> StateUpdate { let mut update = StateUpdate::from(data); - match self.static_data.is_helicopter { - Helicopter::No => {}, - Helicopter::Yes => { + match self.static_data.movement_behavior { + MovementBehavior::ForwardGround => {}, + MovementBehavior::AxeHover => { let new_vel_z = update.vel.0.z + GRAVITY * data.dt.0 * 0.5; update.vel.0 = Vec3::new(0.0, 0.0, new_vel_z) + data.inputs.move_dir * 5.0; }, - Helicopter::Golem => { - update.vel.0 = - Vec3::new(0.0, 0.0, tweak!(20.0)) + *data.inputs.look_dir * tweak!(25.0); + MovementBehavior::GolemHover => { + update.vel.0 = Vec3::new(0.0, 0.0, 20.0) + *data.inputs.look_dir * 25.0; }, } @@ -124,7 +122,10 @@ impl CharacterBehavior for Data { knockback: Knockback::Away(self.static_data.knockback), }); } else if self.timer < self.static_data.swing_duration { - if matches!(self.static_data.is_helicopter, Helicopter::No) { + if matches!( + self.static_data.movement_behavior, + MovementBehavior::ForwardGround + ) { handle_forced_movement( data, &mut update, @@ -204,8 +205,8 @@ impl CharacterBehavior for Data { } #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] -pub enum Helicopter { - No, - Yes, - Golem, +pub enum MovementBehavior { + ForwardGround, + AxeHover, + GolemHover, } diff --git a/voxygen/anim/src/golem/spinmelee.rs b/voxygen/anim/src/golem/spinmelee.rs index 0d8cd2f505..69d08e3246 100644 --- a/voxygen/anim/src/golem/spinmelee.rs +++ b/voxygen/anim/src/golem/spinmelee.rs @@ -2,7 +2,7 @@ use super::{ super::{vek::*, Animation}, GolemSkeleton, SkeletonAttr, }; -use common::{comp::item::ToolKind, states::utils::StageSection}; +use common::states::utils::StageSection; use std::f32::consts::PI; pub struct SpinMeleeAnimation;