initial commit

This commit is contained in:
2025-02-26 15:51:59 +01:00
commit 931d0c2bf3
16 changed files with 6091 additions and 0 deletions

105
src/main.rs Normal file
View 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;
}
}