mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Changed knockback from an enum to a struct.
This commit is contained in:
parent
3bfcf02e85
commit
78a2459e6d
@ -5,7 +5,7 @@ Shockwave(
|
||||
recover_duration: 300,
|
||||
damage: 200,
|
||||
poise_damage: 0,
|
||||
knockback: Away(25.0),
|
||||
knockback: ( strength: 25.0, direction: Away),
|
||||
shockwave_angle: 360.0,
|
||||
shockwave_vertical_angle: 90.0,
|
||||
shockwave_speed: 20.0,
|
||||
|
@ -5,7 +5,7 @@ Shockwave(
|
||||
recover_duration: 800,
|
||||
damage: 500,
|
||||
poise_damage: 0,
|
||||
knockback: TowardsUp(40.0),
|
||||
knockback: (strength: 40.0, direction: TowardsUp),
|
||||
shockwave_angle: 90.0,
|
||||
shockwave_vertical_angle: 90.0,
|
||||
shockwave_speed: 50.0,
|
||||
|
@ -181,34 +181,35 @@ impl Damage {
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub enum Knockback {
|
||||
Away(f32),
|
||||
Towards(f32),
|
||||
Up(f32),
|
||||
TowardsUp(f32),
|
||||
pub struct Knockback {
|
||||
pub direction: KnockbackDir,
|
||||
pub strength: f32,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub enum KnockbackDir {
|
||||
Away,
|
||||
Towards,
|
||||
Up,
|
||||
TowardsUp,
|
||||
}
|
||||
|
||||
impl Knockback {
|
||||
pub fn calculate_impulse(self, dir: Dir) -> Vec3<f32> {
|
||||
match self {
|
||||
Knockback::Away(strength) => strength * *Dir::slerp(dir, Dir::new(Vec3::unit_z()), 0.5),
|
||||
Knockback::Towards(strength) => {
|
||||
strength * *Dir::slerp(-dir, Dir::new(Vec3::unit_z()), 0.5)
|
||||
match self.direction {
|
||||
KnockbackDir::Away => self.strength * *Dir::slerp(dir, Dir::new(Vec3::unit_z()), 0.5),
|
||||
KnockbackDir::Towards => {
|
||||
self.strength * *Dir::slerp(-dir, Dir::new(Vec3::unit_z()), 0.5)
|
||||
},
|
||||
Knockback::Up(strength) => strength * Vec3::unit_z(),
|
||||
Knockback::TowardsUp(strength) => {
|
||||
strength * *Dir::slerp(-dir, Dir::new(Vec3::unit_z()), 0.85)
|
||||
KnockbackDir::Up => self.strength * Vec3::unit_z(),
|
||||
KnockbackDir::TowardsUp => {
|
||||
self.strength * *Dir::slerp(-dir, Dir::new(Vec3::unit_z()), 0.85)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn modify_strength(mut self, power: f32) -> Self {
|
||||
use Knockback::*;
|
||||
match self {
|
||||
Away(ref mut f) | Towards(ref mut f) | Up(ref mut f) | TowardsUp(ref mut f) => {
|
||||
*f *= power;
|
||||
},
|
||||
}
|
||||
self.strength *= power;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use crate::{
|
||||
comp::buff::{BuffCategory, BuffData, BuffKind},
|
||||
effect::{self, BuffEffect},
|
||||
uid::Uid,
|
||||
Damage, DamageSource, Explosion, GroupTarget, Knockback, RadiusEffect,
|
||||
Damage, DamageSource, Explosion, GroupTarget, Knockback, KnockbackDir, RadiusEffect,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use specs::Component;
|
||||
@ -89,7 +89,10 @@ impl ProjectileConstructor {
|
||||
source: DamageSource::Projectile,
|
||||
value: damage,
|
||||
}),
|
||||
Effect::Knockback(Knockback::Away(knockback)),
|
||||
Effect::Knockback(Knockback {
|
||||
strength: knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
}),
|
||||
Effect::RewardEnergy(energy_regen),
|
||||
Effect::Vanish,
|
||||
Effect::Buff {
|
||||
|
@ -55,7 +55,7 @@ pub mod util;
|
||||
pub mod vol;
|
||||
pub mod volumes;
|
||||
|
||||
pub use combat::{Damage, DamageSource, GroupTarget, Knockback};
|
||||
pub use combat::{Damage, DamageSource, GroupTarget, Knockback, KnockbackDir};
|
||||
pub use comp::inventory::loadout_builder::LoadoutBuilder;
|
||||
pub use explosion::{Explosion, RadiusEffect};
|
||||
pub use skillset_builder::SkillSetBuilder;
|
||||
|
@ -7,7 +7,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -109,7 +109,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: 180_f32.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(self.static_data.knockback),
|
||||
knockback: Knockback {
|
||||
strength: self.static_data.knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
} else if self.timer < self.static_data.swing_duration {
|
||||
// Swings
|
||||
|
@ -7,7 +7,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::{StageSection, *},
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -176,7 +176,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: self.static_data.max_angle.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(knockback),
|
||||
knockback: Knockback {
|
||||
strength: knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
} else if self.timer < self.static_data.swing_duration {
|
||||
// Swings
|
||||
|
@ -10,7 +10,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -114,7 +114,10 @@ impl CharacterBehavior for Data {
|
||||
hit_solid: vec![projectile::Effect::Stick],
|
||||
hit_entity: vec![
|
||||
projectile::Effect::Damage(Some(GroupTarget::OutOfGroup), damage),
|
||||
projectile::Effect::Knockback(Knockback::Away(knockback)),
|
||||
projectile::Effect::Knockback(Knockback {
|
||||
strength: knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
}),
|
||||
projectile::Effect::Vanish,
|
||||
projectile::Effect::Buff {
|
||||
buff: BuffEffect {
|
||||
|
@ -7,7 +7,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -197,9 +197,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: self.static_data.stage_data[stage_index].angle.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(
|
||||
self.static_data.stage_data[stage_index].knockback,
|
||||
),
|
||||
knockback: Knockback {
|
||||
strength: self.static_data.stage_data[stage_index].knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -7,7 +7,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -155,7 +155,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: self.static_data.angle.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(knockback),
|
||||
knockback: Knockback {
|
||||
strength: knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
}
|
||||
update.character = CharacterState::DashMelee(Data {
|
||||
|
@ -4,7 +4,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::{StageSection, *},
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -164,7 +164,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: self.static_data.max_angle.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(self.static_data.knockback),
|
||||
knockback: Knockback {
|
||||
strength: self.static_data.knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
|
||||
update.character = CharacterState::LeapMelee(Data {
|
||||
|
@ -8,7 +8,7 @@ use crate::{
|
||||
behavior::{CharacterBehavior, JoinData},
|
||||
utils::*,
|
||||
},
|
||||
Damage, DamageSource, GroupTarget, Knockback,
|
||||
Damage, DamageSource, GroupTarget, Knockback, KnockbackDir,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::time::Duration;
|
||||
@ -131,7 +131,10 @@ impl CharacterBehavior for Data {
|
||||
max_angle: 180_f32.to_radians(),
|
||||
applied: false,
|
||||
hit_count: 0,
|
||||
knockback: Knockback::Away(self.static_data.knockback),
|
||||
knockback: Knockback {
|
||||
strength: self.static_data.knockback,
|
||||
direction: KnockbackDir::Away,
|
||||
},
|
||||
});
|
||||
} else if self.timer < self.static_data.swing_duration {
|
||||
if matches!(
|
||||
|
Loading…
Reference in New Issue
Block a user