From: Ian Jackson Date: Sun, 27 Sep 2020 02:04:39 +0000 (+0100) Subject: wip library-add X-Git-Tag: otter-0.2.0~870 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=73a89b14f50149883f38c2780c53075e34a2da9b;p=otter.git wip library-add Signed-off-by: Ian Jackson --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 9de3b117..0b3f641c 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -615,8 +615,8 @@ mod library_add { #[derive(Debug)] enum Situation { - Poor(Vec), - Good(), + Poor(Vec, &'static str), + Good([Pos; 2]), }; use Situation::*; @@ -634,17 +634,57 @@ mod library_add { face: None, info: Box::new(spec), }; - Poor(vec![ Insn::AddPieces(spec) ]) + Poor(vec![ Insn::AddPieces(spec) ], + "marker(s) created") } else if markers.len() > WANTED { let insns = markers[WANTED..].iter() .map(|p| Insn::DeletePiece(p.piece)) .collect(); - Poor(insns) + Poor(insns, + "surplus marker(s) removed") } else { - Good() + let good : ArrayVec<_> = markers.iter().map(|p| p.pos).collect(); + Good(good.into_inner().unwrap()) }; dbg!(&situation); + #[derive(Debug)] + struct Placement { + top: Coord, + bot: Coord, + rhs: Coord, + lhs: Coord, + cline_upto: Coord, + cline_bottom: Coord, + }; + + let placement = match situation { + Poor(insns, msg) => { + if !args.adjust_markers() { + throw!(anyhow!("only {} markers, wanted {}", + markers.len(), msg)); + } + chan.alter_game(insns, None)?; + println!("updated game: {}\n\ + please adjust markers as desired and run again", + msg); + return Ok(()); + } + Good([a, b]) => { + // todo: take account of the space used by the markers themselves + let lhs = min(a[0], b[0]); + let rhs = max(a[0], b[0]); + let top = min(a[1], b[1]); + let bot = max(a[1], b[1]); + Placement { + lhs, rhs, top, bot, + cline_upto: lhs, + cline_bottom: top, + } + } + }; + dbg!(&placement); + Ok(()) }