chiark / gitweb /
Plumb &InstanceRef through to load()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 01:09:05 +0000 (01:09 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 20:12:41 +0000 (20:12 +0000)
clock will want this.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/clock.rs
src/gamestate.rs
src/hand.rs
src/pieces.rs
src/shapelib.rs

index 5c4c4bce094fe4b1a1f5855892ceb6489505e13a..30d94cb05cb0744813b68e4055765a2d7d8a5242 100644 (file)
@@ -627,6 +627,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
 
     MGI::AddPieces(PiecesSpec{ pos,posd,count,face,pinned,angle,info }) => {
       let (ig_g, modperm, _) = cs.check_acl_modify_pieces(ag, ig)?;
+      let gref = ig_g.gref.clone();
       let ig = &mut **ig_g;
       let gs = &mut ig.gs;
       let implicit: u32 = info.count()
@@ -671,7 +672,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
           xdata: None,
         };
         let PieceSpecLoaded { p, occultable } =
-          info.load(piece_i as usize, &mut gpc)?;
+          info.load(piece_i as usize, &mut gpc, &gref)?;
         if p.nfaces() <= face.into() {
           throw!(SpecError::FaceNotFound);
         }
index b66e2fa80f2767d22b0d7ea09fe8231be1d75d74..6fb9cd8218d70f66250755f2858ef86065667932 100644 (file)
@@ -205,7 +205,8 @@ const OUTLINE: Rectangle = Rectangle { xy: PosC([W as f64, H as f64]) };
 #[typetag::serde]
 impl PieceSpec for ChessClock {
   #[throws(SpecError)]
-  fn load(&self, _: usize, gpc: &mut GPiece) -> PieceSpecLoaded {
+  fn load(&self, _: usize, gpc: &mut GPiece, _ir: &InstanceRef)
+          -> PieceSpecLoaded {
     if self.time <= 0 { throw!(SpecError::NegativeTimeout) }
 
     let clock = Clock {
index e747e43bda7d217a5c75c0dd4928d407fb2a9c05..56b35c076b336ba850bcb4e528763752e12dec00 100644 (file)
@@ -188,7 +188,7 @@ pub struct PieceSpecLoaded {
 #[typetag::serde(tag="type")]
 pub trait PieceSpec: Debug {
   fn count(&self) -> usize { 1 }
-  fn load(&self, i: usize, gpc: &mut GPiece)
+  fn load(&self, i: usize, gpc: &mut GPiece, ir: &InstanceRef)
           -> Result<PieceSpecLoaded, SpecError>;
 }
 
index 8b9cc7f7ae0c5e469fd5132ba6a9c4cf82ff1eda..d60b85f1c95bffa4113a8a793eaeb9d03b2a7eb5 100644 (file)
@@ -51,7 +51,8 @@ impl OutlineTrait for Hand {
 #[typetag::serde]
 impl PieceSpec for piece_specs::Hand {
   #[throws(SpecError)]
-  fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+  fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+          -> PieceSpecLoaded {
     let common = SimpleCommon {
       itemname: None,
       faces: index_vec![ColourSpec(self.colour.clone())],
index 6ed3846c3541990ee92101d7975da4712ddbd69c..72296026999e5cda255970370dac6ecce9306ba1 100644 (file)
@@ -257,7 +257,8 @@ impl SimplePieceSpec for piece_specs::Disc {
 #[typetag::serde]
 impl PieceSpec for piece_specs::Disc {
   #[throws(SpecError)]
-  fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+  fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+          -> PieceSpecLoaded {
     SimplePieceSpec::load(self)?
   }
 }
@@ -290,7 +291,8 @@ impl SimplePieceSpec for piece_specs::Square {
 #[typetag::serde]
 impl PieceSpec for piece_specs::Square {
   #[throws(SpecError)]
-  fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+  fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+          -> PieceSpecLoaded {
     SimplePieceSpec::load(self)?
   }
 }
index 9e5d5dd5ab9323746f2587efa682d8a74471cf50..399c2a8ca1d4ae5011ee472d35543c3535c8712d 100644 (file)
@@ -364,7 +364,7 @@ impl Contents {
 
 #[typetag::serde(name="Lib")]
 impl PieceSpec for ItemSpec {
-  fn load(&self, _: usize, _: &mut GPiece)
+  fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
           -> Result<PieceSpecLoaded, SpecError> {
     self.load()
   }
@@ -373,7 +373,7 @@ impl PieceSpec for ItemSpec {
 #[typetag::serde(name="LibList")]
 impl PieceSpec for MultiSpec {
   fn count(&self) -> usize { self.items.len() }
-  fn load(&self, i: usize, _: &mut GPiece)
+  fn load(&self, i: usize, _: &mut GPiece, _ir: &InstanceRef)
           -> Result<PieceSpecLoaded, SpecError>
   {
     let item = self.items.get(i).ok_or_else(