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

extern crate keeshond;
extern crate keeshond_datapack;

#[macro_use] extern crate log;
#[macro_use] extern crate try_or;
extern crate smallvec;
extern crate bit_set;
extern crate enum_map;
extern crate rustc_hash;
extern crate serde;
extern crate serde_json;
extern crate bincode;
extern crate block_grid;
#[macro_use] extern crate strum_macros;

use crate::visual::{LerpResetThinker, ActorThinker, TextThinker, DrawableSortThinker, DrawableDrawer, PixelSnap};
use crate::world::CameraThinker;
use crate::tilemap::TilemapThinker;
use crate::collision::{CollisionThinker, CollisionControl};

use keeshond::scene::{SceneType, SceneConfig};
pub use keeshond_datapack::LoadErrorMode;

pub mod spawnable;
pub mod world;
pub mod visual;
pub mod tilemap;
pub mod collision;
mod util;

#[cfg(test)] mod tests;

pub const SYSTEM_PRIORITY_PRE_FRAME : i32 = -16777216;
pub const SYSTEM_PRIORITY_COLLISION : i32 = 100000;
pub const SYSTEM_PRIORITY_POST_FRAME : i32 = 16777216;

pub trait DefaultSystems
{
    fn default_systems(&mut self, load_error : LoadErrorMode, pixel_snap : PixelSnap, collision_cel_size : u16) -> &mut Self;
}

impl<T : SceneType + 'static> DefaultSystems for SceneConfig<T>
{
    fn default_systems(&mut self, load_error : LoadErrorMode, pixel_snap : PixelSnap, collision_cel_size : u16) -> &mut Self
    {
        self.thinker(LerpResetThinker::new())
        .thinker(CameraThinker::new())
        .thinker(ActorThinker::new(load_error))
        .thinker(TextThinker::new(load_error))
        .thinker(TilemapThinker::new(load_error))
        .thinker(DrawableSortThinker::new())
        .thinker(CollisionThinker::new())
        .drawer(DrawableDrawer::new(pixel_snap))
        .singleton(CollisionControl::new(collision_cel_size))
    }
}