1#[cfg(feature = "serialize")]
2use serde::{Deserialize, Serialize};
3
4use super::ILine;
5use super::LinePixelIterator;
6use bevy_math::UVec2;
7
8#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
9#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
10pub struct RayCastQuery {
11 pub line: ILine,
12}
13
14impl RayCastQuery {
15 #[inline]
16 #[must_use]
17 pub fn new(line: ILine) -> Self {
18 Self { line }
19 }
20}
21
22#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
23#[derive(Debug, Clone, Copy, PartialEq)]
24pub struct RayCastResult {
25 pub collision_point: Option<UVec2>,
26 pub distance: f32,
27 pub traversed: u32,
28}
29
30impl RayCastResult {
31 #[inline]
32 #[must_use]
33 pub fn is_hit(&self) -> bool {
34 self.collision_point.is_some()
35 }
36}
37
38#[derive(Debug, Clone, PartialEq)]
39pub(super) struct RayCastContext {
40 pub(super) line_iter: LinePixelIterator,
41 pub(super) traversed: u32,
42}
43
44#[derive(Debug, Clone, Copy, PartialEq)]
45pub enum RayCast {
46 Continue,
47 Hit,
48}