use bevy::prelude::*;
use bevy_rapier3d::prelude::{NoUserData, RapierPhysicsPlugin};
pub mod systems;
pub mod utils;
pub mod app_state;
use app_state::AppState;
use systems::camera::CameraPlugin;
use systems::interface::UIPlugin;
use crate::{core::systems::cursor::camera_systems, worlds::WorldsPlugin};
use utils::{
debug::DebugPlugin,
settings::{settings_plugin, Settings},
};
pub struct CorePlugin;
impl Plugin for CorePlugin {
fn build(&self, app: &mut App) {
app.init_state::<AppState>()
.add_plugins((
RapierPhysicsPlugin::<NoUserData>::default(),
CameraPlugin, // Инициализация плагина камеры
UIPlugin, // Инициализация плагина пользовательского графического интерфейса
DebugPlugin, // Инициализация плагина для отладочного мониторинга
settings_plugin, // Инициализация плагина для работы с окном настроек
camera_systems,
// UserPlugin // Инициализация интерфейса взаимодействия пользователя
WorldsPlugin,
))
.insert_resource(Settings::load())
// Инициализация StartUP функции post_load_settings
.add_systems(Startup, (setup, post_load_settings).chain());
}
}
// ==================================================
//
// ==================================================
// [Test] Debug info panel
fn setup(
// mut commands: Commands,
mut app_state_next_state: ResMut<NextState<AppState>>,
) {
app_state_next_state.set(AppState::MainMenu);
}
fn post_load_settings(mut window: Query<&mut Window>, settings: Res<Settings>) {
if let Ok(mut window) = window.single_mut() {
window.present_mode = settings.check_vsync();
}
}