chiark / gitweb /
PieceTrait, global: Provide loaded_hook()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 22:15:44 +0000 (22:15 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 22:15:44 +0000 (22:15 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/gamestate.rs
src/global.rs

index 75c57c108baa402fe14c99a2504f584a36655e90..de5ecbbb6734deee1b83a1b0ec29ba21fc0922c0 100644 (file)
@@ -152,6 +152,9 @@ pub trait PieceTrait: OutlineTrait + Send + Debug + 'static {
                       _was_held: Option<PlayerId>)
                       -> UnpreparedUpdates { None }
 
+  #[throws(IE)]
+  fn loaded_hook(&self, _piece: PieceId, _gs: &mut GameState) { }
+
   /// Not called if the whole game is destroyed.
   /// You can use Drop of course but it's not usually much use since
   /// you don't have a reference to the game or anything.
index 15c965fec395546109ead5e162f239c2ccdb9d9e..3cc573e27f63bb8dacdb564cdfa88f775986326b 100644 (file)
@@ -1118,7 +1118,10 @@ impl InstanceGuard<'_> {
     let gref = InstanceRef(Arc::new(Mutex::new(cont)));
     let mut g = gref.lock().unwrap();
 
-    // xxx add hook to let chess clock restart after reload
+    let ig = &mut *g;
+    for (piece, ipc) in ig.ipieces.0.iter() {
+      ipc.direct_trait_access().loaded_hook(piece, &mut ig.gs)?;
+    }
 
     for (token, _) in &tokens_players {
       g.tokens_players.tr.insert(RawToken(token.clone()));