From df7fea475b64769e949742590ad640c67c93d7c4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 17 Feb 2021 22:27:48 +0000 Subject: [PATCH] Provide remove_occultation Signed-off-by: Ian Jackson --- src/hidden.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/hidden.rs b/src/hidden.rs index 92e8af03..ec3a17bc 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -530,3 +530,34 @@ pub fn create_occultation( updates } + +#[throws(IE)] +pub fn remove_occultation( + gs: &mut GameState, + ipieces: &PiecesLoaded, + occid: OccId, +) -> Vec<(PieceId, PieceUpdateOps)> { + let occultation = gs.occults.occults.remove(occid).ok_or_else( + || internal_logic_error("removing nonexistent occultation"))?; + + let mut updates = vec![]; + let mut aggerr = AggregatedIE::new(); + for &ppiece in &occultation.pieces { + recalculate_occultation_ofmany(gs, ipieces, ppiece, &mut updates) + .unwrap_or_else(|e| { + aggerr.record(e); + if let Some(pgpc) = gs.pieces.get_mut(ppiece) { + pgpc.occult.passive = None; + } + }); + } + + if let Some(ogpc) = gs.pieces.get_mut(occultation.occulter) { + ogpc.occult.active = None; + } else { + aggerr.record(internal_logic_error("removing occultation of non-piece")); + } + + aggerr.ok()?; + updates +} -- 2.30.2