From: Ian Jackson Date: Sat, 13 Mar 2021 16:54:45 +0000 (+0000) Subject: at-otter: Attempt to track pieces from bob's pov X-Git-Tag: otter-0.4.0~112 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=07c58a7079b61114de1bb649a921bde2ee3035cf;p=otter.git at-otter: Attempt to track pieces from bob's pov Signed-off-by: Ian Jackson --- diff --git a/apitest/at-otter.rs b/apitest/at-otter.rs index f46c2b39..bd88ba82 100644 --- a/apitest/at-otter.rs +++ b/apitest/at-otter.rs @@ -397,6 +397,7 @@ impl Ctx { self.su_mut().mgmt_conn.fakerng_load(&[&"1"])?; let a_pieces = alice.pieces::()?; + let mut b_pieces = alice.pieces::()?; let [hand] = a_pieces.iter().enumerate() .filter(|(i,p)| p.info["desc"] == otter::hand::UNCLAIMED_DESC) @@ -423,6 +424,7 @@ impl Ctx { } let a_pawns = find_pawns(a_pieces.as_slice()); + let b_pawns = find_pawns(b_pieces.as_slice()); bob.synch()?; @@ -435,6 +437,37 @@ impl Ctx { alice.synch()?; bob.synchx(None, |session, gen, k, v| { dbgc!(k,v); + if k != "Piece" { return } + let v = v.as_object().unwrap(); + let piece = v["piece"].as_str().unwrap(); + let p = b_pieces.iter_mut().find(|p| p.id == piece); + let p = if let Some(p) = p { p } else { return }; + let (op, d) = v["op"].as_object().unwrap().iter().next().unwrap(); + fn coord(j: &JsV) -> Pos { + PosC( + j.as_array().unwrap().iter() + .map(|n| n.as_i64().unwrap().try_into().unwrap()) + .collect::>().into_inner().unwrap() + ) + } + match op.as_str() { + "Move" => { + p.pos = coord(d); + }, + "Modify" | "ModifyQuiet" => { + let d = d.as_object().unwrap(); + p.pos = coord(&d["pos"]); + for (k,v) in d { + p.info + .as_object_mut().unwrap() + .insert(k.to_string(), v.clone()); + } + }, + _ => { + panic!("unknown op {:?} {:?}", &op, &d); + }, + }; + dbgc!(k,v,p); })?; // to repro a bug, have Bob move the RHS pawn out again