removes need to pass BUC to effects

This commit is contained in:
Llywelwyn 2023-08-21 16:39:37 +01:00
parent 1d9cb04d1f
commit db9e04069a
4 changed files with 18 additions and 15 deletions

View file

@ -40,10 +40,10 @@ pub fn inflict_damage(ecs: &mut World, damage: &EffectSpawner, target: Entity) {
pub fn heal_damage(ecs: &mut World, heal: &EffectSpawner, target: Entity) { pub fn heal_damage(ecs: &mut World, heal: &EffectSpawner, target: Entity) {
let mut pools = ecs.write_storage::<Pools>(); let mut pools = ecs.write_storage::<Pools>();
if let Some(pool) = pools.get_mut(target) { if let Some(pool) = pools.get_mut(target) {
if let EffectType::Healing { amount, buc } = &heal.effect_type { if let EffectType::Healing { amount, increment_max } = &heal.effect_type {
let before = pool.hit_points.current; let before = pool.hit_points.current;
pool.hit_points.current = i32::min(pool.hit_points.max, pool.hit_points.current + amount); pool.hit_points.current = i32::min(pool.hit_points.max, pool.hit_points.current + amount);
if pool.hit_points.current - before < *amount && get_noncursed(buc) { if pool.hit_points.current - before < *amount && *increment_max {
// If the heal was not fully effective, and healing source was noncursed, increase max HP by 1. // If the heal was not fully effective, and healing source was noncursed, increase max HP by 1.
pool.hit_points.max += 1; pool.hit_points.max += 1;
pool.hit_points.current += 1; pool.hit_points.current += 1;

View file

@ -3,15 +3,9 @@ use crate::{HungerClock, BUC};
use specs::prelude::*; use specs::prelude::*;
pub fn restore_food(ecs: &mut World, effect: &EffectSpawner, target: Entity) { pub fn restore_food(ecs: &mut World, effect: &EffectSpawner, target: Entity) {
if let EffectType::RestoreNutrition { buc } = &effect.effect_type { if let EffectType::RestoreNutrition { amount } = &effect.effect_type {
if let Some(hc) = ecs.write_storage::<HungerClock>().get_mut(target) { if let Some(hc) = ecs.write_storage::<HungerClock>().get_mut(target) {
if buc == &BUC::Blessed { hc.duration += amount;
hc.duration += 600;
} else if buc == &BUC::Uncursed {
hc.duration += 400;
} else if buc == &BUC::Cursed {
hc.duration += 200;
}
} }
} }
} }

View file

@ -23,13 +23,13 @@ lazy_static! {
pub enum EffectType { pub enum EffectType {
Damage { amount: i32 }, Damage { amount: i32 },
Healing { amount: i32, buc: BUC }, Healing { amount: i32, increment_max: bool },
Confusion { turns: i32 }, Confusion { turns: i32 },
Bloodstain, Bloodstain,
Particle { glyph: FontCharType, fg: RGB, bg: RGB, lifespan: f32, delay: f32 }, Particle { glyph: FontCharType, fg: RGB, bg: RGB, lifespan: f32, delay: f32 },
EntityDeath, EntityDeath,
ItemUse { item: Entity }, ItemUse { item: Entity },
RestoreNutrition { buc: BUC }, RestoreNutrition { amount: i32 },
TriggerFire { trigger: Entity }, TriggerFire { trigger: Entity },
} }

View file

@ -1,4 +1,4 @@
use super::{add_effect, spatial, EffectType, Entity, Targets, World}; use super::{add_effect, get_noncursed, spatial, EffectType, Entity, Targets, World};
use crate::{ use crate::{
gamelog, gui::item_colour_ecs, gui::obfuscate_name_ecs, gui::renderable_colour, Beatitude, Charges, Confusion, gamelog, gui::item_colour_ecs, gui::obfuscate_name_ecs, gui::renderable_colour, Beatitude, Charges, Confusion,
Consumable, Destructible, Hidden, InflictsDamage, Item, MagicMapper, Player, Prop, ProvidesHealing, Consumable, Destructible, Hidden, InflictsDamage, Item, MagicMapper, Player, Prop, ProvidesHealing,
@ -77,7 +77,12 @@ fn event_trigger(source: Option<Entity>, entity: Entity, target: &Targets, ecs:
fn handle_restore_nutrition(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog::Logger) -> gamelog::Logger { fn handle_restore_nutrition(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog::Logger) -> gamelog::Logger {
if ecs.read_storage::<ProvidesNutrition>().get(event.entity).is_some() { if ecs.read_storage::<ProvidesNutrition>().get(event.entity).is_some() {
add_effect(event.source, EffectType::RestoreNutrition { buc: event.buc.clone() }, event.target.clone()); let amount = match event.buc {
BUC::Blessed => 600,
BUC::Uncursed => 400,
BUC::Cursed => 200,
};
add_effect(event.source, EffectType::RestoreNutrition { amount }, event.target.clone());
logger = logger logger = logger
.append("You eat the") .append("You eat the")
.colour(item_colour_ecs(ecs, event.entity)) .colour(item_colour_ecs(ecs, event.entity))
@ -114,7 +119,11 @@ fn handle_healing(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog::L
_ => 0, _ => 0,
}; };
let roll = rng.roll_dice(healing_item.n_dice + buc_mod, healing_item.sides) + healing_item.modifier; let roll = rng.roll_dice(healing_item.n_dice + buc_mod, healing_item.sides) + healing_item.modifier;
add_effect(event.source, EffectType::Healing { amount: roll, buc: event.buc.clone() }, event.target.clone()); add_effect(
event.source,
EffectType::Healing { amount: roll, increment_max: get_noncursed(&event.buc) },
event.target.clone(),
);
for target in get_entity_targets(&event.target) { for target in get_entity_targets(&event.target) {
if ecs.read_storage::<Prop>().get(target).is_some() || ecs.read_storage::<Item>().get(target).is_some() { if ecs.read_storage::<Prop>().get(target).is_some() || ecs.read_storage::<Item>().get(target).is_some() {
continue; continue;