if let Some(ipc) = ig.ipieces.get(piece);
let visible = if ! piece_at_all_occulted(gpc) {
// todo: something more sophisticated would be nice
- let pri = PieceRenderInstructions::new_visible(
- // visible id is internal one here
- VisiblePieceId(piece.data())
+ let (pri, unocc_ok) = (
+ PieceRenderInstructions::new_visible(
+ // visible id is internal one here
+ VisiblePieceId(piece.data())
+ ),
+ ShowUnocculted::new_visible(),
);
let bbox = ipc.p.bbox_approx()?;
let desc_html = pri.describe(ioccults, gpc, ipc);
- Some(MgmtGamePieceVisibleInfo {
+ Some((MgmtGamePieceVisibleInfo {
pos, face, desc_html, bbox
- })
+ }, unocc_ok))
} else {
None
};
- let itemname = ipc.p.itemname().to_string();
+ let itemname = if let Some((_,unocc_ok)) = visible {
+ ipc.p.itemname(unocc_ok).to_string()
+ } else {
+ "occulted-item".to_string()
+ };
then {
Some(MgmtGamePieceInfo {
- piece, itemname,
- visible
+ piece,
+ itemname,
+ visible: visible.map(|v| v.0)
})
} else {
None
ExecuteGameChangeUpdates{ pcs: vec![], log: vec![], raw: None }
}
- fn itemname(&self) -> &str;
+ fn itemname(&self, _y: ShowUnocculted) -> &str;
}
#[typetag::serde]
}
fn nfaces(&self) -> RawFaceId { self.count_faces().try_into().unwrap() }
- fn itemname(&self) -> &str { self.itemname() }
+ fn itemname(&self, y: ShowUnocculted) -> &str { self.itemname(y) }
}
impl<Desc, Outl:'static> GenericSimpleShape<Desc, Outl>
pub fn count_faces(&self) -> usize {
max(self.colours.len(), self.edges.len())
}
- pub fn itemname(&self) -> &str { &self.itemname }
+ pub fn itemname(&self, _: ShowUnocculted) -> &str { &self.itemname }
#[throws(SpecError)]
pub fn new(desc: Desc, outline: Outl,
self.descs[ self.faces[gpc.face].desc ].clone()
}
- fn itemname(&self) -> &str { &self.itemname }
+ fn itemname(&self, _: ShowUnocculted) -> &str { &self.itemname }
}
static SHAPELIBS: RwLock<Option<Registry>> = const_rwlock(None);