chiark / gitweb /
Provide plumbing for special client rendering instructions
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 11 Apr 2022 19:52:10 +0000 (20:52 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 15 Apr 2022 19:39:28 +0000 (20:39 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/gamestate.rs
src/pcrender.rs
templates/script.ts

index 03947302aab97aa9f6beb9c42fb88469f0af15a8..e649864b9c20342daa946de16bbb0a3941aa78b3 100644 (file)
@@ -179,6 +179,8 @@ pub trait PieceBaseTrait: OutlineTrait + Send + Debug + 'static {
   fn nfaces(&self) -> RawFaceId;
 
   fn itemname(&self) -> &str;
+
+  fn special(&self) -> Result<Option<SpecialClientRendering>,IE> { Ok(None) }
 }
 
 #[typetag::serde] // usual variable: p
index afba77a2ab45185bc2cf9ed0bfe38e7f41bca70a..5315d07b026c4e9404e489f04484c598dc836bab 100644 (file)
@@ -13,6 +13,10 @@ pub struct VisibleAngleTransform(Html);
 
 const DEFKEY_FLIP: UoKey = 'f';
 
+#[derive(Serialize,Debug)]
+pub enum SpecialClientRendering {
+}
+
 #[derive(Debug,Clone)]
 pub struct PieceRenderInstructions {
   pub vpid: VisiblePieceId,
@@ -181,13 +185,14 @@ impl PieceRenderInstructions {
     let pri = self;
     let instead = pri.instead(ioccults, ipc)?;
 
-    let o: &dyn OutlineTrait = match instead {
+    let o: &dyn PieceBaseTrait = match instead {
       Left(y) => Borrow::<dyn PieceTrait>::borrow(ipc.show(y)).dyn_upcast(),
       Right(i) => i.dyn_upcast(),
     };
 
     let angle = pri.angle(gpc);
     let bbox = o.bbox_approx()?;
+    let special = o.special()?;
 
     let dragraise = match o.thresh_dragraise()? {
       Some(n) if n < 0 => throw!(SvgE::NegativeDragraise),
@@ -201,6 +206,12 @@ impl PieceRenderInstructions {
     hwrite!(&mut defs,
            r##"<g id="piece{}" transform="{}" data-dragraise="{}""##,
            pri.vpid, &transform.0, dragraise)?;
+    if let Some(special) = &special {
+      let special = serde_json::to_string(&special).map_err(IE::JSONEncode)?;
+      hwrite!(&mut defs,
+              r##" data-special={}"##,
+              Html::from_txt(&special))?;
+    }
     hwrite!(&mut defs,
            r##">"##)?;
 
index 4c2587755a96c6f05fb1890edc992e5a1583e769..7adf41d45929bdc9ec074c0551812a8930573b03 100644 (file)
@@ -23,6 +23,7 @@
 //   pelem
 //   #piece{}
 //         .dragraise   dragged more than this ?  raise to top!
+//         .special     enum RenderSpecial
 //      <g id="piece{}" >
 //      currently-displayed version of the piece
 //      to allow addition/removal of selected indication