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);
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)?;
}
PieceSpecLoaded {
p: Box::new(clock),
+ loaded_via_alias: None,
occultable: None,
}
}
shape,
label: self.label.load()?,
}) as Box<dyn PieceTrait>;
- PieceSpecLoaded { p, occultable: None }
+ PieceSpecLoaded {
+ p,
+ loaded_via_alias: None,
+ occultable: None,
+ }
}
}
#[derive(Debug)]
pub struct PieceSpecLoaded {
pub p: Box<dyn PieceTrait>,
+ pub loaded_via_alias: Option<String>,
pub occultable: PieceSpecLoadedOccultable,
}
pub type PieceSpecLoadedOccultable =
#[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}
shape, behaviour,
label: self.label.load()?,
}) as Box<dyn PieceTrait>;
- PieceSpecLoaded { p, occultable: None }
+ PieceSpecLoaded {
+ p,
+ loaded_via_alias: None,
+ occultable: None,
+ }
}
}
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)
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,
+ }
}
}
impl From<ItemSpecLoaded> for PieceSpecLoaded {
fn from((p, occultable): ItemSpecLoaded) -> PieceSpecLoaded {
- PieceSpecLoaded { p, occultable }
+ PieceSpecLoaded {
+ p,
+ occultable,
+ loaded_via_alias: None,
+ }
}
}