let gref = ig_g.gref.clone();
let ig = &mut **ig_g;
let gs = &mut ig.gs;
- let implicit: u32 = info.count()
+ let implicit: u32 = info.count(&ig.pcaliases)
.try_into().map_err(
|_| SpE::InternalError(format!("implicit item count out of range"))
)?;
moveable: default(),
};
let PieceSpecLoaded { p, occultable } =
- info.load(piece_i as usize, &mut gpc, &gref)?;
+ info.load(piece_i as usize, &mut gpc, &ig.pcaliases, &gref)?;
if p.nfaces() <= face.into() {
throw!(SpecError::FaceNotFound);
}
}
const SEVERAL: usize = 3;
+ let pcaliases = default();
impl Prep {
fn want_several(&self) -> bool {
let mut pieces: Vec<Prep> = items.into_iter().map(|it| {
let spec = ItemSpec { lib: it.0, item: it.1.itemname };
(||{
- let (p, _occultable) = spec.clone().find_load().context("load")?;
+ let (p, _occultable) = spec.clone().find_load(&pcaliases)
+ .context("load")?;
// todo show occulted version too
let mut uos = vec![];
p.add_ui_operations(&mut uos, &GameState::dummy(), &GPiece::dummy())
#[typetag::serde(name="ChessClock")]
impl PieceSpec for Spec {
#[throws(SpecError)]
- fn load(&self, _: usize, gpc: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, gpc: &mut GPiece,
+ _pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
if self.time <= 0 { throw!(SpecError::NegativeTimeout) }
#[typetag::serde(name="PickupDeck")]
impl PieceSpec for piece_specs::Deck {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, _: &mut GPiece,
+ _pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
let common = SimpleCommon {
itemname: None,
#[typetag::serde(tag="type")]
pub trait PieceSpec: Debug + Sync + Send + 'static {
- fn count(&self) -> usize { 1 }
- fn load(&self, i: usize, gpc: &mut GPiece, ir: &InstanceRef)
+ fn count(&self, _pcaliases: &PieceAliases) -> usize { 1 }
+ fn load(&self, i: usize, gpc: &mut GPiece,
+ pcaliases: &PieceAliases, ir: &InstanceRef)
-> Result<PieceSpecLoaded, SpecError>;
- fn load_occult(&self) -> Result<Box<dyn OccultedPieceTrait>, SpecError> {
+ fn load_occult(&self, _pcaliases: &PieceAliases)
+ -> Result<Box<dyn OccultedPieceTrait>, SpecError> {
throw!(SpE::ComplexPieceWhereSimpleRequired)
}
}
#[typetag::serde]
impl PieceSpec for piece_specs::Hand {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, _: &mut GPiece,
+ _pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
let common = SimpleCommon {
itemname: None,
#[typetag::serde]
impl PieceSpec for piece_specs::Disc {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, _: &mut GPiece,
+ _pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
SimplePieceSpec::load(self)?
}
#[typetag::serde]
impl PieceSpec for piece_specs::Rect {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, _: &mut GPiece,
+ _pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
SimplePieceSpec::load(self)?
}
impl ItemSpec {
#[throws(SpecError)]
- pub fn find_load(&self) -> ItemSpecLoaded {
+ pub fn find_load(&self, pcaliases: &PieceAliases) -> ItemSpecLoaded {
let lib = libs_lookup(&self.lib)?;
let idata = lib.items.get(&self.item)
.ok_or(SpE::LibraryItemNotFound(self.item.clone()))?;
- lib.load1(idata, &self.item)?
+ lib.load1(idata, &self.item, pcaliases)?
}
}
}
#[throws(SpecError)]
- fn load1(&self, idata: &ItemData, name: &str) -> ItemSpecLoaded {
+ fn load1(&self, idata: &ItemData, name: &str, pcaliases: &PieceAliases)
+ -> ItemSpecLoaded {
let svg_data = self.load_svg(name, name)?;
idata.group.d.outline.check(&idata.group)
face.xform.scale[0] *= -1.;
faces.push(face);
} else if let Some(back_spec) = &idata.group.d.back {
- let p = back_spec.load_occult()?;
+ let p = back_spec.load_occult(pcaliases)?;
let p = p.into();
back = Some(p);
}
let mut out = vec![];
for (k,v) in &self.items {
if !pat.matches(&k) { continue }
- let (loaded, _) = match self.load1(v, &k) {
+ let (loaded, _) = match self.load1(v, &k, &default()) {
Err(SpecError::LibraryItemNotFound(_)) => continue,
e@ Err(_) => e?,
Ok(r) => r,
#[typetag::serde(name="Lib")]
impl PieceSpec for ItemSpec {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, _: usize, _: &mut GPiece,
+ pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded {
- self.find_load()?.into()
+ self.find_load(pcaliases)?.into()
}
#[throws(SpecError)]
- fn load_occult(&self) -> Box<dyn OccultedPieceTrait> {
- self.find_load()?.0 as Box<dyn OccultedPieceTrait>
+ fn load_occult(&self, pcaliases: &PieceAliases)
+ -> Box<dyn OccultedPieceTrait> {
+ self.find_load(pcaliases)?.0 as Box<dyn OccultedPieceTrait>
}
}
#[typetag::serde(name="LibList")]
impl PieceSpec for MultiSpec {
- fn count(&self) -> usize { self.items.len() }
+ fn count(&self, _pcaliases: &PieceAliases) -> usize { self.items.len() }
#[throws(SpecError)]
- fn load(&self, i: usize, _: &mut GPiece, _ir: &InstanceRef)
+ fn load(&self, i: usize, _: &mut GPiece,
+ pcaliases: &PieceAliases, _ir: &InstanceRef)
-> PieceSpecLoaded
{
let item = self.items.get(i).ok_or_else(
)?;
let item = format!("{}{}{}", &self.prefix, item, &self.suffix);
let lib = self.lib.clone();
- ItemSpec { lib, item }.find_load()?.into()
+ ItemSpec { lib, item }.find_load(pcaliases)?.into()
}
}