chiark / gitweb /
wip rotation
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 5 Jan 2021 02:15:48 +0000 (02:15 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 5 Jan 2021 02:15:48 +0000 (02:15 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/session.rs
src/gamestate.rs
templates/script.ts
wasm/wasm.rs

index 56cf652f68080d7e4741a17fa63783152bd898ae..e1f989252d7620fa39833aa31d44c7ae24e1e38a 100644 (file)
@@ -40,7 +40,7 @@ struct SessionPieceLoadJson<'r> {
   z: ZCoord,
   zg: Generation,
   pinned: bool,
-  angle: VisiblePieceAngle,
+  angle: CompassAngle,
   uos: &'r [UoDescription],
 }
 
@@ -113,12 +113,16 @@ fn session_inner(form : Json<SessionForm>,
       let defs = p.make_defs(&pri)?;
       alldefs.push((pri.id, defs));
 
+      let vangle = match pri.angle {
+        VisiblePieceAngle(PieceAngle::Compass(vangle)) => vangle,
+      };
+
       let for_info = SessionPieceLoadJson {
         held: &pr.held,
         z: pr.zlevel.z.clone(),
         zg: pr.zlevel.zg,
         pinned: pr.pinned,
-        angle: pri.angle,
+        angle: vangle,
         uos: &p.ui_operations()?,
       };
 
index 19f1851d709dc275bc8bcebe1842da9a704c9abb..8ab4fb413d7cf0e13f554985988455334af607aa 100644 (file)
@@ -26,7 +26,7 @@ visible_slotmap_key!{ VisiblePieceId('.') }
 #[derive(Clone,Copy,Debug)]
 #[derive(Serialize,Deserialize)]
 #[serde(transparent)]
-pub struct VisiblePieceAngle(PieceAngle);
+pub struct VisiblePieceAngle(pub PieceAngle);
 
 #[derive(Clone,Debug)]
 #[derive(Serialize,Deserialize)]
index cc39435ba9ca1238c7e6813367bf571082a107ab..2f43123e3460bdbbbcad08ea948ea0da514f7765 100644 (file)
@@ -67,6 +67,7 @@ type PieceInfo = {
   cseq_updatesvg : number | null,
   z : ZCoord,
   zg : Generation,
+  angle: number,
   pinned: boolean,
   uos : UoDescription[],
   uelem : SVGGraphicsElement,
@@ -263,6 +264,20 @@ function recompute_keybindings() {
     };
   };
   if (all_targets.length) {
+    add_uo(all_targets, {
+      def_key: 'l',
+      kind: 'Client',
+      wrc: 'Predictable',
+      opname: "left",
+      desc: "rotate left",
+    });
+    add_uo(all_targets, {
+      def_key: 'r',
+      kind: 'Client',
+      wrc: 'Predictable',
+      opname: "right",
+      desc: "rotate right",
+    });
     add_uo(all_targets, {
       def_key: 'b',
       kind: 'Client',
@@ -365,6 +380,21 @@ function some_keydown(e: KeyboardEvent) {
   }
 }
 
+keyops_local['left' ] = function (uo: UoRecord) { rotate_targets(uo, +1); }
+keyops_local['right'] = function (uo: UoRecord) { rotate_targets(uo, -1); }
+
+function rotate_targets(uo: UoRecord, dangle: number): boolean {
+  for (let piece of uo.targets!) {
+    let p = pieces[piece]!;
+    p.angle += dangle + 8;
+    p.angle %= 8;
+    let transform = 
+    api_piece(api, 'rotate', piece,p, p.angle);
+  }
+  recompute_keybindings();
+  return true;
+}
+
 type LowerTodoItem = {
   piece: PieceId,
   p: PieceInfo,
index c213b571f1f78f1eae5ad92200a23aca162e5d40..c0640fb0cb7f208120a1de4efe702b726476b53d 100644 (file)
@@ -114,6 +114,11 @@ impl TimestampAbbreviator {
   }
 }
 
+#[wasm_bindgen]
+pub fn angle_transform(angle: u8) -> JsString {
+  zcoord::misc::raw_angle_transform(angle).into()
+}
+
 #[wasm_bindgen]
 pub fn setup(s: &str) -> JsString {
   // returning String produces a wasm-opt error, as here