From: Ian Jackson Date: Thu, 25 Jun 2020 20:32:11 +0000 (+0100) Subject: wip initial data from server X-Git-Tag: otter-0.2.0~1557 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=405c7ca4a6a3c7f3be63c742bf7e008d053d9393;p=otter.git wip initial data from server --- diff --git a/src/bin/server.rs b/src/bin/server.rs index f0f1c2e5..634f936e 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -53,6 +53,7 @@ fn loading(token : InstanceAccess) -> Result { #[derive(Serialize,Debug)] struct SessionRenderContext { clientid : u64, + defs : Vec, } #[derive(Deserialize)] @@ -68,7 +69,21 @@ fn session(form : Json) -> Result { let user = g.users.get_mut(iad.user).ok_or_else(|| anyhow!("user deleted"))?; let client = Client { }; let clientid : slotmap::KeyData = user.clients.insert(client).into(); - SessionRenderContext { clientid : clientid.as_ffi() } + + let mut defs = vec![]; + for (gpid, pr) in &g.gs.pieces { + let id : slotmap::KeyData = gpid.into(); + let pri = PieceRenderInstructions { + id : id.as_ffi(), + face : pr.face, + }; + defs.push(pr.p.svg_defs(&pri)); + } + + SessionRenderContext { + clientid : clientid.as_ffi(), + defs, + } }; Ok(Template::render("test",&c)) } @@ -111,7 +126,7 @@ fn updates(token : &RawStr, clientid : u64) -> impl response::Responder<'static> let _ = { let mut g = iad.i.lock().map_err(|e| anyhow!("lock poison {:?}",&e))?; let user = g.users.get_mut(iad.user).ok_or_else(|| anyhow!("user deleted"))?; - let client = user.clients.get_mut(clientid).ok_or_else(|| anyhow!("client deleted"))?; + let _client = user.clients.get_mut(clientid).ok_or_else(|| anyhow!("client deleted"))?; }; let tc = TestCounterInner { next : 0 }; let tc = BufReader::new(tc); diff --git a/src/gamestate.rs b/src/gamestate.rs index bca051fa..ceb2d67b 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -5,15 +5,23 @@ slotmap::new_key_type!{ pub struct PieceId; } +type VisiblePieceId = u64; + +pub struct PieceRenderInstructions { + pub id : VisiblePieceId, + pub face : FaceId, +} + pub trait Piece : Send + Debug { + fn svg_defs(&self, pri : &PieceRenderInstructions) -> String; } #[derive(Debug)] pub struct PieceRecord { - pos : Pos, - p : Box, - face : FaceId, - held : Option, + pub pos : Pos, + pub p : Box, + pub face : FaceId, + pub held : Option, } #[derive(Debug)] diff --git a/src/pieces.rs b/src/pieces.rs index 4fc36f5f..3c3d1c99 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -12,16 +12,19 @@ struct SimpleShape { } impl Piece for SimpleShape { + fn svg_defs(&self, pri : &PieceRenderInstructions) -> String { + format!(r#"{}"#, pri.id, self.shape) + } } pub fn xxx_make_pieces() -> Vec<(Pos, Box)> { vec![ - ([ 50, 80 ], + ([ 90, 80 ], Box::new(SimpleShape { shape : r#""#.to_owned(), colours : index_vec![ "red".to_string(), "grey".to_string() ], })), - ([ 50, 60 ], + ([ 90, 60 ], Box::new(SimpleShape { shape : r#""#.to_owned(), colours : index_vec![ "blue".to_string(), "grey".to_string() ], diff --git a/templates/test.tera b/templates/test.tera index 8e1980b5..ff9a676a 100644 --- a/templates/test.tera +++ b/templates/test.tera @@ -14,6 +14,7 @@ +{% for piece in defs %}{{piece}}{% endfor %}