hotham_debug_server/
debug_frame.rs

1use approx::relative_eq;
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct DebugFrame {
8    pub id: Uuid,
9    pub frame_number: u64,
10    pub session_id: Uuid,
11    pub entities: Vec<DebugEntity>,
12}
13
14#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(rename_all = "camelCase")]
16pub struct DebugEntity {
17    pub name: String,
18    pub id: String,
19    pub entity_id: u64,
20    pub transform: Option<DebugTransform>,
21    pub collider: Option<DebugCollider>,
22}
23
24#[derive(Default, Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct DebugTransform {
27    pub translation: [f32; 3],
28    pub rotation: [f32; 4],
29    pub scale: [f32; 3],
30}
31
32impl PartialEq for DebugTransform {
33    fn eq(&self, other: &Self) -> bool {
34        relative_eq!(self.translation[0], other.translation[0])
35            && relative_eq!(self.translation[1], other.translation[1])
36            && relative_eq!(self.translation[2], other.translation[2])
37            && relative_eq!(self.scale[0], other.scale[0])
38            && relative_eq!(self.scale[1], other.scale[1])
39            && relative_eq!(self.scale[2], other.scale[2])
40            && relative_eq!(self.rotation[0], other.rotation[0])
41            && relative_eq!(self.rotation[1], other.rotation[1])
42            && relative_eq!(self.rotation[2], other.rotation[2])
43    }
44}
45
46#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)]
47#[serde(rename_all = "camelCase")]
48pub struct DebugCollider {
49    pub collider_type: String,
50    pub geometry: Vec<f32>,
51    pub translation: [f32; 3],
52    pub rotation: [f32; 4],
53}
54
55// impl PartialEq for DebugCollider {
56//     fn eq(&self, other: &Self) -> bool {
57//         self.collider_type == other.collider_type && self.geometry == other.geometry
58//     }
59// }