From: Ian Jackson Date: Sun, 17 May 2020 13:11:16 +0000 (+0100) Subject: wip gamestate before closure approach X-Git-Tag: otter-0.2.0~1610 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=e0481b9ba33246ce0d97c0c648ea5a545ee229db;p=otter.git wip gamestate before closure approach --- diff --git a/src/gamestate.rs b/src/gamestate.rs new file mode 100644 index 00000000..c0bea892 --- /dev/null +++ b/src/gamestate.rs @@ -0,0 +1,66 @@ + +pub trait Piece { +} + +#[derive(Debug)] +pub struct PieceRecord { + x : Coord, + y : Coord, + p : Box, + held : Option, +} + +#[derive(Debug)] +pub struct GameState { + gen : Counter, + data : GameStateData, + clients, +} + + +#[derive(Debug)] +pub struct GameStateData { + pub pieces : Vec, + pub players : Vec, +} + +impl Deref for GameState { + type Output = GamStateData; + fn deref(&self) -> &GamStateData { &self.data } +} + +impl GameState { + fn as_ref(&self) -> (&usize, &GameStateData) { (&self.gen, &self.data) } + fn gen(&self) -> usize { self.gen } +} + + + +#[derive(Serialize)] +enum MsgUpdate { + InsertPiece(usize, MsgPiece), + DeletePiece(usize), + UpdatePiece(usize, MsgPiece), +} + +struct DataGuard<'gs> { + gs : &'gs mut GameState, + msg : MsgUpdate, +} +impl<'gs> Deref for DataGuard<'gs> { + type Output = GameState; + fn deref(&self) -> GameState<'gs> { self.gs } +} +impl<'gs> DerefMut for DataGuard<'gs> { + fn deref_mut(&mut self) -> GameState<'gs> { self.gs } +} + +impl GameState { + fn update(&mut self, msg : MsgUpdate) -> DataGuard<'_> { + DataGuard { gs : self, msg } + } +} + +impl Drop for DataGuard { + +} diff --git a/src/pieces.rs b/src/pieces.rs new file mode 100644 index 00000000..6454ae1a --- /dev/null +++ b/src/pieces.rs @@ -0,0 +1,9 @@ + +struct Disc { + colours : [Colour], + size : Coord, +} + +impl Piece for Disc { +} +