From 707b43736d838436777f53b230e64054ecb244c5 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 6 Apr 2021 01:20:55 +0100 Subject: [PATCH] Track Loaded_via_alias Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 6 ++++-- src/clock.rs | 1 + src/deck.rs | 6 +++++- src/gamestate.rs | 1 + src/global.rs | 1 + src/hand.rs | 6 +++++- src/pcaliases.rs | 4 +++- src/pieces.rs | 6 +++++- src/shapelib.rs | 6 +++++- 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 1b91fa25..eb4a25be 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -763,7 +763,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( xdata: None, moveable: default(), }; - let PieceSpecLoaded { p, occultable } = + let PieceSpecLoaded { p, loaded_via_alias, occultable } = info.load(piece_i as usize, &mut gpc, &ig.pcaliases, &gref)?; if p.nfaces() <= face.into() { throw!(SpecError::FaceNotFound); @@ -775,7 +775,9 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( if gpc.zlevel > gs.max_z { gs.max_z = gpc.zlevel.clone() } let piece = gs.pieces.as_mut(modperm).insert(gpc); let p = IPieceTraitObj::new(p); - ig.ipieces.as_mut(modperm).insert(piece, IPiece { p, occilk }); + ig.ipieces.as_mut(modperm).insert(piece, IPiece { + p, occilk, loaded_via_alias, + }); updates.push((piece, PieceUpdateOp::Insert(()))); pos = (pos + posd)?; } diff --git a/src/clock.rs b/src/clock.rs index 1102c13a..1c84dc2c 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -417,6 +417,7 @@ impl PieceSpec for Spec { PieceSpecLoaded { p: Box::new(clock), + loaded_via_alias: None, occultable: None, } } diff --git a/src/deck.rs b/src/deck.rs index 2e70570c..8009f7e0 100644 --- a/src/deck.rs +++ b/src/deck.rs @@ -62,7 +62,11 @@ impl PieceSpec for piece_specs::Deck { shape, label: self.label.load()?, }) as Box; - PieceSpecLoaded { p, occultable: None } + PieceSpecLoaded { + p, + loaded_via_alias: None, + occultable: None, + } } } diff --git a/src/gamestate.rs b/src/gamestate.rs index bea43416..cb611ca3 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -248,6 +248,7 @@ pub struct ApiPieceOpArgs<'a> { #[derive(Debug)] pub struct PieceSpecLoaded { pub p: Box, + pub loaded_via_alias: Option, pub occultable: PieceSpecLoadedOccultable, } pub type PieceSpecLoadedOccultable = diff --git a/src/global.rs b/src/global.rs index 01126f39..74cc28e1 100644 --- a/src/global.rs +++ b/src/global.rs @@ -69,6 +69,7 @@ pub struct IPlayer { // usual variable: ipl #[derive(Debug,Serialize,Deserialize)] pub struct IPiece { pub p: IPieceTraitObj, + #[serde(default)] pub loaded_via_alias: Option, pub occilk: Option, } deref_to_field!{IPiece, IPieceTraitObj, p} diff --git a/src/hand.rs b/src/hand.rs index 08804fcf..e9de19eb 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -108,7 +108,11 @@ impl piece_specs::OwnedCommon { shape, behaviour, label: self.label.load()?, }) as Box; - PieceSpecLoaded { p, occultable: None } + PieceSpecLoaded { + p, + loaded_via_alias: None, + occultable: None, + } } } diff --git a/src/pcaliases.rs b/src/pcaliases.rs index d32133df..322d9624 100644 --- a/src/pcaliases.rs +++ b/src/pcaliases.rs @@ -59,7 +59,9 @@ impl PieceSpec for Alias { fn load(&self, i: usize, gpc: &mut GPiece, pcaliases: &PieceAliases, ir: &InstanceRef) -> PieceSpecLoaded { - self.resolve(pcaliases)?.load(i, gpc, &default(), ir)? + let mut r = self.resolve(pcaliases)?.load(i, gpc, &default(), ir)?; + r.loaded_via_alias = Some(self.target.clone()); + r } #[throws(SpecError)] fn load_occult(&self, pcaliases: &PieceAliases) diff --git a/src/pieces.rs b/src/pieces.rs index c87f3666..aa70ac68 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -300,7 +300,11 @@ pub trait SimplePieceSpec: Debug { fn load_raw(&self) -> Result<(SimpleShape, &SimpleCommon), SpecError>; #[throws(SpecError)] fn load(&self) -> PieceSpecLoaded { - PieceSpecLoaded { p: Box::new(self.load_raw()?.0), occultable: None } + PieceSpecLoaded { + p: Box::new(self.load_raw()?.0), + loaded_via_alias: None, + occultable: None, + } } } diff --git a/src/shapelib.rs b/src/shapelib.rs index 00708391..29ac74da 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -340,7 +340,11 @@ pub type ItemSpecLoaded = (Box, PieceSpecLoadedOccultable); impl From for PieceSpecLoaded { fn from((p, occultable): ItemSpecLoaded) -> PieceSpecLoaded { - PieceSpecLoaded { p, occultable } + PieceSpecLoaded { + p, + occultable, + loaded_via_alias: None, + } } } -- 2.30.2