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
use state::State;
use system::System;

mod tests;

mod state;
mod entity;
mod component;
mod system;

pub struct App {
    start_fn: System,
    systems: Vec<System>
}

impl App {
    pub fn new(start_fn: System) -> App {
        App { start_fn, systems: vec![] }
    }
    pub fn add_system(mut self, system: System) -> App {
        self.systems.push(system);
        self
    }
    pub fn run(self) {

        let mut state = State::new();

        (self.start_fn)(&mut state);

        'main: loop {
            for system in &self.systems {
                system(&mut state);

                if state.exiting() {
                    break 'main;
                }
            }
        }
    }
}