mod audio; mod camera; mod world; mod settings; mod hud; mod actor; mod effects; #[allow(dead_code)] mod nature; use bevy::window::{Window, WindowMode, PrimaryWindow, CursorGrabMode}; use bevy::diagnostic::FrameTimeDiagnosticsPlugin; use bevy::prelude::*; use bevy_embedded_assets::{EmbeddedAssetPlugin, PluginMode}; use std::env; fn main() { let args: Vec = env::args().collect(); if args.len() > 1 { if args[1] == "--version" || args[1] == "-v" { let version = option_env!("CARGO_PKG_VERSION").unwrap(); let name = option_env!("CARGO_PKG_NAME").unwrap(); let homepage = option_env!("CARGO_PKG_HOMEPAGE").unwrap(); println!("{name} {version}"); println!("License: GNU GPL version 3: https://gnu.org/licenses/gpl.html"); println!("{homepage}"); return; } } if cfg!(debug_assertions) { App::new().add_plugins(OutFlyPlugin).run(); } else { // In release builds, embed assets into the binary App::new().add_plugins(( EmbeddedAssetPlugin { mode: PluginMode::ReplaceDefault }, OutFlyPlugin, )).run(); } } pub struct OutFlyPlugin; impl Plugin for OutFlyPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, setup); app.add_systems(Update, handle_input); app.insert_resource(settings::Settings::default()); app.add_plugins(( DefaultPlugins,//.set(ImagePlugin::default_nearest()), FrameTimeDiagnosticsPlugin, world::WorldPlugin, camera::CameraControllerPlugin, hud::HudPlugin, actor::ActorPlugin, audio::AudioPlugin, effects::EffectsPlugin, )); } } fn setup( mut windows: Query<&mut Window, With> ) { for mut window in &mut windows { window.cursor.grab_mode = CursorGrabMode::Locked; window.cursor.visible = false; window.mode = WindowMode::Fullscreen; window.title = "OutFly".to_string(); } } fn handle_input( keyboard_input: Res>, mut settings: ResMut, mut app_exit_events: ResMut> ) { if keyboard_input.pressed(settings.key_exit) { app_exit_events.send(bevy::app::AppExit); } if keyboard_input.just_pressed(settings.key_restart) { settings.reset(); } }