1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
4pub enum SpatialType {
5 Position2D = 0x01,
6 Position3D = 0x02,
7 Rotation = 0x03,
8 Velocity = 0x04,
9 Acceleration = 0x05,
10 BoundingBox = 0x06,
11 Quaternion = 0x07,
12 Path = 0x08,
13 Transform = 0x09,
14 SpatialState = 0x0A,
15 PositionDelta = 0x0B,
16 RotationDelta = 0x0C,
17 SpatialDelta = 0x0D,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
21pub struct Position2D {
22 pub x: f32,
23 pub y: f32,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
27pub struct Position3D {
28 pub x: f32,
29 pub y: f32,
30 pub z: f32,
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
34pub struct Rotation {
35 pub pitch: f32,
36 pub yaw: f32,
37 pub roll: f32,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
41pub struct Velocity {
42 pub vx: f32,
43 pub vy: f32,
44 pub vz: f32,
45}
46
47#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
48pub struct Acceleration {
49 pub ax: f32,
50 pub ay: f32,
51 pub az: f32,
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
55pub struct BoundingBox {
56 pub min_x: f32,
57 pub min_y: f32,
58 pub min_z: f32,
59 pub max_x: f32,
60 pub max_y: f32,
61 pub max_z: f32,
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
65pub struct Quaternion {
66 pub qx: f32,
67 pub qy: f32,
68 pub qz: f32,
69 pub qw: f32,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73pub struct Path {
74 pub points: Vec<Position3D>,
75}
76
77#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
78pub struct Transform {
79 pub position: Position3D,
80 pub rotation: Rotation,
81 pub scale: Position3D, }
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct SpatialState {
86 pub position: Option<Position3D>,
87 pub rotation: Option<Rotation>,
88 pub velocity: Option<Velocity>,
89 pub acceleration: Option<Acceleration>,
90}
91
92#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
93pub struct PositionDelta {
94 pub dx: f32,
95 pub dy: f32,
96 pub dz: f32,
97}
98
99#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
100pub struct RotationDelta {
101 pub d_pitch: f32,
102 pub d_yaw: f32,
103 pub d_roll: f32,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
107pub enum SpatialDelta {
108 Position(PositionDelta),
109 Rotation(RotationDelta),
110 State {
111 position: Option<PositionDelta>,
112 rotation: Option<RotationDelta>,
113 velocity: Option<Velocity>, acceleration: Option<Acceleration>,
115 },
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
119pub struct PredictiveDelta {
120 pub delta: PositionDelta,
121 pub velocity: Velocity,
122 pub predicted_next: Position3D,
123}
124
125#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
126pub enum SpatialValue {
127 S1(Position2D),
128 S2(Position3D),
129 S3(Rotation),
130 S4(Velocity),
131 S5(Acceleration),
132 S6(BoundingBox),
133 S7(Quaternion),
134 S8(Path),
135 S9(Transform),
136 S10(SpatialState),
137 S11(PositionDelta),
138 S12(RotationDelta),
139 S13(SpatialDelta),
140}