refactors beatitude, and prepping readme for week 7

This commit is contained in:
Llywelwyn 2023-08-21 12:50:30 +01:00
parent 469d83994e
commit 831720ce37
14 changed files with 172 additions and 63 deletions

View file

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

View file

@ -1,3 +1,4 @@
use super::BUC;
use crate::spatial;
use rltk::prelude::*;
use specs::prelude::*;
@ -11,7 +12,6 @@ mod targeting;
mod triggers;
pub use targeting::aoe_tiles;
pub use triggers::{BLESSED, CURSED, UNCURSED};
lazy_static! {
pub static ref EFFECT_QUEUE: Mutex<VecDeque<EffectSpawner>> = Mutex::new(VecDeque::new());
@ -29,7 +29,7 @@ pub enum EffectType {
Particle { glyph: FontCharType, fg: RGB, bg: RGB, lifespan: f32, delay: f32 },
EntityDeath,
ItemUse { item: Entity },
RestoreNutrition { buc: i32 },
RestoreNutrition { buc: BUC },
TriggerFire { trigger: Entity },
}

View file

@ -1,8 +1,8 @@
use super::{add_effect, spatial, EffectType, Entity, Targets, World};
use crate::{
gamelog, gui::item_colour_ecs, gui::obfuscate_name_ecs, gui::renderable_colour, Charges, Confusion, Consumable,
Cursed, Destructible, Hidden, InflictsDamage, Item, MagicMapper, Player, Prop, ProvidesHealing, ProvidesNutrition,
RandomNumberGenerator, Renderable, RunState, SingleActivation,
gamelog, gui::item_colour_ecs, gui::obfuscate_name_ecs, gui::renderable_colour, Beatitude, Charges, Confusion,
Consumable, Destructible, Hidden, InflictsDamage, Item, MagicMapper, Player, Prop, ProvidesHealing,
ProvidesNutrition, RandomNumberGenerator, Renderable, RunState, SingleActivation, BUC,
};
use rltk::prelude::*;
use specs::prelude::*;
@ -40,15 +40,11 @@ pub fn trigger(source: Option<Entity>, trigger: Entity, target: &Targets, ecs: &
}
}
pub const BLESSED: i32 = 2;
pub const UNCURSED: i32 = 1;
pub const CURSED: i32 = 0;
struct EventInfo {
source: Option<Entity>,
entity: Entity,
target: Targets,
buc: i32,
buc: BUC,
log: bool,
}
@ -57,7 +53,11 @@ struct EventInfo {
// place on the player -- once monsters can use an item, their item usage will make logs for
// the player saying they were the one who used the item. This will need refactoring then.
fn event_trigger(source: Option<Entity>, entity: Entity, target: &Targets, ecs: &mut World) {
let buc = if ecs.read_storage::<Cursed>().get(entity).is_some() { CURSED } else { UNCURSED };
let buc = if let Some(beatitude) = ecs.read_storage::<Beatitude>().get(entity) {
beatitude.buc.clone()
} else {
BUC::Uncursed
};
let mut event = EventInfo { source, entity, target: target.clone(), buc, log: false };
let mut logger = gamelog::Logger::new();
// PROVIDES NUTRITION
@ -77,14 +77,14 @@ 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 {
if ecs.read_storage::<ProvidesNutrition>().get(event.entity).is_some() {
add_effect(event.source, EffectType::RestoreNutrition { buc: event.buc }, event.target.clone());
add_effect(event.source, EffectType::RestoreNutrition { buc: event.buc.clone() }, event.target.clone());
logger = logger
.append("You eat the")
.colour(item_colour_ecs(ecs, event.entity))
.append_n(obfuscate_name_ecs(ecs, event.entity).0)
.colour(WHITE)
.period()
.buc(event.buc, Some("Blech! Rotten."), Some("Delicious."));
.buc(event.buc.clone(), Some("Blech! Rotten."), Some("Delicious."));
event.log = true;
}
return logger;
@ -93,10 +93,10 @@ fn handle_restore_nutrition(ecs: &mut World, event: &mut EventInfo, mut logger:
fn handle_magic_mapper(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog::Logger) -> gamelog::Logger {
if ecs.read_storage::<MagicMapper>().get(event.entity).is_some() {
let mut runstate = ecs.fetch_mut::<RunState>();
let cursed = if event.buc == CURSED { true } else { false };
let cursed = if event.buc == BUC::Cursed { true } else { false };
*runstate = RunState::MagicMapReveal { row: 0, cursed: cursed };
logger = logger.append("You recall your surroundings!").buc(
event.buc,
event.buc.clone(),
Some("... but forget where you last were."),
None,
);
@ -121,7 +121,7 @@ fn handle_healing(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog::L
.append("You")
.colour(WHITE)
.append("recover some vigour.")
.buc(event.buc, None, Some("You feel great!"));
.buc(event.buc.clone(), None, Some("You feel great!"));
} else {
logger = logger
.append("The")