DEVELOPMENT ENVIRONMENT

~liljamo/deck-builder

ref: f9461f049a1ea59c8bc51d9b387e8a60b07269ca deck-builder/client/src/main.rs -rw-r--r-- 2.0 KiB
f9461f04Jonni Liljamo feat(client): add macros for http requests 1 year, 8 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * This file is part of laurelin_client
 * Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
 *
 * Licensed under GPL-3.0-only.
 * See LICENSE for licensing information.
 */

use bevy::prelude::*;
use bevy_editor_pls::EditorPlugin;
use bevy_egui::EguiPlugin;

mod api;
mod macros;
mod util;

mod plugins;

#[derive(Debug, Clone, PartialEq, Eq, Hash, Default, States)]
enum AppState {
    #[default]
    Menu,
    InGame,
}

fn main() {
    let mut app = App::new();
    app.add_plugins(DefaultPlugins.set(WindowPlugin {
        primary_window: Some(Window {
            title: String::from("Laurelin Client"),
            ..Default::default()
        }),
        ..Default::default()
    }));

    info!("laurelin client initializing");

    // dev
    app.add_plugin(EditorPlugin::default());

    // the egui plugin is also added by the editor plugin
    if !app.is_plugin_added::<EguiPlugin>() {
        app.add_plugin(EguiPlugin);
    }

    // clear color
    app.insert_resource(ClearColor(Color::rgb(0.53, 0.53, 0.7)));

    // add the top level app state
    app.add_state::<AppState>();

    // holds networking options and a request agent
    app.insert_resource(NetworkingOptions {
        api_address: "http://localhost:8080/api".to_string(),
        req: reqwest::blocking::Client::new(),
        user_token: "".to_string(),
    });

    // has handlers for all async tasks
    app.add_plugin(plugins::AsyncTasksPlugin);

    app.add_plugin(plugins::MenuPlugin);

    app.add_startup_system(setup);
    app.run();

    info!("goodbye");
}

fn setup(mut commands: Commands) {
    let camera_bundle = Camera3dBundle::default();
    commands.spawn(camera_bundle);
}

#[derive(Clone, Resource)]
pub struct NetworkingOptions {
    /// api address with no trailing slash
    api_address: String,
    /// reqwest agent
    /// NOTE: mainly for the future, because it can hold cookies
    req: reqwest::blocking::Client,
    /// feels wrong storing this here but "it's temporary"
    user_token: String,
}