clock will want this.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
MGI::AddPieces(PiecesSpec{ pos,posd,count,face,pinned,angle,info }) => {
let (ig_g, modperm, _) = cs.check_acl_modify_pieces(ag, ig)?;
+ let gref = ig_g.gref.clone();
let ig = &mut **ig_g;
let gs = &mut ig.gs;
let implicit: u32 = info.count()
xdata: None,
};
let PieceSpecLoaded { p, occultable } =
- info.load(piece_i as usize, &mut gpc)?;
+ info.load(piece_i as usize, &mut gpc, &gref)?;
if p.nfaces() <= face.into() {
throw!(SpecError::FaceNotFound);
}
#[typetag::serde]
impl PieceSpec for ChessClock {
#[throws(SpecError)]
- fn load(&self, _: usize, gpc: &mut GPiece) -> PieceSpecLoaded {
+ fn load(&self, _: usize, gpc: &mut GPiece, _ir: &InstanceRef)
+ -> PieceSpecLoaded {
if self.time <= 0 { throw!(SpecError::NegativeTimeout) }
let clock = Clock {
#[typetag::serde(tag="type")]
pub trait PieceSpec: Debug {
fn count(&self) -> usize { 1 }
- fn load(&self, i: usize, gpc: &mut GPiece)
+ fn load(&self, i: usize, gpc: &mut GPiece, ir: &InstanceRef)
-> Result<PieceSpecLoaded, SpecError>;
}
#[typetag::serde]
impl PieceSpec for piece_specs::Hand {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+ fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ -> PieceSpecLoaded {
let common = SimpleCommon {
itemname: None,
faces: index_vec![ColourSpec(self.colour.clone())],
#[typetag::serde]
impl PieceSpec for piece_specs::Disc {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+ fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ -> PieceSpecLoaded {
SimplePieceSpec::load(self)?
}
}
#[typetag::serde]
impl PieceSpec for piece_specs::Square {
#[throws(SpecError)]
- fn load(&self, _: usize, _: &mut GPiece) -> PieceSpecLoaded {
+ fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
+ -> PieceSpecLoaded {
SimplePieceSpec::load(self)?
}
}
#[typetag::serde(name="Lib")]
impl PieceSpec for ItemSpec {
- fn load(&self, _: usize, _: &mut GPiece)
+ fn load(&self, _: usize, _: &mut GPiece, _ir: &InstanceRef)
-> Result<PieceSpecLoaded, SpecError> {
self.load()
}
#[typetag::serde(name="LibList")]
impl PieceSpec for MultiSpec {
fn count(&self) -> usize { self.items.len() }
- fn load(&self, i: usize, _: &mut GPiece)
+ fn load(&self, i: usize, _: &mut GPiece, _ir: &InstanceRef)
-> Result<PieceSpecLoaded, SpecError>
{
let item = self.items.get(i).ok_or_else(