Introduce CanvasMaterial

This commit is contained in:
2023-01-21 23:00:17 +01:00
parent d788019363
commit 0124123189
4 changed files with 224 additions and 33 deletions

View File

@@ -1,22 +1,42 @@
use crate::grid;
use bevy::prelude::*;
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_startup_system(spawn_background);
app.add_plugin(Material2dPlugin::<CanvasMaterial>::default())
.add_startup_system(spawn_canvas);
}
}
fn spawn_background(mut commands: Commands) {
#[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<Assets<Mesh>>,
mut canvas_material_assets: ResMut<Assets<CanvasMaterial>>,
) {
commands
.spawn(SpriteBundle {
sprite: Sprite {
color: Color::DARK_GRAY,
custom_size: Some(Vec2::splat(grid::SEGMENT_SIZE * f32::from(grid::SIZE))),
..Default::default()
},
.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"));