dis_rs/common/collision_elastic/
model.rs1use crate::common::collision_elastic::builder::CollisionElasticBuilder;
2use crate::common::model::{EntityId, EventId, PduBody, VectorF32};
3use crate::common::{BodyInfo, Interaction};
4use crate::enumerations::PduType;
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8const COLLISION_ELASTIC_BODY_LENGTH: u16 = 88;
9
10#[derive(Clone, Debug, Default, PartialEq)]
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15pub struct CollisionElastic {
16 pub issuing_entity_id: EntityId,
17 pub colliding_entity_id: EntityId,
18 pub event_id: EventId,
19 pub velocity: VectorF32,
20 pub mass: f32,
21 pub location: VectorF32,
22 pub intermediate_result_xx: f32,
23 pub intermediate_result_xy: f32,
24 pub intermediate_result_xz: f32,
25 pub intermediate_result_yy: f32,
26 pub intermediate_result_yz: f32,
27 pub intermediate_result_zz: f32,
28 pub unit_surface_normal: VectorF32,
29 pub coefficient_of_restitution: f32,
30}
31
32impl CollisionElastic {
33 #[must_use]
34 pub fn builder() -> CollisionElasticBuilder {
35 CollisionElasticBuilder::new()
36 }
37
38 #[must_use]
39 pub fn into_builder(self) -> CollisionElasticBuilder {
40 CollisionElasticBuilder::new_from_body(self)
41 }
42
43 #[must_use]
44 pub fn into_pdu_body(self) -> PduBody {
45 PduBody::CollisionElastic(self)
46 }
47}
48
49impl BodyInfo for CollisionElastic {
50 fn body_length(&self) -> u16 {
51 COLLISION_ELASTIC_BODY_LENGTH
52 }
53
54 fn body_type(&self) -> PduType {
55 PduType::CollisionElastic
56 }
57}
58
59impl Interaction for CollisionElastic {
60 fn originator(&self) -> Option<&EntityId> {
61 Some(&self.issuing_entity_id)
62 }
63
64 fn receiver(&self) -> Option<&EntityId> {
65 Some(&self.colliding_entity_id)
66 }
67}