From: Ian Jackson Date: Mon, 15 Mar 2021 18:42:10 +0000 (+0000) Subject: Refactor to introduce GPiece::fully_visible_to_everyone X-Git-Tag: otter-0.4.0~25 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=92ddf06a4334864045e3e69291b4736492360a10;p=otter.git Refactor to introduce GPiece::fully_visible_to_everyone Signed-off-by: Ian Jackson --- diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 435ceeb2..d5337168 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -381,7 +381,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( let (mut ig, _) = cs.check_acl(&ag, ig, PCH::Instance, &[TP::Play])?; let mut buf = PrepareUpdatesBuffer::new(&mut ig, None, None); let gen = buf.gen(); - drop(buf); // does update + drop(buf); // does updatenocc (U{ pcs: vec![], // we handled the update ourselves, log: vec![], // return no update info raw: None }, @@ -395,25 +395,23 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( |(piece,gpc)| (|| Ok::<_,MgmtError>(if_chain!{ let &GPiece { pos, face, .. } = gpc; if let Some(ipc) = ig.ipieces.get(piece); - let visible = if ! piece_at_all_occulted(gpc) { + let unocc = gpc.fully_visible_to_everyone(); + let visible = if let Some(_) = unocc { // todo: something more sophisticated would be nice - let (pri, unocc_ok) = ( - PieceRenderInstructions::new_visible( - // visible id is internal one here - VisiblePieceId(piece.data()) - ), - ShowUnocculted::new_visible(), + let pri = PieceRenderInstructions::new_visible( + // visible id is internal one here + VisiblePieceId(piece.data()) ); let bbox = ipc.p.bbox_approx()?; let desc_html = pri.describe(ioccults, gpc, ipc); - Some((MgmtGamePieceVisibleInfo { + Some(MgmtGamePieceVisibleInfo { pos, face, desc_html, bbox - }, unocc_ok)) + }) } else { None }; - let itemname = if let Some((_,unocc_ok)) = visible { - ipc.p.itemname(unocc_ok).to_string() + let itemname = if let Some(unocc) = unocc { + ipc.p.itemname(unocc).to_string() } else { "occulted-item".to_string() }; @@ -421,7 +419,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( Some(MgmtGamePieceInfo { piece, itemname, - visible: visible.map(|v| v.0) + visible, }) } else { None diff --git a/src/hidden.rs b/src/hidden.rs index a59d5c17..c94f3337 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -221,9 +221,15 @@ impl PieceRenderInstructions { } } -pub fn piece_at_all_occulted(gpc: &GPiece) -> bool { - gpc.occult.passive.is_some() +impl GPiece { + pub fn fully_visible_to_everyone(&self) -> Option { + match self.occult.passive { + Some(_) => None, + None => Some(ShowUnocculted(())), + } + } } + pub fn piece_involved_in_occultation(gpc: &GPiece) -> bool { gpc.occult.passive.is_some() || gpc.occult.active.is_some()