1use super::class_requires::*;
2use super::*;
3#[allow(non_upper_case_globals, non_snake_case)]
10#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12#[derive(educe::Educe)]
13#[educe(Debug, Clone, Default, PartialEq)]
14pub struct hkpVehicleLinearCastWheelCollide {
15 #[cfg_attr(
22 feature = "serde",
23 serde(skip_serializing_if = "Option::is_none", default)
24 )]
25 pub __ptr: Option<Pointer>,
26 #[cfg_attr(feature = "json_schema", schemars(flatten))]
28 #[cfg_attr(feature = "serde", serde(flatten))]
29 pub parent: hkpVehicleWheelCollide,
30 #[cfg_attr(feature = "json_schema", schemars(rename = "wheelCollisionFilterInfo"))]
35 #[cfg_attr(feature = "serde", serde(rename = "wheelCollisionFilterInfo"))]
36 pub m_wheelCollisionFilterInfo: u32,
37 #[cfg_attr(feature = "json_schema", schemars(rename = "wheelStates"))]
42 #[cfg_attr(feature = "serde", serde(rename = "wheelStates"))]
43 pub m_wheelStates: Vec<hkpVehicleLinearCastWheelCollideWheelState>,
44 #[cfg_attr(feature = "json_schema", schemars(rename = "rejectChassisListener"))]
49 #[cfg_attr(feature = "serde", serde(rename = "rejectChassisListener"))]
50 pub m_rejectChassisListener: hkpRejectChassisListener,
51 #[cfg_attr(feature = "json_schema", schemars(rename = "maxExtraPenetration"))]
56 #[cfg_attr(feature = "serde", serde(rename = "maxExtraPenetration"))]
57 pub m_maxExtraPenetration: f32,
58 #[cfg_attr(feature = "json_schema", schemars(rename = "startPointTolerance"))]
63 #[cfg_attr(feature = "serde", serde(rename = "startPointTolerance"))]
64 pub m_startPointTolerance: f32,
65}
66const _: () = {
67 use havok_serde as _serde;
68 impl _serde::HavokClass for hkpVehicleLinearCastWheelCollide {
69 #[inline]
70 fn name(&self) -> &'static str {
71 "hkpVehicleLinearCastWheelCollide"
72 }
73 #[inline]
74 fn signature(&self) -> _serde::__private::Signature {
75 _serde::__private::Signature::new(0xc59399d0)
76 }
77 #[allow(clippy::let_and_return, clippy::vec_init_then_push)]
78 fn deps_indexes(&self) -> Vec<usize> {
79 let mut v = Vec::new();
80 v.extend(
81 self
82 .m_wheelStates
83 .iter()
84 .flat_map(|class| class.deps_indexes())
85 .collect::<Vec<usize>>(),
86 );
87 v.extend(self.m_rejectChassisListener.deps_indexes());
88 v
89 }
90 }
91 impl _serde::Serialize for hkpVehicleLinearCastWheelCollide {
92 fn serialize<S>(&self, __serializer: S) -> Result<S::Ok, S::Error>
93 where
94 S: _serde::ser::Serializer,
95 {
96 let class_meta = self
97 .__ptr
98 .map(|name| (name, _serde::__private::Signature::new(0xc59399d0)));
99 let mut serializer = __serializer
100 .serialize_struct(
101 "hkpVehicleLinearCastWheelCollide",
102 class_meta,
103 (52u64, 80u64),
104 )?;
105 serializer.pad_field([0u8; 4usize].as_slice(), [0u8; 8usize].as_slice())?;
106 serializer
107 .skip_field("memSizeAndFlags", &self.parent.parent.m_memSizeAndFlags)?;
108 serializer
109 .skip_field("referenceCount", &self.parent.parent.m_referenceCount)?;
110 serializer.pad_field([0u8; 0usize].as_slice(), [0u8; 4usize].as_slice())?;
111 serializer.serialize_field("alreadyUsed", &self.parent.m_alreadyUsed)?;
112 serializer.skip_field("type", &self.parent.m_type)?;
113 serializer.pad_field([0u8; 2usize].as_slice(), [0u8; 6usize].as_slice())?;
114 serializer
115 .serialize_field(
116 "wheelCollisionFilterInfo",
117 &self.m_wheelCollisionFilterInfo,
118 )?;
119 serializer.pad_field([0u8; 0usize].as_slice(), [0u8; 4usize].as_slice())?;
120 serializer
121 .serialize_array_field(
122 "wheelStates",
123 &self.m_wheelStates,
124 TypeSize::Struct {
125 size_x86: 96u64,
126 size_x86_64: 96u64,
127 },
128 )?;
129 serializer
130 .serialize_field(
131 "rejectChassisListener",
132 &self.m_rejectChassisListener,
133 )?;
134 serializer
135 .serialize_field("maxExtraPenetration", &self.m_maxExtraPenetration)?;
136 serializer
137 .serialize_field("startPointTolerance", &self.m_startPointTolerance)?;
138 serializer.end()
139 }
140 }
141};
142#[doc(hidden)]
143#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
144const _: () = {
145 use havok_serde as _serde;
146 #[automatically_derived]
147 impl<'de> _serde::Deserialize<'de> for hkpVehicleLinearCastWheelCollide {
148 fn deserialize<__D>(deserializer: __D) -> core::result::Result<Self, __D::Error>
149 where
150 __D: _serde::Deserializer<'de>,
151 {
152 #[allow(non_camel_case_types)]
153 enum __Field {
154 m_alreadyUsed,
155 m_wheelCollisionFilterInfo,
156 m_wheelStates,
157 m_rejectChassisListener,
158 m_maxExtraPenetration,
159 m_startPointTolerance,
160 __ignore,
161 }
162 struct __FieldVisitor;
163 impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
164 type Value = __Field;
165 fn expecting(
166 &self,
167 __formatter: &mut core::fmt::Formatter,
168 ) -> core::fmt::Result {
169 core::fmt::Formatter::write_str(__formatter, "field identifier")
170 }
171 #[allow(clippy::match_single_binding)]
173 #[allow(clippy::reversed_empty_ranges)]
174 #[allow(clippy::single_match)]
175 fn visit_key<__E>(
176 self,
177 __value: &str,
178 ) -> core::result::Result<Self::Value, __E>
179 where
180 __E: _serde::de::Error,
181 {
182 match __value {
183 "alreadyUsed" => Ok(__Field::m_alreadyUsed),
184 "wheelCollisionFilterInfo" => {
185 Ok(__Field::m_wheelCollisionFilterInfo)
186 }
187 "wheelStates" => Ok(__Field::m_wheelStates),
188 "rejectChassisListener" => Ok(__Field::m_rejectChassisListener),
189 "maxExtraPenetration" => Ok(__Field::m_maxExtraPenetration),
190 "startPointTolerance" => Ok(__Field::m_startPointTolerance),
191 _ => Ok(__Field::__ignore),
192 }
193 }
194 }
195 impl<'de> _serde::Deserialize<'de> for __Field {
196 #[inline]
197 fn deserialize<__D>(
198 __deserializer: __D,
199 ) -> core::result::Result<Self, __D::Error>
200 where
201 __D: _serde::Deserializer<'de>,
202 {
203 _serde::Deserializer::deserialize_key(__deserializer, __FieldVisitor)
204 }
205 }
206 struct __hkpVehicleLinearCastWheelCollideVisitor<'de> {
207 marker: _serde::__private::PhantomData<hkpVehicleLinearCastWheelCollide>,
208 lifetime: _serde::__private::PhantomData<&'de ()>,
209 }
210 #[allow(clippy::match_single_binding)]
211 #[allow(clippy::reversed_empty_ranges)]
212 #[allow(clippy::single_match)]
213 impl<'de> _serde::de::Visitor<'de>
214 for __hkpVehicleLinearCastWheelCollideVisitor<'de> {
215 type Value = hkpVehicleLinearCastWheelCollide;
216 fn expecting(
217 &self,
218 __formatter: &mut core::fmt::Formatter,
219 ) -> core::fmt::Result {
220 core::fmt::Formatter::write_str(
221 __formatter,
222 "struct hkpVehicleLinearCastWheelCollide",
223 )
224 }
225 fn visit_struct_for_bytes<__A>(
226 self,
227 mut __map: __A,
228 ) -> _serde::__private::Result<Self::Value, __A::Error>
229 where
230 __A: _serde::de::MapAccess<'de>,
231 {
232 let __ptr = __A::class_ptr(&mut __map);
233 let parent = __A::parent_value(&mut __map)?;
234 let mut m_wheelCollisionFilterInfo: _serde::__private::Option<u32> = _serde::__private::None;
235 let mut m_wheelStates: _serde::__private::Option<
236 Vec<hkpVehicleLinearCastWheelCollideWheelState>,
237 > = _serde::__private::None;
238 let mut m_rejectChassisListener: _serde::__private::Option<
239 hkpRejectChassisListener,
240 > = _serde::__private::None;
241 let mut m_maxExtraPenetration: _serde::__private::Option<f32> = _serde::__private::None;
242 let mut m_startPointTolerance: _serde::__private::Option<f32> = _serde::__private::None;
243 for i in 0..5usize {
244 match i {
245 0usize => {
246 if _serde::__private::Option::is_some(
247 &m_wheelCollisionFilterInfo,
248 ) {
249 return _serde::__private::Err(
250 <__A::Error as _serde::de::Error>::duplicate_field(
251 "wheelCollisionFilterInfo",
252 ),
253 );
254 }
255 m_wheelCollisionFilterInfo = _serde::__private::Some(
256 match __A::next_value::<u32>(&mut __map) {
257 _serde::__private::Ok(__val) => __val,
258 _serde::__private::Err(__err) => {
259 return _serde::__private::Err(__err);
260 }
261 },
262 );
263 }
264 1usize => {
265 if _serde::__private::Option::is_some(&m_wheelStates) {
266 return _serde::__private::Err(
267 <__A::Error as _serde::de::Error>::duplicate_field(
268 "wheelStates",
269 ),
270 );
271 }
272 __A::pad(&mut __map, 0usize, 4usize)?;
273 m_wheelStates = _serde::__private::Some(
274 match __A::next_value::<
275 Vec<hkpVehicleLinearCastWheelCollideWheelState>,
276 >(&mut __map) {
277 _serde::__private::Ok(__val) => __val,
278 _serde::__private::Err(__err) => {
279 return _serde::__private::Err(__err);
280 }
281 },
282 );
283 }
284 2usize => {
285 if _serde::__private::Option::is_some(
286 &m_rejectChassisListener,
287 ) {
288 return _serde::__private::Err(
289 <__A::Error as _serde::de::Error>::duplicate_field(
290 "rejectChassisListener",
291 ),
292 );
293 }
294 m_rejectChassisListener = _serde::__private::Some(
295 match __A::next_value::<
296 hkpRejectChassisListener,
297 >(&mut __map) {
298 _serde::__private::Ok(__val) => __val,
299 _serde::__private::Err(__err) => {
300 return _serde::__private::Err(__err);
301 }
302 },
303 );
304 }
305 3usize => {
306 if _serde::__private::Option::is_some(
307 &m_maxExtraPenetration,
308 ) {
309 return _serde::__private::Err(
310 <__A::Error as _serde::de::Error>::duplicate_field(
311 "maxExtraPenetration",
312 ),
313 );
314 }
315 m_maxExtraPenetration = _serde::__private::Some(
316 match __A::next_value::<f32>(&mut __map) {
317 _serde::__private::Ok(__val) => __val,
318 _serde::__private::Err(__err) => {
319 return _serde::__private::Err(__err);
320 }
321 },
322 );
323 }
324 4usize => {
325 if _serde::__private::Option::is_some(
326 &m_startPointTolerance,
327 ) {
328 return _serde::__private::Err(
329 <__A::Error as _serde::de::Error>::duplicate_field(
330 "startPointTolerance",
331 ),
332 );
333 }
334 m_startPointTolerance = _serde::__private::Some(
335 match __A::next_value::<f32>(&mut __map) {
336 _serde::__private::Ok(__val) => __val,
337 _serde::__private::Err(__err) => {
338 return _serde::__private::Err(__err);
339 }
340 },
341 );
342 }
343 _ => {}
344 }
345 }
346 let m_wheelCollisionFilterInfo = match m_wheelCollisionFilterInfo {
347 _serde::__private::Some(__field) => __field,
348 _serde::__private::None => {
349 return _serde::__private::Err(
350 <__A::Error as _serde::de::Error>::missing_field(
351 "wheelCollisionFilterInfo",
352 ),
353 );
354 }
355 };
356 let m_wheelStates = match m_wheelStates {
357 _serde::__private::Some(__field) => __field,
358 _serde::__private::None => {
359 return _serde::__private::Err(
360 <__A::Error as _serde::de::Error>::missing_field(
361 "wheelStates",
362 ),
363 );
364 }
365 };
366 let m_rejectChassisListener = match m_rejectChassisListener {
367 _serde::__private::Some(__field) => __field,
368 _serde::__private::None => {
369 return _serde::__private::Err(
370 <__A::Error as _serde::de::Error>::missing_field(
371 "rejectChassisListener",
372 ),
373 );
374 }
375 };
376 let m_maxExtraPenetration = match m_maxExtraPenetration {
377 _serde::__private::Some(__field) => __field,
378 _serde::__private::None => {
379 return _serde::__private::Err(
380 <__A::Error as _serde::de::Error>::missing_field(
381 "maxExtraPenetration",
382 ),
383 );
384 }
385 };
386 let m_startPointTolerance = match m_startPointTolerance {
387 _serde::__private::Some(__field) => __field,
388 _serde::__private::None => {
389 return _serde::__private::Err(
390 <__A::Error as _serde::de::Error>::missing_field(
391 "startPointTolerance",
392 ),
393 );
394 }
395 };
396 _serde::__private::Ok(hkpVehicleLinearCastWheelCollide {
397 __ptr,
398 parent,
399 m_wheelCollisionFilterInfo,
400 m_wheelStates,
401 m_rejectChassisListener,
402 m_maxExtraPenetration,
403 m_startPointTolerance,
404 })
405 }
406 #[allow(clippy::manual_unwrap_or_default)]
407 fn visit_struct<__A>(
408 self,
409 mut __map: __A,
410 ) -> _serde::__private::Result<Self::Value, __A::Error>
411 where
412 __A: _serde::de::MapAccess<'de>,
413 {
414 let mut m_alreadyUsed: _serde::__private::Option<bool> = _serde::__private::None;
415 let mut m_wheelCollisionFilterInfo: _serde::__private::Option<u32> = _serde::__private::None;
416 let mut m_wheelStates: _serde::__private::Option<
417 Vec<hkpVehicleLinearCastWheelCollideWheelState>,
418 > = _serde::__private::None;
419 let mut m_rejectChassisListener: _serde::__private::Option<
420 hkpRejectChassisListener,
421 > = _serde::__private::None;
422 let mut m_maxExtraPenetration: _serde::__private::Option<f32> = _serde::__private::None;
423 let mut m_startPointTolerance: _serde::__private::Option<f32> = _serde::__private::None;
424 while let _serde::__private::Some(__key) = {
425 __A::next_key::<__Field>(&mut __map)?
426 } {
427 match __key {
428 __Field::m_alreadyUsed => {
429 #[cfg(
430 any(feature = "strict", feature = "ignore_duplicates")
431 )]
432 if _serde::__private::Option::is_some(&m_alreadyUsed) {
433 #[cfg(feature = "ignore_duplicates")]
434 {
435 __A::skip_value(&mut __map)?;
436 continue;
437 }
438 #[cfg(feature = "strict")]
439 return _serde::__private::Err(
440 <__A::Error as _serde::de::Error>::duplicate_field(
441 "alreadyUsed",
442 ),
443 );
444 }
445 m_alreadyUsed = _serde::__private::Some(
446 match __A::next_value::<bool>(&mut __map) {
447 _serde::__private::Ok(__val) => __val,
448 _serde::__private::Err(__err) => {
449 return _serde::__private::Err(__err);
450 }
451 },
452 );
453 }
454 __Field::m_wheelCollisionFilterInfo => {
455 #[cfg(
456 any(feature = "strict", feature = "ignore_duplicates")
457 )]
458 if _serde::__private::Option::is_some(
459 &m_wheelCollisionFilterInfo,
460 ) {
461 #[cfg(feature = "ignore_duplicates")]
462 {
463 __A::skip_value(&mut __map)?;
464 continue;
465 }
466 #[cfg(feature = "strict")]
467 return _serde::__private::Err(
468 <__A::Error as _serde::de::Error>::duplicate_field(
469 "wheelCollisionFilterInfo",
470 ),
471 );
472 }
473 m_wheelCollisionFilterInfo = _serde::__private::Some(
474 match __A::next_value::<u32>(&mut __map) {
475 _serde::__private::Ok(__val) => __val,
476 _serde::__private::Err(__err) => {
477 return _serde::__private::Err(__err);
478 }
479 },
480 );
481 }
482 __Field::m_wheelStates => {
483 #[cfg(
484 any(feature = "strict", feature = "ignore_duplicates")
485 )]
486 if _serde::__private::Option::is_some(&m_wheelStates) {
487 #[cfg(feature = "ignore_duplicates")]
488 {
489 __A::skip_value(&mut __map)?;
490 continue;
491 }
492 #[cfg(feature = "strict")]
493 return _serde::__private::Err(
494 <__A::Error as _serde::de::Error>::duplicate_field(
495 "wheelStates",
496 ),
497 );
498 }
499 m_wheelStates = _serde::__private::Some(
500 match __A::next_value::<
501 Vec<hkpVehicleLinearCastWheelCollideWheelState>,
502 >(&mut __map) {
503 _serde::__private::Ok(__val) => __val,
504 _serde::__private::Err(__err) => {
505 return _serde::__private::Err(__err);
506 }
507 },
508 );
509 }
510 __Field::m_rejectChassisListener => {
511 #[cfg(
512 any(feature = "strict", feature = "ignore_duplicates")
513 )]
514 if _serde::__private::Option::is_some(
515 &m_rejectChassisListener,
516 ) {
517 #[cfg(feature = "ignore_duplicates")]
518 {
519 __A::skip_value(&mut __map)?;
520 continue;
521 }
522 #[cfg(feature = "strict")]
523 return _serde::__private::Err(
524 <__A::Error as _serde::de::Error>::duplicate_field(
525 "rejectChassisListener",
526 ),
527 );
528 }
529 m_rejectChassisListener = _serde::__private::Some(
530 match __A::next_value::<
531 hkpRejectChassisListener,
532 >(&mut __map) {
533 _serde::__private::Ok(__val) => __val,
534 _serde::__private::Err(__err) => {
535 return _serde::__private::Err(__err);
536 }
537 },
538 );
539 }
540 __Field::m_maxExtraPenetration => {
541 #[cfg(
542 any(feature = "strict", feature = "ignore_duplicates")
543 )]
544 if _serde::__private::Option::is_some(
545 &m_maxExtraPenetration,
546 ) {
547 #[cfg(feature = "ignore_duplicates")]
548 {
549 __A::skip_value(&mut __map)?;
550 continue;
551 }
552 #[cfg(feature = "strict")]
553 return _serde::__private::Err(
554 <__A::Error as _serde::de::Error>::duplicate_field(
555 "maxExtraPenetration",
556 ),
557 );
558 }
559 m_maxExtraPenetration = _serde::__private::Some(
560 match __A::next_value::<f32>(&mut __map) {
561 _serde::__private::Ok(__val) => __val,
562 _serde::__private::Err(__err) => {
563 return _serde::__private::Err(__err);
564 }
565 },
566 );
567 }
568 __Field::m_startPointTolerance => {
569 #[cfg(
570 any(feature = "strict", feature = "ignore_duplicates")
571 )]
572 if _serde::__private::Option::is_some(
573 &m_startPointTolerance,
574 ) {
575 #[cfg(feature = "ignore_duplicates")]
576 {
577 __A::skip_value(&mut __map)?;
578 continue;
579 }
580 #[cfg(feature = "strict")]
581 return _serde::__private::Err(
582 <__A::Error as _serde::de::Error>::duplicate_field(
583 "startPointTolerance",
584 ),
585 );
586 }
587 m_startPointTolerance = _serde::__private::Some(
588 match __A::next_value::<f32>(&mut __map) {
589 _serde::__private::Ok(__val) => __val,
590 _serde::__private::Err(__err) => {
591 return _serde::__private::Err(__err);
592 }
593 },
594 );
595 }
596 _ => __A::skip_value(&mut __map)?,
597 }
598 }
599 let m_alreadyUsed = match m_alreadyUsed {
600 _serde::__private::Some(__field) => __field,
601 _serde::__private::None => {
602 #[cfg(feature = "strict")]
603 return _serde::__private::Err(
604 <__A::Error as _serde::de::Error>::missing_field(
605 "alreadyUsed",
606 ),
607 );
608 #[cfg(not(feature = "strict"))] Default::default()
609 }
610 };
611 let m_wheelCollisionFilterInfo = match m_wheelCollisionFilterInfo {
612 _serde::__private::Some(__field) => __field,
613 _serde::__private::None => {
614 #[cfg(feature = "strict")]
615 return _serde::__private::Err(
616 <__A::Error as _serde::de::Error>::missing_field(
617 "wheelCollisionFilterInfo",
618 ),
619 );
620 #[cfg(not(feature = "strict"))] Default::default()
621 }
622 };
623 let m_wheelStates = match m_wheelStates {
624 _serde::__private::Some(__field) => __field,
625 _serde::__private::None => {
626 #[cfg(feature = "strict")]
627 return _serde::__private::Err(
628 <__A::Error as _serde::de::Error>::missing_field(
629 "wheelStates",
630 ),
631 );
632 #[cfg(not(feature = "strict"))] Default::default()
633 }
634 };
635 let m_rejectChassisListener = match m_rejectChassisListener {
636 _serde::__private::Some(__field) => __field,
637 _serde::__private::None => {
638 #[cfg(feature = "strict")]
639 return _serde::__private::Err(
640 <__A::Error as _serde::de::Error>::missing_field(
641 "rejectChassisListener",
642 ),
643 );
644 #[cfg(not(feature = "strict"))] Default::default()
645 }
646 };
647 let m_maxExtraPenetration = match m_maxExtraPenetration {
648 _serde::__private::Some(__field) => __field,
649 _serde::__private::None => {
650 #[cfg(feature = "strict")]
651 return _serde::__private::Err(
652 <__A::Error as _serde::de::Error>::missing_field(
653 "maxExtraPenetration",
654 ),
655 );
656 #[cfg(not(feature = "strict"))] Default::default()
657 }
658 };
659 let m_startPointTolerance = match m_startPointTolerance {
660 _serde::__private::Some(__field) => __field,
661 _serde::__private::None => {
662 #[cfg(feature = "strict")]
663 return _serde::__private::Err(
664 <__A::Error as _serde::de::Error>::missing_field(
665 "startPointTolerance",
666 ),
667 );
668 #[cfg(not(feature = "strict"))] Default::default()
669 }
670 };
671 let __ptr = None;
672 let parent = hkBaseObject { __ptr };
673 let parent = hkReferencedObject {
674 __ptr,
675 parent,
676 ..Default::default()
677 };
678 let parent = hkpVehicleWheelCollide {
679 __ptr,
680 parent,
681 m_alreadyUsed,
682 ..Default::default()
683 };
684 let __ptr = __A::class_ptr(&mut __map);
685 _serde::__private::Ok(hkpVehicleLinearCastWheelCollide {
686 __ptr,
687 parent,
688 m_wheelCollisionFilterInfo,
689 m_wheelStates,
690 m_rejectChassisListener,
691 m_maxExtraPenetration,
692 m_startPointTolerance,
693 })
694 }
695 }
696 const FIELDS: &[&str] = &[
697 "wheelCollisionFilterInfo",
698 "wheelStates",
699 "rejectChassisListener",
700 "maxExtraPenetration",
701 "startPointTolerance",
702 ];
703 _serde::Deserializer::deserialize_struct(
704 deserializer,
705 "hkpVehicleLinearCastWheelCollide",
706 FIELDS,
707 __hkpVehicleLinearCastWheelCollideVisitor {
708 marker: _serde::__private::PhantomData::<
709 hkpVehicleLinearCastWheelCollide,
710 >,
711 lifetime: _serde::__private::PhantomData,
712 },
713 )
714 }
715 }
716};