dis_rs/common/collision/
model.rs1use crate::common::collision::builder::CollisionBuilder;
2use crate::common::model::{EntityId, EventId, PduBody, VectorF32};
3use crate::common::{BodyInfo, Interaction};
4use crate::enumerations::{CollisionType, PduType};
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8const COLLISION_BODY_LENGTH: u16 = 48;
9
10#[derive(Clone, Debug, Default, PartialEq)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub struct Collision {
13 pub issuing_entity_id: EntityId,
14 pub colliding_entity_id: EntityId,
15 pub event_id: EventId,
16 pub collision_type: CollisionType,
17 pub velocity: VectorF32,
18 pub mass: f32,
19 pub location: VectorF32,
20}
21
22impl Collision {
23 #[must_use]
24 pub fn builder() -> CollisionBuilder {
25 CollisionBuilder::new()
26 }
27
28 #[must_use]
29 pub fn into_builder(self) -> CollisionBuilder {
30 CollisionBuilder::new_from_body(self)
31 }
32
33 #[must_use]
34 pub fn into_pdu_body(self) -> PduBody {
35 PduBody::Collision(self)
36 }
37}
38
39impl BodyInfo for Collision {
40 fn body_length(&self) -> u16 {
41 COLLISION_BODY_LENGTH
42 }
43
44 fn body_type(&self) -> PduType {
45 PduType::Collision
46 }
47}
48
49impl Interaction for Collision {
50 fn originator(&self) -> Option<&EntityId> {
51 Some(&self.issuing_entity_id)
52 }
53
54 fn receiver(&self) -> Option<&EntityId> {
55 Some(&self.colliding_entity_id)
56 }
57}