fixed first round effect and migrated logging

This commit is contained in:
TotallyNot 2024-01-08 19:37:48 +01:00
parent b45d04b872
commit e7d6b74aab
10 changed files with 539 additions and 222 deletions

View file

@ -1,22 +1,24 @@
use bevy_ecs::prelude::*;
use macros::LogMessage;
use crate::{
effect::{Effects, TurnLimitedEffect},
hierarchy::{HierarchyBuilder, Parent},
log,
log::Logger,
passives::{Education, FactionUpgrades, Merits},
passives::{Education, EducationPartDamageBonus, FactionUpgrades, Merits},
player::{
stats::{
AdditiveBonus, AmmoControl, ClipSize, Clips, CritRate, DamageBonus, Dexterity,
SimpleStatBonus, SimpleStatBundle, SimpleStatEffective, WeaponAccuracy,
},
Current, Weapons,
Current, PartDamageBonus, Weapons,
},
Id, Name, Stages,
};
use self::bonus::{FirstTurnBonus, MultiTurnBonus, TurnTriggeredBonus};
use self::bonus::{
FirstTurnBonus, MultiTurnBonus, OpponentStatusEffect, SelfStatusEffect, TurnTriggeredBonus,
};
pub mod bonus;
pub mod temp;
@ -58,7 +60,7 @@ pub enum WeaponCategory {
Smg,
Shotgun,
Pistol,
Club,
Clubbing,
Piercing,
Slashing,
Mechanical,
@ -110,7 +112,7 @@ pub enum WeaponMod {
FullChoke,
RecoilPad,
StandardBrake,
HeavyDutyBreak,
HeavyDutyBrake,
TacticalBrake,
SmallLight,
PrecisionLight,
@ -220,11 +222,6 @@ pub enum FirstTurnEffect {
Bonus { value: f32, bonus: FirstTurnBonus },
}
#[derive(Component)]
pub enum DamageProcEffect {
MultiTurn { value: f32, bonus: MultiTurnBonus },
}
impl FirstTurnEffect {
fn spawn(&self, effects: &mut Effects, weapon: Entity, owner: Entity) {
match self {
@ -234,31 +231,28 @@ impl FirstTurnEffect {
}
}
#[derive(Component)]
pub enum DamageProcEffect {
MultiTurn {
value: f32,
bonus: MultiTurnBonus,
},
OpponentEffect {
value: f32,
bonus: OpponentStatusEffect,
},
SelfEffect {
value: f32,
bonus: SelfStatusEffect,
},
}
#[derive(Component)]
pub struct EquippedMods(pub Vec<WeaponMod>);
#[derive(Component)]
pub struct Experience(pub f32);
#[derive(LogMessage)]
pub struct ReloadWeapon {
#[log(player)]
pub actor: Entity,
#[log(weapon)]
pub weapon: Entity,
}
#[derive(LogMessage)]
pub struct MissTarget {
#[log(player)]
pub actor: Entity,
#[log(player)]
pub recipient: Entity,
#[log(weapon)]
pub weapon: Entity,
pub rounds: Option<u16>,
}
#[derive(Bundle)]
pub struct WeaponBundle {
pub usable: Usable,
@ -514,7 +508,7 @@ fn apply_passives(
weapon,
);
}
WeaponMod::HeavyDutyBreak => {
WeaponMod::HeavyDutyBrake => {
effects.spawn(
SimpleStatBonus::<WeaponAccuracy>::new("heavy duty brake", 1.25 / 50.0),
weapon,
@ -595,7 +589,7 @@ fn apply_passives(
merits.pistol_mastery,
education.cbt2840.then_some("CBT2840"),
),
WeaponCategory::Club => (merits.club_mastery, None),
WeaponCategory::Clubbing => (merits.club_mastery, None),
WeaponCategory::Piercing => (merits.piercing_mastery, None),
WeaponCategory::Slashing => (merits.slashing_mastery, None),
WeaponCategory::Mechanical => (merits.mechanical_mastery, None),
@ -644,6 +638,14 @@ fn apply_passives(
effects.spawn(SimpleStatBonus::<DamageBonus>::new("HIS2160", 0.10), weapon);
}
if education.bio2380 {
commands
.spawn(PartDamageBonus::Education(
EducationPartDamageBonus::Bio2380,
))
.set_parent(weapon);
}
if mastery > 0 {
effects.spawn(
SimpleStatBonus::<WeaponAccuracy>::new("mastery", (mastery as f32) * 0.2 / 50.0),
@ -697,9 +699,9 @@ fn reload_weapon(
ammo.0 = clip_size.value;
clips.value -= 1;
logger.log(|| ReloadWeapon {
log!(logger, "reload_weapon", {
actor: player.get(),
weapon,
weapon
});
commands.entity(weapon).remove::<NeedsReload>();
@ -735,12 +737,10 @@ fn apply_first_turn_effects(
pub(crate) fn configure(stages: &mut Stages) {
stages.equip.add_systems(set_owner);
stages.pre_fight.add_systems((
apply_passives,
apply_first_turn_effects
.after(apply_passives)
.after(bonus::prepare_bonuses),
));
// 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.turn.add_systems(reload_weapon);
stages.post_turn.add_systems(unset_current);
stages