From 24687ba77bba90b05ec866e4cc5ad251203639f4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 24 Mar 2021 20:29:51 +0000 Subject: [PATCH] Provide for occultation_notify_hook Signed-off-by: Ian Jackson --- src/gamestate.rs | 4 ++++ src/hidden.rs | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index 73ffb5b3..7b086ba9 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -167,6 +167,10 @@ pub trait PieceTrait: OutlineTrait + Send + Debug + 'static { } fn itemname(&self) -> &str; + + fn occultation_notify_hook(&self, _piece: PieceId) -> UnpreparedUpdates { + None + } } #[typetag::serde] diff --git a/src/hidden.rs b/src/hidden.rs index e3289706..7e4bab72 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -725,15 +725,37 @@ mod recompute { gpieces: &mut GPieces, goccults: &mut GameOccults, ipieces: &IPieces) -> Implemented { + let mut unprepared = vec![]; + for occid in self.outdated { if let Some(occ) = goccults.occults.get_mut(occid) { vpid::permute(occid, occ, gplayers, gpieces, ipieces); + if let Some(ipc) = ipieces.get(occ.occulter) { + if let Some(uu) = { + ipc + .direct_trait_access() + .occultation_notify_hook(occ.occulter) + } { + unprepared.push(uu) + } + } } } consistency_check(gplayers, gpieces, goccults); - Implemented(None) + let unprepared = if unprepared.is_empty() { + None + } else { + Some(Box::new( + move |updates: &mut PrepareUpdatesBuffer| { + for p in unprepared.into_iter() { p(updates) } + } + ) as SomeUnpreparedUpdates + ) + }; + + Implemented(unprepared) } } } -- 2.30.2