1use rpgx::prelude::Delta;
2use wasm_bindgen::prelude::*;
3
4use crate::traits::WasmWrapper;
5
6#[wasm_bindgen(js_name = Delta)]
7#[derive(Clone, Debug, PartialEq, Eq)]
8pub struct WasmDelta {
9 inner: Delta,
10}
11
12impl WasmWrapper<Delta> for WasmDelta {
13 fn from_inner(inner: Delta) -> Self {
14 WasmDelta { inner }
15 }
16
17 fn inner(&self) -> &Delta {
18 &self.inner
19 }
20
21 fn into_inner(self) -> Delta {
22 self.inner
23 }
24}
25
26#[wasm_bindgen(js_class = Delta)]
27impl WasmDelta {
28 #[wasm_bindgen(constructor)]
29 pub fn new(dx: i32, dy: i32) -> WasmDelta {
30 WasmDelta {
31 inner: Delta::new(dx, dy),
32 }
33 }
34
35 #[wasm_bindgen(getter)]
36 pub fn dx(&self) -> i32 {
37 self.inner.dx
38 }
39
40 #[wasm_bindgen(getter)]
41 pub fn dy(&self) -> i32 {
42 self.inner.dy
43 }
44
45 #[wasm_bindgen]
46 pub fn zero() -> WasmDelta {
47 WasmDelta {
48 inner: Delta::zero(),
49 }
50 }
51
52 #[wasm_bindgen]
53 pub fn invert(&self) -> WasmDelta {
54 WasmDelta {
55 inner: self.inner.invert(),
56 }
57 }
58
59 #[wasm_bindgen(js_name = isZero)]
60 pub fn is_zero(&self) -> bool {
61 self.inner.is_zero()
62 }
63
64 #[wasm_bindgen]
65 pub fn manhattan(&self) -> u32 {
66 self.inner.manhattan()
67 }
68
69 #[wasm_bindgen(js_name = isAxisAligned)]
70 pub fn is_axis_aligned(&self) -> bool {
71 self.inner.is_axis_aligned()
72 }
73
74 #[wasm_bindgen(js_name = isDiagonal)]
75 pub fn is_diagonal(&self) -> bool {
76 self.inner.is_diagonal()
77 }
78
79 #[wasm_bindgen]
80 pub fn add(&self, other: &WasmDelta) -> WasmDelta {
81 WasmDelta {
82 inner: self.inner + other.inner,
83 }
84 }
85
86 #[wasm_bindgen]
87 pub fn sub(&self, other: &WasmDelta) -> WasmDelta {
88 WasmDelta {
89 inner: self.inner - other.inner,
90 }
91 }
92
93 #[wasm_bindgen]
94 pub fn neg(&self) -> WasmDelta {
95 WasmDelta { inner: -self.inner }
96 }
97}