initial commit
This commit is contained in:
105
src/main.rs
Normal file
105
src/main.rs
Normal file
@@ -0,0 +1,105 @@
|
||||
use bevy::core_pipeline::tonemapping::Tonemapping;
|
||||
use bevy::math::*;
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::render_resource::{AsBindGroup, ShaderRef};
|
||||
use bevy_flycam::prelude::*;
|
||||
use bevy_trenchbroom::prelude::*;
|
||||
|
||||
#[derive(SolidClass, Component, Reflect)]
|
||||
#[reflect(Component)]
|
||||
#[geometry(GeometryProvider::new().smooth_by_default_angle().render())]
|
||||
pub struct Worldspawn;
|
||||
|
||||
#[derive(SolidClass, Component, Reflect, Default)]
|
||||
#[reflect(Component)]
|
||||
#[geometry(GeometryProvider::new().smooth_by_default_angle().render())]
|
||||
pub struct MyBaseClass {
|
||||
/// MY AWESOME VALUE!!
|
||||
pub my_value: u32,
|
||||
}
|
||||
|
||||
const SHADER_ASSET_PATH: &str = "shaders/custom_material.wgsl";
|
||||
|
||||
#[derive(Asset, Reflect, Default, AsBindGroup, Debug, Clone)]
|
||||
struct CustomMaterial {
|
||||
#[uniform(0)]
|
||||
color: LinearRgba,
|
||||
#[texture(1)]
|
||||
#[sampler(2)]
|
||||
color_texture: Option<Handle<Image>>,
|
||||
}
|
||||
|
||||
impl Material for CustomMaterial {
|
||||
fn fragment_shader() -> ShaderRef {
|
||||
SHADER_ASSET_PATH.into()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut app = App::new();
|
||||
|
||||
app.add_plugins(DefaultPlugins.set(ImagePlugin {
|
||||
default_sampler: repeating_image_sampler(false),
|
||||
}));
|
||||
|
||||
// bevy_flycam setup so we can get a closer look at the scene, mainly for debugging
|
||||
app.add_plugins(PlayerPlugin);
|
||||
// app.add_plugins(
|
||||
// MaterializePlugin::new(TomlMaterialDeserializer).with_simple_loader_settings(Some(
|
||||
// SimpleGenericMaterialLoaderSettings {
|
||||
// material: |image| {
|
||||
// CustomMaterial {
|
||||
// color_texture: Some(image),
|
||||
// ..Default::default()
|
||||
// }
|
||||
// .into()
|
||||
// },
|
||||
// ..Default::default()
|
||||
// },
|
||||
// )),
|
||||
// );
|
||||
// app.add_plugins(MaterialPlugin::<CustomMaterial>::default());
|
||||
// app.register_generic_material::<CustomMaterial>();
|
||||
|
||||
app.insert_resource(MovementSettings {
|
||||
sensitivity: 0.00005,
|
||||
speed: 6.,
|
||||
})
|
||||
// .insert_resource(AmbientLight {
|
||||
// brightness: 1000.0,
|
||||
// ..Default::default()
|
||||
// })
|
||||
.add_plugins(bevy_inspector_egui::quick::WorldInspectorPlugin::default());
|
||||
|
||||
app.add_plugins(TrenchBroomPlugin(TrenchBroomConfig::new("hedz")));
|
||||
|
||||
app.add_systems(Startup, write_trenchbroom_config);
|
||||
app.add_systems(PostStartup, setup_scene);
|
||||
app.add_systems(Update, (set_materials_unlit, disable_tone_mapping));
|
||||
|
||||
app.run();
|
||||
}
|
||||
|
||||
fn setup_scene(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||
commands.spawn(SceneRoot(asset_server.load("maps/map1.map#Scene")));
|
||||
}
|
||||
|
||||
fn write_trenchbroom_config(server: Res<TrenchBroomServer>) {
|
||||
server.config.write_folder("trenchbroom/hedz").unwrap()
|
||||
}
|
||||
|
||||
fn disable_tone_mapping(mut cams: Query<&mut Tonemapping, With<Camera>>) {
|
||||
for mut tm in cams.iter_mut() {
|
||||
*tm = Tonemapping::None;
|
||||
}
|
||||
}
|
||||
|
||||
fn set_materials_unlit(mut materials: ResMut<Assets<StandardMaterial>>) {
|
||||
if !materials.is_changed() {
|
||||
return;
|
||||
}
|
||||
|
||||
for (_, material) in materials.iter_mut() {
|
||||
material.unlit = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user