From 60fe39c834130eadb4dca4e9dc6b18ec445c753c Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Tue, 1 Aug 2023 20:23:08 +0100 Subject: [PATCH] Combined attack logs that happen on the same tick, involving the player --- src/inventory_system.rs | 4 +++- src/melee_combat_system.rs | 30 +++++++++++++++++------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/inventory_system.rs b/src/inventory_system.rs index 4be2947..54788ca 100644 --- a/src/inventory_system.rs +++ b/src/inventory_system.rs @@ -240,7 +240,9 @@ impl<'a> System<'a> for ItemUseSystem { equipped.remove(*item); backpack.insert(*item, InBackpack { owner: target }).expect("Unable to insert backpack"); if target == *player_entity { - logger = logger.append("You remove your").item_name_n(&item_being_used.name).period(); + if let Some(name) = names.get(*item) { + logger = logger.append("You remove your").item_name_n(&name.name).period(); + } } } diff --git a/src/melee_combat_system.rs b/src/melee_combat_system.rs index 9dbbc86..48c8fd7 100644 --- a/src/melee_combat_system.rs +++ b/src/melee_combat_system.rs @@ -63,6 +63,8 @@ impl<'a> System<'a> for MeleeCombatSystem { // 1d20 must be less than 10, 45% chance of a hit const COMBAT_LOGGING: bool = true; + let mut logger = gamelog::Logger::new(); + let mut something_to_log = false; for (entity, wants_melee, name, attacker_attributes, attacker_skills, attacker_pools) in (&entities, &wants_melee, &names, &attributes, &skills, &pools).join() @@ -223,18 +225,18 @@ impl<'a> System<'a> for MeleeCombatSystem { } SufferDamage::new_damage(&mut inflict_damage, wants_melee.target, damage, entity == *player_entity); if entity == *player_entity { - gamelog::Logger::new() // You hit the . + something_to_log = true; + logger = logger // You hit the . .append("You hit the") .npc_name_n(&target_name.name) - .period() - .log(); + .period(); } else if wants_melee.target == *player_entity { - gamelog::Logger::new() // hits you! + something_to_log = true; + logger = logger // hits you! .append("The") .npc_name(&name.name) .append(attack_verb) - .append("you!") - .log(); + .append("you!"); } else { gamelog::Logger::new() // misses the . .append("The") @@ -255,16 +257,16 @@ impl<'a> System<'a> for MeleeCombatSystem { particle_builder.attack_miss(pos.x, pos.y) } if entity == *player_entity { - gamelog::Logger::new() // You miss. - .append("You miss.") - .log(); + something_to_log = true; + logger = logger // You miss. + .append("You miss."); } else if wants_melee.target == *player_entity { - gamelog::Logger::new() // misses! + something_to_log = true; + logger = logger // misses! .append("The") .npc_name(&name.name) .colour(rltk::WHITE) - .append("misses!") - .log(); + .append("misses!"); } else { gamelog::Logger::new() // misses the . .append("The") @@ -278,8 +280,10 @@ impl<'a> System<'a> for MeleeCombatSystem { } } } - wants_melee.clear(); + if something_to_log { + logger.log(); + } } }