let mut ig = iad.gref.lock()?;
ig.save_game_later();
- ToPermute::with(move |to_permute| {
+ ToPermute::with(move |mut to_permute| {
let r = (||{
let g = &mut *ig;
let update =
form.op.op_complex(ApiPieceOpArgs {
ioccults, gs, player, piece, ipieces, ipc,
+ to_permute: &mut to_permute,
})?;
Ok::<_,ApiPieceOpError>(update)
})() {
as:
#[throws(ApiPieceOpError)]
fn op(&self, a: ApiPieceOpArgs) -> PieceUpdate {
- let ApiPieceOpArgs { gs,ioccults,player,piece,ipc,ipieces, .. } = a;
+ let ApiPieceOpArgs {
+ gs,ioccults,player,piece,ipc,ipieces,to_permute, ..
+ } = a;
let gpl = gs.players.byid_mut(player).unwrap();
let gpc = gs.pieces.byid_mut(piece).unwrap();
gs,
who_by,
ipieces,
+ to_permute,
piece,
vanilla,
).map_err(|e| OnlineError::from(e))?;
fn ui_operation(&self, a: ApiPieceOpArgs<'_>,
opname: &str, wrc: WhatResponseToClientOp)
-> UpdateFromOpComplex {
- let ApiPieceOpArgs { gs,player,piece,ipieces,.. } = a;
+ let ApiPieceOpArgs { gs,player,piece,ipieces,to_permute,.. } = a;
let gen = &mut gs.gen;
let gplayers = &mut gs.players;
let gpieces = &mut gs.pieces;
let xupdates =
create_occultation(&mut gen.unique_gen(),
gplayers, gpieces, goccults, ipieces,
+ to_permute,
region, piece, views)?;
dbgc!("creating occ done", &new_owner, &xupdates);
gs: &mut GameState,
who_by: Html,
ipieces: &IPieces,
+ to_permute: &mut ToPermute,
piece: PieceId,
(vanilla_wrc, vanilla_op, vanilla_log): PUFOS,
)
-> PieceUpdate
{
- ToPermute::with(|mut to_permute| (
recalculate_occultation_general(
&mut gs.gen.unique_gen(),
- &gs.players, &mut gs.pieces, &mut gs.occults, ipieces, &mut to_permute,
+ &gs.players, &mut gs.pieces, &mut gs.occults, ipieces, to_permute,
piece, vanilla_log,
|log| (vanilla_wrc, vanilla_op, log).into(),
|old, new, show| vec![ LogEntry { html: Html(format!(
ops: PieceUpdateOps::PerPlayer(puos),
log
}
- ),
- to_permute.implement(&mut gs.players,
- &mut gs.pieces, &mut gs.occults,
- ipieces),
- ))?
+ )?
}
#[throws(IE)]
gpieces: &mut GPieces,
goccults: &mut GameOccults,
ipieces: &IPieces,
+ to_permute: &mut ToPermute,
region: Area,
occulter: PieceId,
views: OccultationViews,
let occid = goccults.occults.insert(occultation);
let mut updates = vec![];
- ToPermute::with(|mut to_permute| (
+ (|| (
(||{
let ogpc = gpieces.get_mut(occulter).ok_or_else(
||internal_logic_error("occulter vanished"))?;
for &ppiece in &recalc {
recalculate_occultation_ofmany(gen,
gplayers, gpieces, goccults, ipieces,
- &mut to_permute,
+ to_permute,
ppiece, &mut updates)?;
}
ogpc.occult.active = None;
goccults.occults.remove(occid).expect("inserted this earlier");
e
- }),
- to_permute.implement(gplayers, gpieces, goccults, ipieces),
- ))?;
+ })
+ ))()?;
dbgc!(&updates);
updates
gpieces: &mut GPieces,
goccults: &mut GameOccults,
ipieces: &IPieces,
+ to_permute: &mut ToPermute,
occulter: PieceId,
) -> Vec<(PieceId, PieceUpdateOps)> {
let mut aggerr = AggregatedIE::new();
let mut updates = vec![];
- ToPermute::with(|mut to_permute| ({
let pieces: Vec<PieceId> = if let Some(o) = &occultation {
o.notches.iter().collect()
} else {
for &ppiece in pieces.iter() {
recalculate_occultation_ofmany(gen,
gplayers, gpieces, goccults, ipieces,
- &mut to_permute,
+ to_permute,
ppiece, &mut updates)
.unwrap_or_else(|e| {
aggerr.record(e);
} else {
aggerr.record(internal_logic_error("removing occultation of non-piece"));
}
- },
- to_permute.implement(gplayers, gpieces, goccults, ipieces),
- ));
aggerr.ok()?;