Introduce CanvasMaterial
This commit is contained in:
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user