44 lines
1.2 KiB
Rust
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"));
|
|
}
|