From: Ian Jackson Date: Thu, 25 Jun 2020 18:49:49 +0000 (+0100) Subject: set up a gamestate X-Git-Tag: otter-0.2.0~1558 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=f7eff47b744ab75d32e39d32b67cfd4976c45056;p=otter.git set up a gamestate --- diff --git a/junk/gamestate.rs b/junk/gamestate.rs index 90e61493..7c07c79e 100644 --- a/junk/gamestate.rs +++ b/junk/gamestate.rs @@ -3,20 +3,11 @@ pub trait Piece { fn svg(&self, pr : &PiecedRecord) -> SvgData; } -#[derive(Debug)] -pub struct PieceRecord { - pos : Pos, - p : Rc, - held : Option, -} - struct PlayerRecord { nick : String, } -#[derive(Debug)] pub struct GameState { - pub pieces : Vec>, pub players : Vec, } diff --git a/junk/instance.rs b/junk/instance.rs index ea2e6067..d02f5212 100644 --- a/junk/instance.rs +++ b/junk/instance.rs @@ -11,7 +11,6 @@ pub struct Instance { #[derive(Debug)] struct Game { gen : Counter, - gs : GameState, log : VecDeque, } diff --git a/src/bin/server.rs b/src/bin/server.rs index fc543abd..f0f1c2e5 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -128,7 +128,7 @@ fn resource(leaf : CheckedResourceLeaf) -> io::Result { } fn main() { - global::xxx_global_setup(); + xxx_global_setup(); let helmet = SpaceHelmet::default() .enable(NoSniff::Enable) diff --git a/src/gamestate.rs b/src/gamestate.rs new file mode 100644 index 00000000..bca051fa --- /dev/null +++ b/src/gamestate.rs @@ -0,0 +1,35 @@ + +use crate::imports::*; + +slotmap::new_key_type!{ + pub struct PieceId; +} + +pub trait Piece : Send + Debug { +} + +#[derive(Debug)] +pub struct PieceRecord { + pos : Pos, + p : Box, + face : FaceId, + held : Option, +} + +#[derive(Debug)] +pub struct GameState { + pub pieces : DenseSlotMap, +} + +pub fn xxx_gamestate_init() -> GameState { + let mut pieces = DenseSlotMap::with_key(); + for (pos, p) in xxx_make_pieces() { + let pr = PieceRecord { + pos, p, + face : 0.into(), + held : None, + }; + pieces.insert(pr); + } + GameState { pieces } +} diff --git a/src/global.rs b/src/global.rs index 7c38be3b..f81f1b9b 100644 --- a/src/global.rs +++ b/src/global.rs @@ -26,6 +26,7 @@ pub struct User { pub struct Instance { /* game state goes here */ pub users : DenseSlotMap, + pub gs : GameState, } #[derive(Clone)] @@ -74,6 +75,7 @@ impl<'r> FromParam<'r> for InstanceAccess<'r> { pub fn xxx_global_setup() { let i = Instance { users : Default::default(), + gs : xxx_gamestate_init(), }; let i = Arc::new(Mutex::new(i)); let mut ig = i.lock().unwrap(); diff --git a/src/imports.rs b/src/imports.rs index 9a1efe3e..478a6663 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -1,6 +1,7 @@ pub use std::io; pub use std::io::{BufReader,Read}; +pub use std::fmt::Debug; pub use std::thread; pub use std::time::Duration; pub use std::sync::{Arc,Mutex,RwLock}; @@ -25,10 +26,11 @@ pub use rocket::response::NamedFile; pub use rocket::response; pub use slotmap::dense::{DenseSlotMap}; +pub use index_vec::{define_index_type,index_vec,IndexVec}; -pub use crate::global; -pub use crate::global::{lookup_token,InstanceAccess,InstanceAccessDetails}; -pub use crate::global::{Client,ClientId}; +pub use crate::global::*; +pub use crate::gamestate::*; +pub use crate::pieces::*; pub type E = anyhow::Error; diff --git a/src/lib.rs b/src/lib.rs index 743d4498..62de69ea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ pub mod imports; pub mod global; +pub mod pieces; +pub mod gamestate; diff --git a/src/pieces.rs b/src/pieces.rs new file mode 100644 index 00000000..4fc36f5f --- /dev/null +++ b/src/pieces.rs @@ -0,0 +1,30 @@ + +use crate::imports::*; + +define_index_type! { + pub struct FaceId = u8; +} + +#[derive(Debug)] +struct SimpleShape { + shape : String, + colours : IndexVec, +} + +impl Piece for SimpleShape { +} + +pub fn xxx_make_pieces() -> Vec<(Pos, Box)> { + vec![ + ([ 50, 80 ], + Box::new(SimpleShape { + shape : r#""#.to_owned(), + colours : index_vec![ "red".to_string(), "grey".to_string() ], + })), + ([ 50, 60 ], + Box::new(SimpleShape { + shape : r#""#.to_owned(), + colours : index_vec![ "blue".to_string(), "grey".to_string() ], + })), + ] +}