chiark / gitweb /
clock: actually load state
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 18 Mar 2021 21:10:11 +0000 (21:10 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 20:12:11 +0000 (20:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/clock.rs

index 55a47b5d6c2e6b04b6d6f5739bd5a2f67691de80..af4e88a27e800fc36f2948088860502ba3e3b350 100644 (file)
@@ -82,9 +82,8 @@ struct State {
   #[serde(skip)] running: Option<Running>,
 }
 
-#[typetag::serde(name="Hand")]
-impl PieceXData for State {
-  fn dummy() -> Self {
+impl State {
+  fn new() -> Self {
     State {
       users: [UState { player: default(), remaining: TVL::zero() }; N],
       running: None,
@@ -92,6 +91,11 @@ impl PieceXData for State {
   }
 }
 
+#[typetag::serde(name="Hand")]
+impl PieceXData for State {
+  fn dummy() -> Self { State::new() }
+}
+
 
 #[derive(Debug,Copy,Clone,Serialize,Deserialize)]
 struct UState {
@@ -191,12 +195,15 @@ const OUTLINE: Rectangle = Rectangle { xy: PosC([W as f64, H as f64]) };
 #[typetag::serde]
 impl PieceSpec for ChessClock {
   #[throws(SpecError)]
-  fn load(&self, _: usize, _gpc: &mut GPiece) -> PieceSpecLoaded {
+  fn load(&self, _: usize, gpc: &mut GPiece) -> PieceSpecLoaded {
     if self.time <= 0 { throw!(SpecError::NegativeTimeout) }
 
     let clock = Clock {
       spec: self.clone(),
     };
+
+    gpc.xdata_mut(|| State::new())?;
+
     PieceSpecLoaded {
       p: Box::new(clock),
       occultable: None,