chiark / gitweb /
Track Loaded_via_alias
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 6 Apr 2021 00:20:55 +0000 (01:20 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 6 Apr 2021 19:22:04 +0000 (20:22 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/clock.rs
src/deck.rs
src/gamestate.rs
src/global.rs
src/hand.rs
src/pcaliases.rs
src/pieces.rs
src/shapelib.rs

index 1b91fa2509c9e3cbde0d1a993d334a25f7c1925e..eb4a25be1136cc3ae251de218d67a73f58f4f017 100644 (file)
@@ -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)?;
       }
index 1102c13aa703050ee241f0c34453a74c9f04de7f..1c84dc2ca6ff8adbfffcb04c96bc1ac0a318d91d 100644 (file)
@@ -417,6 +417,7 @@ impl PieceSpec for Spec {
 
     PieceSpecLoaded {
       p: Box::new(clock),
+      loaded_via_alias: None,
       occultable: None,
     }
   }
index 2e70570c819ca34782370855c66caf11bb45e911..8009f7e0efcd732f735246df44f013f572adb847 100644 (file)
@@ -62,7 +62,11 @@ impl PieceSpec for piece_specs::Deck {
       shape,
       label: self.label.load()?,
     }) as Box<dyn PieceTrait>;
-    PieceSpecLoaded { p, occultable: None }
+    PieceSpecLoaded {
+      p,
+      loaded_via_alias: None,
+      occultable: None,
+    }
   }
 }
 
index bea43416617ceaf8f9f8b9c16ec932a548440bcb..cb611ca3a08a9c959bd2da875095529fd6418cc5 100644 (file)
@@ -248,6 +248,7 @@ pub struct ApiPieceOpArgs<'a> {
 #[derive(Debug)]
 pub struct PieceSpecLoaded {
   pub p: Box<dyn PieceTrait>,
+  pub loaded_via_alias: Option<String>,
   pub occultable: PieceSpecLoadedOccultable,
 }
 pub type PieceSpecLoadedOccultable =
index 01126f391977fac9666037a3be58d5a4223f28fc..74cc28e1ef9d24cfa1f8235e4bdc2259732a5299 100644 (file)
@@ -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<String>,
   pub occilk: Option<OccultIlkOwningId>,
 }
 deref_to_field!{IPiece, IPieceTraitObj, p}
index 08804fcfefdca070e9159e6df0a0ce002c3607af..e9de19eb2dcb75ab78c02010c303631a0efc7f19 100644 (file)
@@ -108,7 +108,11 @@ impl piece_specs::OwnedCommon {
       shape, behaviour,
       label: self.label.load()?,
     }) as Box<dyn PieceTrait>;
-    PieceSpecLoaded { p, occultable: None }
+    PieceSpecLoaded {
+      p,
+      loaded_via_alias: None,
+      occultable: None,
+    }
   }
 }
 
index d32133dfe4c1229ac5deeb070530bc744885e6fa..322d9624b57fa73430c6a4e62c117be5006cb1f0 100644 (file)
@@ -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)
index c87f366613540b552841e7273b852c794352ef0b..aa70ac68a33fd56e5edcc22b9031fae209caaa71 100644 (file)
@@ -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,
+    }
   }
 }
 
index 00708391cbd5cf78ec6a4974ba49d1db685e9968..29ac74dae34ac31284b5e46e203ce47a451b9724 100644 (file)
@@ -340,7 +340,11 @@ pub type ItemSpecLoaded = (Box<Item>, PieceSpecLoadedOccultable);
 
 impl From<ItemSpecLoaded> for PieceSpecLoaded {
   fn from((p, occultable):  ItemSpecLoaded) -> PieceSpecLoaded {
-    PieceSpecLoaded { p, occultable }
+    PieceSpecLoaded {
+      p,
+      occultable,
+      loaded_via_alias: None,
+    }
   }
 }