chiark / gitweb /
gamestate: Track last_released client
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 14 Jul 2021 15:17:24 +0000 (16:17 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 14 Jul 2021 15:17:35 +0000 (16:17 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/api.rs
daemon/cmdlistener.rs
src/gamestate.rs

index 073b1e48ba42bdf0f4bc867afb81fc48255d6020..60643d5c72ae1202ed94305b0df362fd723ee2c1 100644 (file)
@@ -335,6 +335,7 @@ api_route!{
       let pcs = pri.describe(ioccults,&gs.occults, gpc, ipc);
 
       gpc.held = Some(player);
+      gpc.last_released = default();
 
       let update = PieceUpdateOp::Modify(());
 
@@ -413,6 +414,7 @@ api_route!{
 
     if gpc.held != Some(player) { throw!(Ia::PieceNotHeld) }
     gpc.held = None;
+    gpc.last_released = a.client;
 
     let wrc = if let Some(zlevel) = new_z {
       gpc.zlevel = zlevel;
index e396d426c42ad6458f43f764af76e3ee8b90bc13..1cf3fc718eeda90420c82ee9676334287bc2e976 100644 (file)
@@ -1107,6 +1107,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
           pos, face,
           xdata: None,
           moveable: default(),
+          last_released: default(),
           rotateable: true,
         };
         let PieceSpecLoaded { p, loaded_via_alias, occultable } =
index db930b2adff0eacf2dc155290f6b25578d76e8e1..1f26d51f2d9f0bb7bb8e2c7e088b6df192530b97 100644 (file)
@@ -74,6 +74,7 @@ pub struct GPiece {  // usual variable: gpc
   pub angle: PieceAngle,
   pub gen: Generation,
   pub lastclient: ClientId,
+  #[serde(default)] pub last_released: ClientId,
   pub gen_before_lastclient: Generation,
   pub xdata: PieceXDataState,
   pub moveable: PieceMoveable,
@@ -412,6 +413,7 @@ impl GPiece {
       angle: default(),
       gen: gen_dummy,
       lastclient: ClientId(default()),
+      last_released: ClientId(default()),
       gen_before_lastclient: gen_dummy,
       xdata: None,
       moveable: default(),