Загрузка данных


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();
    }
}