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

//! Types to process the world and entities.

pub use self::entity::{EntitySystem, EntityProcess};
pub use self::interact::{InteractSystem, InteractProcess};
pub use self::interval::{IntervalSystem};
pub use self::lazy::{LazySystem};

use EntityData;
use ComponentManager;
use ServiceManager;
use DataHelper;

pub mod entity;
pub mod interact;
pub mod interval;
pub mod lazy;

/// Generic base system type.
pub trait System
{
    type Components: ComponentManager;
    type Services: ServiceManager;
    /// Optional method called when an entity is activated.
    fn activated(&mut self, _: &EntityData<Self::Components>, _: &Self::Components, _: &mut Self::Services)
    {

    }

    /// Optional method called when an entity is reactivated.
    ///
    /// By default it calls deactivated() followed by activated()
    fn reactivated(&mut self, e: &EntityData<Self::Components>, c: &Self::Components, s: &mut Self::Services)
    {
        self.deactivated(e, c, s);
        self.activated(e, c, s);
    }

    /// Optional method called when an entity is deactivated.
    fn deactivated(&mut self, _: &EntityData<Self::Components>, _: &Self::Components, _: &mut Self::Services)
    {

    }
}

pub trait Process: System
{
    /// Process the world.
    fn process(&mut self, &mut DataHelper<Self::Components, Self::Services>);
}