From: Ian Jackson Date: Tue, 5 Jan 2021 02:15:48 +0000 (+0000) Subject: wip rotation X-Git-Tag: otter-0.2.0~19 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=d7466d7d52d63325506adee5a57911494faef5d4;p=otter.git wip rotation Signed-off-by: Ian Jackson --- diff --git a/daemon/session.rs b/daemon/session.rs index 56cf652f..e1f98925 100644 --- a/daemon/session.rs +++ b/daemon/session.rs @@ -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, 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()?, }; diff --git a/src/gamestate.rs b/src/gamestate.rs index 19f1851d..8ab4fb41 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -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)] diff --git a/templates/script.ts b/templates/script.ts index cc39435b..2f43123e 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -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, diff --git a/wasm/wasm.rs b/wasm/wasm.rs index c213b571..c0640fb0 100644 --- a/wasm/wasm.rs +++ b/wasm/wasm.rs @@ -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