last_released: default(),
rotateable: true,
};
- let PieceSpecLoaded { p, occultable } =
+ let SpecLoaded { p, occultable } =
info.load(piece_i as usize, &mut gpc, ig, SpecDepth::zero())?;
if p.nfaces() <= face.into() {
throw!(SpecError::FaceNotFound);
impl PieceSpec for Spec {
#[throws(SpecError)]
fn load(&self, _: usize, gpc: &mut GPiece, _ig: &Instance, _:SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
if self.time <= 0 { throw!(SpecError::NegativeTimeout) }
let clock = Clock {
gpc.xdata_mut(|| State::new(self) )?;
- PieceSpecLoaded {
+ SpecLoaded {
p: Box::new(clock),
occultable: None,
}
impl PieceSpec for Spec {
#[throws(SpecError)]
fn load(&self, _: usize, gpc: &mut GPiece, ig: &Instance, depth: SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
gpc.rotateable = false;
let Spec { ref image, ref currency, qty, min_unit } = *self;
- let SpecLoaded { p: image, occultable:_ } =
+ let SpecLoadedInert { p: image, occultable:_ } =
image.load_inert(ig, depth)?;
let itemname = format!("currency-{}", image.itemname());
impl PieceSpec for piece_specs::Deck {
#[throws(SpecError)]
fn load(&self, _: usize, gpc: &mut GPiece, _ig: &Instance, _:SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
let common = SimpleCommon {
itemname: None,
faces: self.faces.clone(),
shape,
label: self.label.load()?,
}) as Box<dyn PieceTrait>;
- PieceSpecLoaded {
+ SpecLoaded {
p,
occultable: None,
}
impl PieceSpec for Spec {
#[throws(SpecError)]
fn load(&self, _: usize, gpc: &mut GPiece, ig: &Instance, depth: SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
gpc.rotateable = false;
- let SpecLoaded { p: image, occultable: img_occultable } =
+ let SpecLoadedInert { p: image, occultable: img_occultable } =
self.image.load_inert(ig, depth)?;
let mut nfaces: Option<(RawFaceId, &'static str)> = None;
let occultable = match (img_occultable, &self.occult) {
(None, None) => None,
(None, Some(occ)) => {
- let SpecLoaded { p: image, occultable: image_occ_reload } =
+ let SpecLoadedInert { p: image, occultable: image_occ_reload } =
self.image.load_inert(ig, depth)?;
if image_occ_reload.is_some() {
image: image.into()
};
- PieceSpecLoaded {
+ SpecLoaded {
p: Box::new(die) as _,
occultable,
}
}
#[derive(Debug)]
-pub struct SpecLoaded<PT: ?Sized> {
- pub p: Box<PT>,
+pub struct SpecLoaded {
+ pub p: Box<dyn PieceTrait>,
pub occultable: PieceSpecLoadedOccultable,
}
-pub type PieceSpecLoaded = SpecLoaded<dyn PieceTrait>;
+#[derive(Debug)]
+pub struct SpecLoadedInert {
+ pub p: Box<dyn InertPieceTrait>,
+ pub occultable: PieceSpecLoadedOccultable,
+}
+
pub type PieceSpecLoadedOccultable =
Option<(LOccultIlk, Arc<dyn InertPieceTrait>)>;
#[throws(SpecError)]
fn count(&self, _pcaliases: &PieceAliases) -> usize { 1 }
fn load(&self, i: usize, gpc: &mut GPiece, ig: &Instance, depth: SpecDepth)
- -> Result<PieceSpecLoaded, SpecError>;
+ -> Result<SpecLoaded, SpecError>;
/// Used when a piece wants to use another for its occulted form
fn load_inert(&self, _ig: &Instance, _:SpecDepth)
- -> Result<SpecLoaded<dyn InertPieceTrait>, SpecError> {
+ -> Result<SpecLoadedInert, SpecError> {
throw!(SpE::ComplexPieceWhereInertRequired)
}
}
impl piece_specs::OwnedCommon {
#[throws(SpecError)]
- fn load(&self, behaviour: Behaviour) -> PieceSpecLoaded {
+ fn load(&self, behaviour: Behaviour) -> SpecLoaded {
let common = SimpleCommon {
itemname: None,
faces: index_vec![self.colour.clone()],
shape, behaviour,
label: self.label.load()?,
}) as Box<dyn PieceTrait>;
- PieceSpecLoaded {
+ SpecLoaded {
p,
occultable: None,
}
impl PieceSpec for piece_specs::Hand {
#[throws(SpecError)]
fn load(&self, _: usize, gpc: &mut GPiece, _ig: &Instance, _:SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
gpc.moveable = PieceMoveable::IfWresting;
gpc.rotateable = false;
self.c.load(Behaviour::Hand)?
impl PieceSpec for piece_specs::PlayerLabel {
#[throws(SpecError)]
fn load(&self, _: usize, _: &mut GPiece, _ig: &Instance, _:SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
self.c.load(Behaviour::PlayerLabel)?
}
}
}
#[throws(SpecError)]
fn load(&self, i: usize, gpc: &mut GPiece, ig: &Instance, depth: SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
let r = self.resolve(&ig.pcaliases)?
.load(i, gpc, ig, self.new_depth(depth)?)?;
r
}
#[throws(SpecError)]
- fn load_inert(&self, ig: &Instance, depth: SpecDepth)
- -> SpecLoaded<dyn InertPieceTrait> {
+ fn load_inert(&self, ig: &Instance, depth: SpecDepth) -> SpecLoadedInert {
self.resolve(&ig.pcaliases)?.load_inert(ig, self.new_depth(depth)?)?
}
}
impl PieceSpec for $ty {
#[throws(SpecError)]
fn load(&self, _: usize, _: &mut GPiece, _ig: &Instance, _:SpecDepth)
- -> PieceSpecLoaded {
- PieceSpecLoaded {
+ -> SpecLoaded {
+ SpecLoaded {
p: Box::new(self.load_raw()?.0),
occultable: None,
}
}
#[throws(SpecError)]
- fn load_inert(&self, _ig: &Instance, _:SpecDepth)
- -> SpecLoaded<dyn InertPieceTrait> {
- SpecLoaded {
+ fn load_inert(&self, _ig: &Instance, _:SpecDepth) -> SpecLoadedInert {
+ SpecLoadedInert {
p: Box::new(self.load_raw()?.0) as _,
occultable: None
}
pub type ItemSpecLoaded = (Box<Item>, PieceSpecLoadedOccultable);
-impl From<ItemSpecLoaded> for PieceSpecLoaded {
- fn from((p, occultable): ItemSpecLoaded) -> PieceSpecLoaded {
- PieceSpecLoaded {
+impl From<ItemSpecLoaded> for SpecLoaded {
+ fn from((p, occultable): ItemSpecLoaded) -> SpecLoaded {
+ SpecLoaded {
p,
occultable,
}
impl PieceSpec for ItemSpec {
#[throws(SpecError)]
fn load(&self, _: usize, _: &mut GPiece, ig: &Instance, depth: SpecDepth)
- -> PieceSpecLoaded {
+ -> SpecLoaded {
self.find_load(ig,depth)?.into()
}
#[throws(SpecError)]
- fn load_inert(&self, ig: &Instance, depth: SpecDepth)
- -> SpecLoaded<dyn InertPieceTrait> {
+ fn load_inert(&self, ig: &Instance, depth: SpecDepth) -> SpecLoadedInert {
let (p, occultable) = self.find_load(ig,depth)?;
- SpecLoaded { p: p as _, occultable }
+ SpecLoadedInert { p: p as _, occultable }
}
}
#[throws(SpecError)]
fn load(&self, i: usize, _: &mut GPiece, ig: &Instance, depth:SpecDepth)
- -> PieceSpecLoaded
+ -> SpecLoaded
{
let item = self.items.get(i).ok_or_else(
|| SpE::InternalError(format!("item {:?} from {:?}", i, &self))