mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Added support for damage falloff with explosions.
This commit is contained in:
parent
5c16b0b532
commit
5eec915c2e
@ -77,6 +77,8 @@ impl Attack {
|
||||
attacker_energy: Option<&Energy>,
|
||||
dir: Dir,
|
||||
target_dodging: bool,
|
||||
// Currently just modifies damage, maybe look into modifying strength of other effects?
|
||||
strength_modifier: f32,
|
||||
) -> Vec<ServerEvent> {
|
||||
let is_crit = thread_rng().gen::<f32>() < self.crit_chance;
|
||||
let mut accumulated_damage = 0.0;
|
||||
@ -92,6 +94,7 @@ impl Attack {
|
||||
Some(attacker_uid),
|
||||
is_crit,
|
||||
self.crit_multiplier,
|
||||
strength_modifier,
|
||||
);
|
||||
let damage_damage = -change.amount as f32;
|
||||
accumulated_damage += damage_damage;
|
||||
@ -365,8 +368,9 @@ impl Damage {
|
||||
uid: Option<Uid>,
|
||||
is_crit: bool,
|
||||
crit_mult: f32,
|
||||
damage_modifier: f32,
|
||||
) -> HealthChange {
|
||||
let mut damage = self.value;
|
||||
let mut damage = self.value * damage_modifier;
|
||||
let damage_reduction = inventory.map_or(0.0, |inv| Damage::compute_damage_reduction(inv));
|
||||
match self.source {
|
||||
DamageSource::Melee => {
|
||||
|
@ -178,6 +178,7 @@ impl<'a> System<'a> for Sys {
|
||||
energies.get(beam_owner),
|
||||
ori.0,
|
||||
false,
|
||||
1.0,
|
||||
);
|
||||
|
||||
if !server_events.is_empty() {
|
||||
|
@ -138,6 +138,7 @@ impl<'a> System<'a> for Sys {
|
||||
energies.get(entity),
|
||||
dir,
|
||||
is_dodge,
|
||||
1.0,
|
||||
);
|
||||
|
||||
if !server_events.is_empty() {
|
||||
|
@ -117,6 +117,7 @@ impl<'a> System<'a> for Sys {
|
||||
energies.get(owner_entity),
|
||||
ori.0,
|
||||
false,
|
||||
1.0,
|
||||
);
|
||||
|
||||
for event in server_events {
|
||||
|
@ -205,6 +205,7 @@ impl<'a> System<'a> for Sys {
|
||||
shockwave_owner.and_then(|e| energies.get(e)),
|
||||
dir,
|
||||
false,
|
||||
1.0,
|
||||
);
|
||||
|
||||
if !server_events.is_empty() {
|
||||
|
@ -510,7 +510,7 @@ pub fn handle_land_on_ground(server: &Server, entity: EcsEntity, vel: Vec3<f32>)
|
||||
source: DamageSource::Falling,
|
||||
value: falldmg,
|
||||
};
|
||||
let change = damage.modify_damage(inventories.get(entity), None, false, 0.0);
|
||||
let change = damage.modify_damage(inventories.get(entity), None, false, 0.0, 1.0);
|
||||
health.change_by(change);
|
||||
}
|
||||
// Handle poise change
|
||||
@ -679,7 +679,6 @@ pub fn handle_explosion(
|
||||
}
|
||||
},
|
||||
RadiusEffect::Attack(attack) => {
|
||||
// TODO: Before merging handle falloff
|
||||
let energies = &ecs.read_storage::<comp::Energy>();
|
||||
for (entity_b, pos_b, _health_b, inventory_b_maybe) in (
|
||||
&ecs.entities(),
|
||||
@ -721,6 +720,7 @@ pub fn handle_explosion(
|
||||
owner_entity.and_then(|e| energies.get(e)),
|
||||
dir,
|
||||
false,
|
||||
strength,
|
||||
);
|
||||
|
||||
let server_eventbus = ecs.read_resource::<EventBus<ServerEvent>>();
|
||||
|
@ -90,7 +90,7 @@ impl StateExt for State {
|
||||
},
|
||||
Effect::Damage(damage) => {
|
||||
let inventories = self.ecs().read_storage::<Inventory>();
|
||||
let change = damage.modify_damage(inventories.get(entity), source, false, 0.0);
|
||||
let change = damage.modify_damage(inventories.get(entity), source, false, 0.0, 1.0);
|
||||
self.ecs()
|
||||
.write_storage::<comp::Health>()
|
||||
.get_mut(entity)
|
||||
|
Loading…
Reference in New Issue
Block a user