pixel_map 0.4.0

A map of pixels implemented by an MX quadtree.
Documentation
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};

use super::ILine;
use super::LinePixelIterator;
use bevy_math::UVec2;

#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
pub struct RayCastQuery {
    pub line: ILine,
}

impl RayCastQuery {
    #[inline]
    #[must_use]
    pub fn new(line: ILine) -> Self {
        Self { line }
    }
}

#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct RayCastResult {
    pub collision_point: Option<UVec2>,
    pub distance: f32,
    pub traversed: u32,
}

impl RayCastResult {
    #[inline]
    #[must_use]
    pub fn is_hit(&self) -> bool {
        self.collision_point.is_some()
    }
}

#[derive(Debug, Clone, PartialEq)]
pub(super) struct RayCastContext {
    pub(super) line_iter: LinePixelIterator,
    pub(super) traversed: u32,
}

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum RayCast {
    Continue,
    Hit,
}