chiark / gitweb /
updates: Provide piece_update_image
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 16:09:46 +0000 (16:09 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 19:51:57 +0000 (19:51 +0000)
This is the actual entrypoint

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/pcrender.rs
src/updates.rs

index 869786385c767ef154109b10ed58b157a167e4b6..ed961ca3c26f08280bfe309dc634f47fce4e7daa 100644 (file)
@@ -129,6 +129,19 @@ impl PieceRenderInstructions {
     r
   }
 
+  #[throws(IE)]
+  pub fn prep_pieceimage(&self, ioccults: &IOccults, gs: &GameState,
+                         gpc: &GPiece, ipc: &IPiece)
+                         -> PreparedPieceImage {
+    let pri = self;
+    let r = PreparedPieceImage {
+      svg        : pri.make_defs(ioccults, gs, gpc, ipc)?,
+      uos        : pri.ui_operations(gpc, ipc)?,
+    };
+    dbgc!(pri, ipc, gpc, r);
+    r
+  }
+
   pub fn angle(&self, gpc: &GPiece) -> VisiblePieceAngle {
     match self.occulted {
       PriOcculted::Visible(_)                            => gpc.angle,
index 78bacdef947ae31984917536110eb5c7381d7cf1..d6513a723b5996544ce1a6e311827e6537499cff 100644 (file)
@@ -727,6 +727,26 @@ impl<'r> PrepareUpdatesBuffer<'r> {
     self.us.push(update);
   }
 
+  #[throws(InternalError)]
+  pub fn piece_update_image(&mut self, piece: PieceId) {
+    // Use this only for updates which do not change the set of valid UOs
+    // or other operations or move the piece etc.
+    let ims = self.piece_update_fallible_players(
+      piece, |_,_,_|(), |_,_|(),
+
+      |ioccults,gs,gpc,ipc,_player,pri| {
+        let im = pri.as_ref().map(|pri| {
+          let im = pri.prep_pieceimage(ioccults,gs,gpc,ipc)?;
+          Ok::<_,IE>(PreparedPieceUpdateGeneral { piece: pri.vpid, op: im })
+        }).transpose()?;
+        Ok::<_,IE>(im)
+      },
+
+      |_gpl| None,
+    )?;
+    PreparedUpdateEntry_Image { ims }
+  }
+
   pub fn piece_updates(&mut self, updates: Vec<(PieceId, PieceUpdateOps)>) {
     for (piece, ops) in updates {
       self.piece_update(piece, ops);