From: Ian Jackson Date: Sun, 28 Feb 2021 16:24:32 +0000 (+0000) Subject: Pass PieceTrait to piece_pri X-Git-Tag: otter-0.4.0~268 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9d498265e911625989e26c09996594769289f92a;p=otter.git Pass PieceTrait to piece_pri Signed-off-by: Ian Jackson --- diff --git a/daemon/api.rs b/daemon/api.rs index 52265d86..986de7f3 100644 --- a/daemon/api.rs +++ b/daemon/api.rs @@ -267,7 +267,7 @@ api_route!{ let was = was.map(|was| htmlescape::encode_minimal(&was.nick)); let gpl = players.byid_mut(player)?; - let pri = piece_pri(&gs.occults, player, gpl, piece, gpc) + let pri = piece_pri(&gs.occults, player, gpl, piece, gpc, &p) .ok_or(OE::PieceGone)?; let pcs = pri.describe(gpc, &p).0; diff --git a/daemon/session.rs b/daemon/session.rs index d3fcc68c..b3246ad9 100644 --- a/daemon/session.rs +++ b/daemon/session.rs @@ -114,7 +114,7 @@ fn session_inner(form: Json, let p = if let Some(pto) = ig.ipieces.get(piece) { pto } else { continue /* was deleted */ }; - let pri = piece_pri(&ig.gs.occults, player, gpl, piece, gpc); + let pri = piece_pri(&ig.gs.occults, player, gpl, piece, gpc, p); let pri = if let Some(pri) = pri { pri } else { continue /*invisible*/}; let defs = pri.make_defs(gpc, p)?; diff --git a/src/hidden.rs b/src/hidden.rs index 208cc081..388aef19 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -174,13 +174,18 @@ impl PerPlayerIdMap { // ========== public entrypoints ========== /// None => do not render at all -pub fn piece_pri( +pub fn piece_pri<'p, P:Borrow>( + occults: &GameOccults, + player: PlayerId, gpl: &mut GPlayer, + piece: PieceId, gpc: &GPiece, p: &P, +) -> Option +{ +fn inner( _occults: &GameOccults, // xxx - player: PlayerId, - gpl: &mut GPlayer, - piece: PieceId, - gpc: &GPiece, -) -> Option { + player: PlayerId, gpl: &mut GPlayer, + piece: PieceId, gpc: &GPiece, _p: &dyn PieceTrait, +) -> Option +{ let vpid = gpl.idmap.fwd_or_insert(piece); let angle = gpc.angle; let occluded = PriOccluded::Visible; // xxx @@ -188,6 +193,8 @@ pub fn piece_pri( player, piece, vpid, angle); Some(PieceRenderInstructions { vpid, occluded }) } + inner(occults, player, gpl, piece, gpc, p.borrow()) +} pub fn piece_at_all_occluded( _occults: &GameOccults, // xxx diff --git a/src/updates.rs b/src/updates.rs index 8e7c38e7..20a9e54a 100644 --- a/src/updates.rs +++ b/src/updates.rs @@ -208,7 +208,7 @@ pub fn log_did_to_piece_whoby( did: &str, ) -> (Vec, Option) { let who_by = Html(htmlescape::encode_minimal(&gpl.nick)); - let pri = piece_pri(occults, player, gpl, piece, gpc) + let pri = piece_pri(occults, player, gpl, piece, gpc, &p) .ok_or(OE::PieceGone)?; let log = vec![ LogEntry { html: Html(format!( @@ -547,7 +547,7 @@ impl<'r> PrepareUpdatesBuffer<'r> { }; let op = match (&mut gpc, p) { (Some(gpc), Some(p)) => { - let pri = piece_pri(&gs.occults, player, gpl, piece, *gpc); + let pri = piece_pri(&gs.occults, player, gpl, piece, *gpc, p); Self::piece_update_player( &mut gs.max_z, gpc, p, ops, &pri )?