pixel_map/
ray_cast.rs

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}