diff --git a/src/effects/triggers.rs b/src/effects/triggers.rs index ec03ef7..812bae5 100644 --- a/src/effects/triggers.rs +++ b/src/effects/triggers.rs @@ -228,6 +228,7 @@ fn handle_identify(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog:: return (logger, true); } let mut to_identify: Vec<(Entity, String)> = Vec::new(); + let mut beatitudes = ecs.write_storage::(); for (e, _i, _bp, _o, name) in ( &ecs.entities(), &ecs.read_storage::(), @@ -237,14 +238,16 @@ fn handle_identify(ecs: &mut World, event: &mut EventInfo, mut logger: gamelog:: ) .join() .filter(|(_e, _i, bp, _o, name)| { - bp.owner == event.source.unwrap() && !dm.identified_items.contains(&name.name.clone()) + bp.owner == event.source.unwrap() + && (!dm.identified_items.contains(&name.name.clone()) + || !beatitudes.get(event.source.unwrap()).map(|beatitude| beatitude.known).unwrap_or(true)) }) { to_identify.push((e, name.name.clone())); } for item in to_identify { dm.identified_items.insert(item.1); - if let Some(beatitude) = ecs.write_storage::().get_mut(item.0) { + if let Some(beatitude) = beatitudes.get_mut(item.0) { beatitude.known = true; } } diff --git a/src/gui/identify_menu.rs b/src/gui/identify_menu.rs index 5dddd7c..deadb81 100644 --- a/src/gui/identify_menu.rs +++ b/src/gui/identify_menu.rs @@ -21,6 +21,7 @@ pub fn identify(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option(); let names = gs.ecs.read_storage::(); let renderables = gs.ecs.read_storage::(); + let beatitudes = gs.ecs.read_storage::(); let build_identify_iterator = || { (&entities, &items, &renderables, &names).join().filter(|(item_entity, _i, _r, n)| { @@ -41,7 +42,9 @@ pub fn identify(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option