impl op::Simple as {
#[throws(ApiPieceOpError)]
- fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
+ fn op(&self, mut a: ApiPieceOpArgs) -> PieceUpdate {
+ let pri = a.pri()?;
let ApiPieceOpArgs { gs,ioccults,player,piece,ipc, .. } = a;
let gpc = gs.pieces.byid_mut(piece)?;
let players = &mut gs.players;
let was = was.map(|was| htmlescape::encode_minimal(&was.nick));
let gpl = players.byid_mut(player)?;
- let pri = piece_pri(ioccults, &gs.occults, player, gpl, piece, gpc, ipc)
- .ok_or(Ia::PieceGone)?;
let pcs = pri.describe(ioccults,&gs.occults, gpc, ipc);
impl op::Complex as {
#[throws(ApiPieceOpError)]
fn op_complex(&self, mut a: ApiPieceOpArgs) -> UpdateFromOpComplex {
+ let pri = a.pri()?;
let ApiPieceOpArgs { ioccults,player,piece,ipc, .. } = a;
let gs = &mut a.gs;
- let pri = piece_pri(ioccults, &gs.occults,
- player, gs.players.byid_mut(player)?,
- piece, gs.pieces.byid(piece)?,
- ipc)
- .ok_or(Ia::PieceGone)?;
let y = pri.fully_visible().ok_or(Ia::Occultation)?;
'_normal_global_ops__not_loop: loop {
fn from(pote: PosOffTableError<T>) -> MgmtError { ME::BadSpec(pote.into()) }
}
+// ---------- ApiPieceOpArgs ----------
+
+impl ApiPieceOpArgs<'_> {
+ #[throws(ApiPieceOpError)]
+ pub fn pri(&mut self) -> PieceRenderInstructions {
+ let ApiPieceOpArgs { gs,ioccults,player,piece,ipc, .. } = self;
+ let gpc = gs.pieces.byid(*piece)?;
+ let gpl = gs.players.byid_mut(*player)?;
+ piece_pri(ioccults, &gs.occults, *player, gpl, *piece, gpc, ipc)
+ .ok_or(Ia::PieceGone)?
+ }
+}
+
// ---------- game state - rendering etc. ----------
impl GPiece {