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
#[cfg(not(feature = "metrics"))]
macro_rules! measure {
    ($metric:expr, $e:expr) => {
        $e
    };
}

// mod bwem;
mod projected;
mod shm;

pub use crate::types::*;
pub use bwapi_wrapper::prelude::*;
pub mod aimodule;
pub mod bullet;
pub mod can_do;
pub mod client;
pub mod command;
pub mod force;
pub mod game;
pub mod player;
pub mod predicate;
pub mod region;
pub mod sma;
pub mod types;
pub mod unit;

pub use aimodule::AiModule;
pub use bullet::{Bullet, BulletType};
pub use force::Force;
pub use game::Game;
pub use player::{Player, PlayerId};
pub use unit::{Unit, UnitId};

pub fn start<M: AiModule>(build_module: impl FnOnce(&Game) -> M) {
    let mut client = client::Client::default();

    println!("Waiting for frame to start");
    let mut module = Box::new(build_module(client.get_game()));

    while !client.get_game().is_in_game() {
        client.update(&mut *module);
    }

    while client.get_game().is_in_game() {
        client.update(&mut *module);
    }
}