Skip to main content

Raycaster2D

Struct Raycaster2D 

Source
pub struct Raycaster2D { /* private fields */ }
Expand description

DDA Raycaster Engine for 2.5D Grid Maps.

Implementations§

Source§

impl Raycaster2D

Source

pub fn new(width: usize, height: usize) -> Self

Source

pub fn render_walls( &self, pos_x: f32, pos_y: f32, angle: f32, head_bob: i32, map: &[u8], map_size: usize, wall_colors: &[Rgb565], z_buffer: &mut [f32], framebuf_u32: &mut [u32], )

Render 3D textured walls over an existing Mode 7 / background framebuffer.

Source

pub fn render_walls_textured<F>( &self, pos_x: f32, pos_y: f32, angle: f32, head_bob: i32, map: &[u8], map_size: usize, z_buffer: &mut [f32], framebuf_u32: &mut [u32], get_pixel: F, )
where F: Fn(u8, usize, usize) -> Rgb565,

Render 3D textured walls using a per-tile pixel callback instead of a flat colour palette.

The get_pixel closure receives (tile_id, tex_x, tex_y) and returns the raw Rgb565 texel before distance shading is applied. This lets callers supply hand-painted bitmaps, procedural patterns (brick mortar, tech panels, hazard stripes …) or atlas lookups without the overhead of a full texture object.

All other parameters are identical to Self::render_walls.

Source

pub fn render_sprites_fast<P, F, T>( &self, pos_x: f32, pos_y: f32, angle: f32, head_bob: i32, sprites: &[RaycastSprite], z_buffer: &[f32], framebuf: &mut [Rgb565], prepare_sprite: P, get_pixel: F, )
where P: Fn(&RaycastSprite, f32) -> Option<T>, F: Fn(&T, usize, usize, usize, usize) -> Option<Rgb565>,

Fast-path sprite rendering using a per-sprite setup callback and per-pixel color getter.

prepare_sprite(sprite, transform_y) is called ONCE PER SPRITE with the perpendicular distance transform_y. Return None to skip rendering the sprite, or Some(data) to pass pre-calculated properties (such as pre-shaded colors) to get_pixel.

Source

pub fn render_sprites<F>( &self, pos_x: f32, pos_y: f32, angle: f32, head_bob: i32, sprites: &[RaycastSprite], z_buffer: &[f32], framebuf: &mut [Rgb565], get_color: F, )
where F: Fn(&RaycastSprite, f32) -> Option<Rgb565>,

Render billboarded 2.5D sprites (enemies, items, projectiles) into a per-pixel Rgb565 framebuffer with z-buffer occlusion against previously rendered walls.

Trait Implementations§

Source§

impl Clone for Raycaster2D

Source§

fn clone(&self) -> Raycaster2D

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Raycaster2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.