#[cfg(not(target_arch = "wasm32"))] mod audio; mod filters; mod game; mod levels; mod menu; mod particle_effect; use bevy::{ prelude::*, window::{WindowId, WindowMode}, }; use bevy_rapier2d::prelude::*; #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] enum AppState { Menu, Game, Win, } fn main() { let (audio_event_sender, audio_event_receiver) = crossbeam_channel::bounded::(512); #[cfg(not(target_arch = "wasm32"))] std::thread::spawn(move || audio::setup(audio_event_receiver)); App::new() .insert_resource(Msaa { samples: 4 }) .insert_resource(audio_event_sender) .add_state(AppState::Menu) .insert_resource(ClearColor(Color::BLACK)) .add_plugins(DefaultPlugins) .add_plugin(RapierPhysicsPlugin::::pixels_per_meter(64.0)) //.add_plugin(RapierDebugRenderPlugin::default()) .add_plugin(menu::MenuPlugin) .add_plugin(game::GamePlugin) .add_plugin(particle_effect::ParticleEffectPlugin) //.add_plugin(bevy_inspector_egui::WorldInspectorPlugin::new()) .add_system(keyboard_util_system) .add_startup_system(setup) .run(); } fn setup(mut commands: Commands, mut windows: ResMut, asset_server: Res) { windows .get_mut(WindowId::primary()) .unwrap() .set_title(String::from("Bevyjam")); #[cfg(not(target_arch = "wasm32"))] let font: Handle = asset_server.load("UacariLegacy-Thin.ttf"); #[cfg(target_arch = "wasm32")] let font: Handle = asset_server.load("UacariLegacy-Thin.ttf"); commands.insert_resource(font); commands.spawn_bundle(Camera2dBundle::default()); commands.insert_resource(AmbientLight { color: Color::WHITE, brightness: 0.6, }); } fn keyboard_util_system(keyboard_input: Res>, mut windows: ResMut) { #[cfg(not(target_arch = "wasm32"))] { if keyboard_input.just_released(KeyCode::Escape) { std::process::exit(0); } if keyboard_input.just_pressed(KeyCode::F11) { if let Some(window) = windows.get_primary_mut() { window.set_mode(match window.mode() { WindowMode::Windowed => WindowMode::Fullscreen, _ => WindowMode::Windowed, }); } } } }