1 // Copyright 2020-2021 Ian Jackson and contributors to Otter
2 // SPDX-License-Identifier: AGPL-3.0-or-later
3 // There is NO WARRANTY.
11 fn move_money<PI:Idx>(&mut self,
12 a_pieces: &mut Pieces<PI>, piece: PI,
13 qty: i32, z: &str, pos: Pos) {
14 self.api_piece_op_single(PuSynch((&mut *a_pieces, piece)).id(), (
15 "multigrab", json!({ "n": qty, 'z': z })
18 self.api_piece(GH::Ungrab, PuSynch((&mut *a_pieces, piece)), pos)?;
24 fn multigrab(&mut self) {
25 let mut alice = self.connect_player(&self.alice)?;
26 let mut a_pieces = alice.pieces::<PIA>()?;
28 let bank = a_pieces.find_by_desc_glob("*400ƒ*");
30 let pile_pos = PosC::new(40,20);
31 let temp_pos = PosC::new(40,10);
33 alice.api_piece_op_single(PuSynch((&mut a_pieces, bank)).id(), (
34 "multigrab", json!({ "n": 50, 'z': "q000000000" })
36 alice.synchu(&mut a_pieces)?;
39 let bank = a_pieces.find_by_desc_glob("* 350ƒ*");
40 a_pieces[pile].assert_desc_contains(" 50ƒ");
42 alice.api_piece(GH::Ungrab, PuSynch((&mut a_pieces, pile)), pile_pos)?;
43 alice.synchu(&mut a_pieces)?;
45 alice.api_piece_op_single(PuSynch((&mut a_pieces, bank)).id(), (
46 "multigrab", json!({ "n": 13, 'z': "t000000000" })
49 alice.api_piece(GH::Ungrab, PuSynch((&mut a_pieces, moved)), temp_pos)?;
50 alice.synchu(&mut a_pieces)?;
51 let bank = a_pieces.find_by_desc_glob("* 337ƒ*");
52 a_pieces[moved].assert_desc_contains(" 13ƒ");
54 alice.api_piece(GH::With, PuSynch((&mut a_pieces, moved)), pile_pos)?;
55 alice.synchu(&mut a_pieces)?;
56 assert!(a_pieces[moved].info.is_null());
57 a_pieces[pile].assert_desc_contains(" 63ƒ");
59 // This saves us some complaints
66 fn occult(&mut self) {
67 self.clear_reset_to_demo()?;
69 let mut alice = self.connect_player(&self.alice)?;
70 let mut a_pieces = alice.pieces::<PIA>()?;
72 let mut bob = self.connect_player(&self.bob)?;
74 let hand = a_pieces.find_by_desc_glob(otter::hand::UNCLAIMED_HAND_DESC);
75 alice.api_piece(GH::With, PuSynch(&mut (&mut a_pieces, hand)),
76 ("k", json!({ "opname": "claim",
77 "wrc": WRC::Unpredictable })))?;
78 let hand_pos = a_pieces[hand].pos;
80 alice.synchu(&mut a_pieces)?;
82 let bank = a_pieces.find_by_desc_glob("*400ƒ*");
84 alice.move_money(&mut a_pieces, bank, 399, "u000000000", hand_pos)?;
85 alice.synchu(&mut a_pieces)?;
93 fn tests(mut c: Ctx) {
94 test!(c, "multigrab", c.multigrab() ?);
95 test!(c, "occult", c.occult() ?);
100 tests(Ctx::setup()?)?;