add shading.rs
This commit is contained in:
parent
8248d43463
commit
fc01b68086
|
@ -5,6 +5,7 @@ mod chat;
|
|||
mod commands;
|
||||
mod effects;
|
||||
mod hud;
|
||||
mod shading;
|
||||
mod var;
|
||||
mod world;
|
||||
|
||||
|
|
21
src/shading.rs
Normal file
21
src/shading.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy::render::render_resource::{AsBindGroup, ShaderRef};
|
||||
|
||||
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
|
||||
pub struct JupitersRing {
|
||||
pub alpha_mode: AlphaMode,
|
||||
#[uniform(0)]
|
||||
pub ring_radius: f32,
|
||||
#[uniform(1)]
|
||||
pub jupiter_radius: f32,
|
||||
}
|
||||
|
||||
impl Material for JupitersRing {
|
||||
fn fragment_shader() -> ShaderRef {
|
||||
"shaders/jupiters_rings.wgsl".into()
|
||||
}
|
||||
fn alpha_mode(&self) -> AlphaMode {
|
||||
self.alpha_mode
|
||||
}
|
||||
}
|
||||
|
27
src/world.rs
27
src/world.rs
|
@ -1,6 +1,5 @@
|
|||
use crate::{actor, audio, hud, nature, var};
|
||||
use crate::{actor, audio, hud, nature, shading, var};
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::render_resource::{AsBindGroup, ShaderRef};
|
||||
use bevy::math::{DVec3, I64Vec3};
|
||||
use bevy::scene::{InstanceId, SceneInstance};
|
||||
use bevy_xpbd_3d::prelude::*;
|
||||
|
@ -53,7 +52,7 @@ impl Plugin for WorldPlugin {
|
|||
app.add_systems(PostUpdate, handle_despawn);
|
||||
app.add_systems(Update, spawn_despawn_asteroids);
|
||||
app.add_plugins(PhysicsPlugins::default());
|
||||
app.add_plugins(MaterialPlugin::<RingMaterial>::default());
|
||||
app.add_plugins(MaterialPlugin::<shading::JupitersRing>::default());
|
||||
//app.add_plugins(PhysicsDebugPlugin::default());
|
||||
app.insert_resource(Gravity(DVec3::splat(0.0)));
|
||||
app.insert_resource(AsteroidUpdateTimer(
|
||||
|
@ -97,24 +96,6 @@ pub struct DespawnEvent {
|
|||
origin: I64Vec3,
|
||||
}
|
||||
|
||||
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
|
||||
pub struct RingMaterial {
|
||||
alpha_mode: AlphaMode,
|
||||
#[uniform(0)]
|
||||
ring_radius: f32,
|
||||
#[uniform(1)]
|
||||
jupiter_radius: f32,
|
||||
}
|
||||
|
||||
impl Material for RingMaterial {
|
||||
fn fragment_shader() -> ShaderRef {
|
||||
"shaders/jupiters_rings.wgsl".into()
|
||||
}
|
||||
fn alpha_mode(&self) -> AlphaMode {
|
||||
self.alpha_mode
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Star;
|
||||
|
||||
|
@ -122,7 +103,7 @@ pub fn setup(
|
|||
mut commands: Commands,
|
||||
mut meshes: ResMut<Assets<Mesh>>,
|
||||
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||
mut materials_custom: ResMut<Assets<RingMaterial>>,
|
||||
mut materials_custom: ResMut<Assets<shading::JupitersRing>>,
|
||||
asset_server: Res<AssetServer>,
|
||||
) {
|
||||
// Load assets
|
||||
|
@ -205,7 +186,7 @@ pub fn setup(
|
|||
commands.spawn((
|
||||
MaterialMeshBundle {
|
||||
mesh: meshes.add(Mesh::from(Cylinder::new(ring_radius, 1.0))),
|
||||
material: materials_custom.add(RingMaterial {
|
||||
material: materials_custom.add(shading::JupitersRing {
|
||||
alpha_mode: AlphaMode::Blend,
|
||||
ring_radius: ring_radius,
|
||||
jupiter_radius: jupiter_radius,
|
||||
|
|
Loading…
Reference in a new issue