From: Ian Jackson Date: Tue, 16 Mar 2021 10:45:25 +0000 (+0000) Subject: hidden: Break out OccKG::pri_occulted X-Git-Tag: otter-0.4.0~23 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=97d28eb976c9505a2b99c9315f28f9e785289ffe;p=otter.git hidden: Break out OccKG::pri_occulted Signed-off-by: Ian Jackson --- diff --git a/src/hidden.rs b/src/hidden.rs index 792acef0..f9dba2b0 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -105,6 +105,17 @@ impl OccultationKind { } } +impl OccultationKindGeneral<(Pos, ZLevel)> { + pub fn pri_occulted(self) -> Option { + Some(match self { + OccKG::Invisible => return None, + OccKG::Visible => PriOcculted::Visible(ShowUnocculted(())), + OccKG::Scrambled => PriOcculted::Occulted, + OccKG::Displaced((pos,z)) => PriOcculted::Displaced(pos, z), + }) + } +} + impl OccultationKindGeneral { fn map_displaced(&self, f: F) -> OccultationKindGeneral where F: FnOnce(&T) -> U, @@ -189,16 +200,15 @@ pub fn piece_pri( } }; - let occk_dbg = occk.map_displaced(|(pos,z)|(*pos,z.zg)); - let occulted = match occk { - OccKG::Invisible => { - trace_dbg!("piece_pri", player, piece, occk, gpc); + let occk_dbg = occk.clone(); + let occulted = match occk.pri_occulted() { + Some(o) => o, + None => { + trace_dbg!("piece_pri", player, piece, occk_dbg, gpc); return None; } - OccKG::Visible => PriOcculted::Visible(ShowUnocculted(())), - OccKG::Scrambled => PriOcculted::Occulted, - OccKG::Displaced((pos,z)) => PriOcculted::Displaced(pos, z), }; + let vpid = gpl.idmap.fwd_or_insert(piece); trace_dbg!("piece_pri", player, piece, occk_dbg, vpid, occulted, gpc); Some(PieceRenderInstructions { vpid, occulted })