use bevy::asset::AssetMode::Processed; #[cfg(feature = "debug_features")] use bevy::camera_controller::free_camera::FreeCameraPlugin; use bevy::gltf::GltfPlugin; use bevy::image::{ImageAddressMode, ImagePlugin, ImageSamplerDescriptor}; use bevy::prelude::*; #[cfg(feature = "debug_features")] use bevy_egui::EguiPlugin; #[cfg(feature = "debug_features")] use bevy_inspector_egui::quick::WorldInspectorPlugin; fn main() -> AppExit { // A `Repeat` sampler so the tileable materials authored in the // editor render the same way at runtime; Bevy's default // `ClampToEdge` smears texture edges on brush geometry. let default_sampler = ImageSamplerDescriptor::linear() .set_address_mode(ImageAddressMode::Repeat) .set_anisotropic_filter(16) .clone(); let default_plugins = DefaultPlugins .set(ImagePlugin { default_sampler: default_sampler.clone(), }) .set(GltfPlugin { default_sampler, ..default() }) .set(AssetPlugin { mode: Processed, use_asset_processor_override: Some(cfg!(feature = "development")), ..default() }); let mut app = App::new(); app.add_plugins(default_plugins) .add_plugins(avian3d::prelude::PhysicsPlugins::default()) .add_plugins(shinespark::GamePlugin) .insert_resource(Time::::from_hz(60.0)); #[cfg(feature = "debug_features")] app.add_plugins(( FreeCameraPlugin, EguiPlugin::default(), WorldInspectorPlugin::default(), )); app.run() }