Files
bevy-snake/src/canvas.rs
2023-01-21 23:00:17 +01:00

44 lines
1.2 KiB
Rust

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::<CanvasMaterial>::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<Assets<Mesh>>,
mut canvas_material_assets: ResMut<Assets<CanvasMaterial>>,
) {
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"));
}