/* * This file is part of sdbclient * Copyright (C) 2022 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use bevy::{ prelude::*, window::{CompositeAlphaMode, CursorGrabMode, PresentMode, WindowResizeConstraints}, }; use bevy_console::{ConsoleConfiguration, ConsolePlugin, ToggleConsoleKey}; use bevy_egui::EguiPlugin; use bevy_inspector_egui::WorldInspectorPlugin; mod api; mod cfg; mod plugins; mod util; /// Used to control the state of the game #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub enum GameState { Splash, MainMenu, Game, } fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins.set(WindowPlugin { window: WindowDescriptor { width: 1280., height: 720., position: WindowPosition::Centered, monitor: MonitorSelection::Primary, resize_constraints: WindowResizeConstraints { min_width: 1280., min_height: 720., max_width: 3840., max_height: 2160., }, scale_factor_override: Some(1.), title: "Deck Builder".to_string(), present_mode: PresentMode::Fifo, resizable: false, decorations: true, cursor_visible: true, cursor_grab_mode: CursorGrabMode::None, mode: WindowMode::Windowed, transparent: false, canvas: None, fit_canvas_to_parent: false, alpha_mode: CompositeAlphaMode::Auto, }, ..Default::default() })); app.add_plugin(EguiPlugin); app.add_plugin(WorldInspectorPlugin::new()); app.add_plugin(ConsolePlugin); app.insert_resource(ConsoleConfiguration { keys: vec![ ToggleConsoleKey::KeyCode(KeyCode::F1), ToggleConsoleKey::KeyCode(KeyCode::F13), ], ..Default::default() }); app.insert_resource(cfg::CfgDirs( directories::ProjectDirs::from("com", "liljamo", "deckbuilder") .expect("failed to get project directories"), )); app.insert_resource(cfg::CfgSettings { volume_master: 7, fullscreen: false, resolution: (1280., 720.), }) .insert_resource(cfg::CfgUser { logged_in: false, user_token: "".to_string(), id: "".to_string(), username: "".to_string(), email: "".to_string(), }) .insert_resource(cfg::CfgHidden { api_server: "http://localhost:8080/api".to_string(), }); app.add_startup_system(setup).add_state(GameState::Splash); app.add_plugin(plugins::connection_check::ConnectionCheckPlugin) .add_plugin(plugins::splash::SplashPlugin) .add_plugin(plugins::menu::MenuPlugin); app.run(); } fn setup(mut commands: Commands) { // Spawn a camera commands.spawn(Camera3dBundle::default()); } /// Utility function do despawn an entity and all its children pub fn despawn_screen(to_despawn: Query>, mut commands: Commands) { for entity in &to_despawn { commands.entity(entity).despawn_recursive(); } }