player: PlayerId,
piece: PieceId,
p: &'a dyn Piece,
- lens: &'a dyn Lens /* used for LogEntry and PieceId but not Pos */
}
trait ApiPieceOp : Debug {
}
}
-fn log_did_to_piece<L: Lens + ?Sized>(
+fn log_did_to_piece(
occults: &GameOccults,
player: PlayerId,
- gpl: &mut GPlayerState, _lens: &L,
+ gpl: &mut GPlayerState,
piece: PieceId, pc: &PieceState, p: &dyn Piece,
did: &str,
) -> Vec<LogEntry> {
let iplayers = &g.iplayers;
let _ = iplayers.byid(player)?;
let gpl = gs.players.byid(player)?;
- let lens = TransparentLens { };
let piece = vpiece_decode(gs, player, gpl, form.piece)
.ok_or(OE::PieceGone)?;
use ApiPieceOpError::*;
form.op.op(ApiPieceOpArgs {
gs, player, piece,
p: p.as_ref(),
- lens: &lens,
})?;
Ok::<_,ApiPieceOpError>(update)
})() {
Err(ReportViaUpdate(poe)) => {
PrepareUpdatesBuffer::piece_report_error(
&mut ig, poe,
- piece, vec![], POEPP::Unprocessed, client, form.cseq, &lens
+ piece, vec![], POEPP::Unprocessed, client, form.cseq,
)?;
debug!("api_piece_op Err(RVU): {:?}", &form);
},
Err(PartiallyProcessed(poe, logents)) => {
PrepareUpdatesBuffer::piece_report_error(
&mut ig, poe,
- piece, logents, POEPP::Partially, client, form.cseq, &lens
+ piece, logents, POEPP::Partially, client, form.cseq,
)?;
debug!("api_piece_op Err(PP): {:?}", &form);
},
Some((wrc, client, form.cseq)),
Some(1 + log.len()));
- buf.piece_update(piece, ops, &lens);
+ buf.piece_update(piece, ops);
buf.log_updates(log);
debug!("api_piece_op OK: {:?}", &form);
}
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,player,piece,p,lens, .. } = a;
+ let ApiPieceOpArgs { gs,player,piece,p, .. } = a;
let gpl = gs.players.byid_mut(player)?;
let pc = gs.pieces.byid_mut(piece)?;
let update = PieceUpdateOp::ModifyQuiet(());
let logents = log_did_to_piece(
- &gs.occults, player, gpl, lens, piece, pc, p,
+ &gs.occults, player, gpl, piece, pc, p,
"grasped"
);
}
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,player,piece,p,lens, .. } = a;
+ let ApiPieceOpArgs { gs,player,piece,p, .. } = a;
let gpl = gs.players.byid_mut(player).unwrap();
let pc = gs.pieces.byid_mut(piece).unwrap();
let update = PieceUpdateOp::Modify(());
let logents = log_did_to_piece(
- &gs.occults, player, gpl, lens, piece, pc, p,
+ &gs.occults, player, gpl, piece, pc, p,
"released"
);
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,player,piece,p,lens, .. } = a;
+ let ApiPieceOpArgs { gs,player,piece,p, .. } = a;
let pc = gs.pieces.byid_mut(piece).unwrap();
let gpl = gs.players.byid_mut(player).unwrap();
pc.angle = PieceAngle::Compass(self.0);
let logents = log_did_to_piece(
- &gs.occults, player, gpl, lens, piece, pc, p,
+ &gs.occults, player, gpl, piece, pc, p,
"rotated"
);
let update = PieceUpdateOp::Modify(());
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,player,piece,p,lens, .. } = a;
+ let ApiPieceOpArgs { gs,player,piece,p, .. } = a;
let pc = gs.pieces.byid_mut(piece).unwrap();
let gpl = gs.players.byid_mut(player).unwrap();
pc.pinned = self.0;
let update = PieceUpdateOp::Modify(());
let logents = log_did_to_piece(
- &gs.occults, player, gpl, lens, piece, pc, p,
+ &gs.occults, player, gpl, piece, pc, p,
if pc.pinned { "pinned" } else { "unpinned" },
);
(WhatResponseToClientOp::Predictable,
}
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,player,piece,p,lens, .. } = a;
+ let ApiPieceOpArgs { gs,player,piece,p, .. } = a;
'_normal_global_ops__not_loop: loop {
let pc = gs.pieces.byid_mut(piece)?;
let gpl = gs.players.byid_mut(player)?;
wrc,
PieceUpdateOp::Modify(()),
log_did_to_piece(
- &gs.occults, player, gpl, lens, piece, pc, p,
+ &gs.occults, player, gpl, piece, pc, p,
"flipped"
),
).into()
};
}
- p.ui_operation(gs, player, piece, &self.opname, self.wrc, lens)?
+ p.ui_operation(gs, player, piece, &self.opname, self.wrc)?
}
}
error: PieceOpError, piece: PieceId,
logents: Vec<LogEntry>,
partially: PieceOpErrorPartiallyProcessed,
- client: ClientId, cseq: ClientSequence,
- lens: &dyn Lens) -> Result<(),OE> {
+ client: ClientId, cseq: ClientSequence)
+ -> Result<(),OE> {
let by_client = (WRC::Unpredictable, client, cseq);
let mut buf = PrepareUpdatesBuffer::new(ig, Some(by_client), None);
let ops = PUO::Simple(PieceUpdateOp::Modify(()));
let state = buf.piece_update_fallible(
- piece, ops, lens, |pc, gen, _by_client| {
+ piece, ops, |pc, gen, _by_client| {
match partially {
POEPP::Unprocessed => { }
POEPP::Partially => { pc.gen = gen; pc.lastclient = default(); }
pc: &mut PieceState,
p: &Box<dyn Piece>,
op: PieceUpdateOp<(),()>,
- pri: &PieceRenderInstructions,
- _lens: &dyn Lens) -> PreparedPieceUpdate
+ pri: &PieceRenderInstructions)
+ -> PreparedPieceUpdate
{
max_z.update_max(&pc.zlevel.z);
#[throws(InternalError)]
fn piece_update_fallible<GUF>(&mut self, piece: PieceId,
ops: PieceUpdateOps,
- lens: &dyn Lens,
gen_update: GUF)
-> PreparedUpdateEntry_Piece
where GUF: FnOnce(&mut PieceState, Generation, &IsResponseToClientOp)
(Some(pc), Some(p)) => {
let pri = piece_pri(&gs.occults, player, gpl, piece, *pc);
Self::piece_update_player(
- &mut gs.max_z, pc, p, ops, &pri, lens
+ &mut gs.max_z, pc, p, ops, &pri
)?
}
_ => PreparedPieceUpdate {
}
}
- pub fn piece_update(&mut self, piece: PieceId, ops: PieceUpdateOps,
- lens: &dyn Lens) {
+ pub fn piece_update(&mut self, piece: PieceId, ops: PieceUpdateOps) {
// Caller needs us to be infallible since it is too late by
// this point to back out a game state change.
let update = self.piece_update_fallible(
- piece, ops, lens,
+ piece, ops,
|pc, gen, by_client|
{
match *by_client {
})
.map(|update| PUE::Piece(update))
.unwrap_or_else(|e| {
- error!("piece update error! piece={:?} lens={:?} error={:?}",
- piece, &lens, &e);
+ error!("piece update error! piece={:?} error={:?}",
+ piece, &e);
PreparedUpdateEntry::Error(ErrorSignaledViaUpdate::InternalError)
});
self.us.push(update);