From: Ian Jackson Date: Sat, 3 Apr 2021 10:43:37 +0000 (+0100) Subject: organise: Set Z levels X-Git-Tag: otter-0.5.0~267 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=0a5757c8d244b8587f93622df931be328517768a;p=otter.git organise: Set Z levels Signed-off-by: Ian Jackson --- diff --git a/src/organise.rs b/src/organise.rs index 88143349..91af5b6f 100644 --- a/src/organise.rs +++ b/src/organise.rs @@ -154,7 +154,9 @@ pub fn ui_operation(a: &mut ApiPieceOpArgs<'_>, opname: &str, let log = log_did_to_piece(ioccults, &gs.occults, gpl,agpc,aipc, "organised")?; - let pieces = gs.pieces.iter().filter_map(|(piece, gpc)| if_chain!{ + let (pieces, mut zlevels) = + gs.pieces.iter().filter_map(|(piece, gpc)| if_chain! + { if region.contains(gpc.pos); if gpc.held.is_none(); if ! gpc.pinned; @@ -163,14 +165,21 @@ pub fn ui_operation(a: &mut ApiPieceOpArgs<'_>, opname: &str, if let Some(vis) = gpc.fully_visible_to(&gs.occults, player); if let Some(bbox) = want!( Ok = ipc.show(vis).bbox_approx(), ?piece ); then { - Some((piece, bbox)) + Some(( + (piece, bbox), + gpc.zlevel.clone()) + ) } else { None } - }).collect::>(); + }).unzip::< + _,_, + IndexVec, + IndexVec, + >(); - // xxx zcoords + zlevels.sort(); let layout = 'laid_out: loop { for att in Attempt::iter() { @@ -198,10 +207,12 @@ pub fn ui_operation(a: &mut ApiPieceOpArgs<'_>, opname: &str, let updates = { let mut updates = Vec::with_capacity(pieces.len()); - for ((piece, _bbox), pos) in izip!(pieces, layout) { + for ((piece, _bbox), pos, zlevel) in izip!(pieces, layout, zlevels) { want_let!{ Some(gpc) = gs.pieces.get_mut(piece); else continue; } gpc.pos = pos; + gpc.zlevel = zlevel; updates.push((piece, PUOs::Simple(PUO::Move(pos)))); + updates.push((piece, PUOs::Simple(PUO::SetZLevel(())))); } updates