Added support for damage falloff with explosions.

This commit is contained in:
Sam 2021-01-31 11:40:04 -05:00
parent 5c16b0b532
commit 5eec915c2e
7 changed files with 12 additions and 4 deletions

View File

@ -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 => {

View File

@ -178,6 +178,7 @@ impl<'a> System<'a> for Sys {
energies.get(beam_owner),
ori.0,
false,
1.0,
);
if !server_events.is_empty() {

View File

@ -138,6 +138,7 @@ impl<'a> System<'a> for Sys {
energies.get(entity),
dir,
is_dodge,
1.0,
);
if !server_events.is_empty() {

View File

@ -117,6 +117,7 @@ impl<'a> System<'a> for Sys {
energies.get(owner_entity),
ori.0,
false,
1.0,
);
for event in server_events {

View File

@ -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() {

View File

@ -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>>();

View File

@ -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)