feat: added armour passives

This commit is contained in:
TotallyNot 2025-11-04 13:04:56 +01:00
parent cfe2631578
commit 451efd2bb7
Signed by: pyrite
GPG key ID: 7F1BA9170CD35D15
17 changed files with 654 additions and 318 deletions

View file

@ -12,7 +12,8 @@ use crate::{
Stages,
effect::{Effects, TurnLimitedEffect},
player::status_effect::{
AdditiveStatusEffect, Crippled, Demoralise, Frozen, Motivate, Slow, Weakened, Withered,
AdditiveStatusEffect, Crippled, DamageOverTimeType, Demoralise, Frozen, Motivate, Slow,
Weakened, Withered,
},
};
@ -427,6 +428,15 @@ pub(crate) fn prepare_bonuses(
});
}
WeaponBonusType::Bleed => {
commands
.entity(weapon.parent())
.with_child(DamageProcEffect::DamageOverTimer {
value: value.0,
kind: DamageOverTimeType::Bleed,
});
}
val => unimplemented!("{val:?}"),
}
}
@ -434,6 +444,6 @@ pub(crate) fn prepare_bonuses(
pub(crate) fn configure(stages: &mut Stages) {
stages
.pre_fight
.passives
.add_systems(prepare_bonuses.after(super::apply_passives));
}

View file

@ -1,7 +1,7 @@
use bevy_ecs::prelude::*;
use proxisim_models::bundle::{
passive::{Education, EducationPartDamageBonus, FactionUpgrades, Merits},
player::{Current, PartDamageBonus, Weapons},
player::{Current, PartDamageBonus},
stat::{
AdditiveBonus, AmmoControl, ClipSize, Clips, CritRate, DamageBonus, Dexterity,
SimpleStatBonus, SimpleStatEffective, WeaponAccuracy,
@ -17,6 +17,7 @@ use crate::{
effect::{Effects, TurnLimitedEffect},
log,
log::Logger,
player::status_effect::DamageOverTimeType,
};
use self::bonus::{
@ -152,6 +153,10 @@ pub enum DamageProcEffect {
value: f32,
bonus: SelfStatusEffect,
},
DamageOverTimer {
value: f32,
kind: DamageOverTimeType,
},
}
fn apply_passives(
@ -520,7 +525,7 @@ pub(crate) fn configure(stages: &mut Stages) {
// running this in the snapshot layer ensures that the stat increases aren't restored at the
// end of the run
stages.snapshot.add_systems(apply_first_turn_effects);
stages.pre_fight.add_systems(apply_passives);
stages.equip.add_systems(apply_passives);
stages.turn.add_systems(reload_weapon);
stages.post_turn.add_systems(unset_current);
stages