bevy_2d_grid 0.2.0

A infinite 2D grid for Bevy
Documentation
mod render;

use bevy::{
    camera::visibility::{self, NoFrustumCulling, VisibilityClass},
    prelude::*,
    render::{sync_world::SyncToRenderWorld, view::RenderVisibleEntities},
};

pub struct InfiniteGrid2DPlugin;

impl Plugin for InfiniteGrid2DPlugin {
    fn build(&self, _app: &mut App) {}

    fn finish(&self, app: &mut App) {
        render::render_app_builder(app);
    }
}

#[derive(Component, Default)]
pub struct InfiniteGrid2D;

#[derive(Component, Copy, Clone)]
#[require(VisibilityClass)]
#[component(on_add = visibility::add_visibility_class::<InfiniteGrid2DSettings>)]
pub struct InfiniteGrid2DSettings {
    pub x_axis_color: Color,
    pub y_axis_color: Color,
    pub line_color: Color,
    pub grid_size: f32,
    pub sort_key: f32,
}

impl Default for InfiniteGrid2DSettings {
    fn default() -> Self {
        Self {
            x_axis_color: Color::srgb(0.25, 0.25, 0.25),
            y_axis_color: Color::srgb(0.25, 0.25, 0.25),
            line_color: Color::srgb(0.25, 0.25, 0.25),
            grid_size: 100.0,
            sort_key: 0.0,
        }
    }
}

#[derive(Bundle, Default)]
pub struct InfiniteGrid2DBundle {
    pub transform: Transform,
    pub global_transform: GlobalTransform,
    pub settings: InfiniteGrid2DSettings,
    pub grid: InfiniteGrid2D,
    pub visibility: Visibility,
    pub view_visibility: ViewVisibility,
    pub inherited_visibility: InheritedVisibility,
    pub shadow_casters: RenderVisibleEntities,
    pub no_frustum_culling: NoFrustumCulling,
    pub sync_to_render_world: SyncToRenderWorld,
}