chiark / gitweb /
Pass PieceTrait to piece_pri
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Feb 2021 16:24:32 +0000 (16:24 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Feb 2021 16:24:32 +0000 (16:24 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/api.rs
daemon/session.rs
src/hidden.rs
src/updates.rs

index 52265d8644251d5940ded6b3c10aced82a3226b0..986de7f33dc93485113c57397ea67a1cc9035613 100644 (file)
@@ -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;
index d3fcc68c42402bd75fb9f52a0bc7ac51e736ca05..b3246ad950ca1aaba5fe951b17d70486dae66c42 100644 (file)
@@ -114,7 +114,7 @@ fn session_inner(form: Json<SessionForm>,
       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)?;
index 208cc08148164c16076b422ce7e88ab9cbc339a1..388aef191a5d580ae0ef8d6c307d1bad34f152e9 100644 (file)
@@ -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<dyn PieceTrait + 'p>>(
+  occults: &GameOccults,
+  player: PlayerId, gpl: &mut GPlayer,
+  piece: PieceId, gpc: &GPiece, p: &P,
+) -> Option<PieceRenderInstructions>
+{
+fn inner(
   _occults: &GameOccults, // xxx
-  player: PlayerId,
-  gpl: &mut GPlayer,
-  piece: PieceId,
-  gpc: &GPiece,
-) -> Option<PieceRenderInstructions> {
+  player: PlayerId, gpl: &mut GPlayer,
+  piece: PieceId, gpc: &GPiece, _p: &dyn PieceTrait,
+) -> Option<PieceRenderInstructions>
+{
   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
index 8e7c38e7d29979d9baf15527c17822dea7e42272..20a9e54a66e0b64863131541865ec1ee78b695de 100644 (file)
@@ -208,7 +208,7 @@ pub fn log_did_to_piece_whoby(
   did: &str,
 ) -> (Vec<LogEntry>, Option<Html>) {
   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
           )?