use crate::grid; use bevy::{ prelude::*, reflect::TypeUuid, render::render_resource::{AsBindGroup, ShaderRef}, sprite::{Material2d, Material2dPlugin, MaterialMesh2dBundle}, }; pub struct CanvasPlugin; impl Plugin for CanvasPlugin { fn build(&self, app: &mut App) { app.add_plugin(Material2dPlugin::::default()) .add_startup_system(spawn_canvas); } } #[derive(AsBindGroup, TypeUuid, Clone)] #[uuid = "24f83f6e-e52d-41a6-bf1d-0e46e57a4995"] struct CanvasMaterial {} impl Material2d for CanvasMaterial { fn fragment_shader() -> ShaderRef { "canvas_shader.wgsl".into() } } fn spawn_canvas( mut commands: Commands, mut mesh_assets: ResMut>, mut canvas_material_assets: ResMut>, ) { commands .spawn(MaterialMesh2dBundle { mesh: mesh_assets.add(Mesh::from(shape::Quad::default())).into(), material: canvas_material_assets.add(CanvasMaterial {}), transform: Transform::from_scale(Vec3::splat( grid::SEGMENT_SIZE * f32::from(grid::SIZE), )), ..Default::default() }) .insert(Name::new("Canvas")); }