From 166e8433ea5435e6deaaf1a1d5b0411c627d39d8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 20 Mar 2021 01:09:05 +0000 Subject: [PATCH] Plumb &InstanceRef through to load() clock will want this. Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 3 ++- src/clock.rs | 3 ++- src/gamestate.rs | 2 +- src/hand.rs | 3 ++- src/pieces.rs | 6 ++++-- src/shapelib.rs | 4 ++-- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 5c4c4bce..30d94cb0 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -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); } diff --git a/src/clock.rs b/src/clock.rs index b66e2fa8..6fb9cd82 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -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 { diff --git a/src/gamestate.rs b/src/gamestate.rs index e747e43b..56b35c07 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -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; } diff --git a/src/hand.rs b/src/hand.rs index 8b9cc7f7..d60b85f1 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -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())], diff --git a/src/pieces.rs b/src/pieces.rs index 6ed3846c..72296026 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -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)? } } diff --git a/src/shapelib.rs b/src/shapelib.rs index 9e5d5dd5..399c2a8c 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -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 { 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 { let item = self.items.get(i).ok_or_else( -- 2.30.2