e2rcore/implement/kernel/
kernel_impl_001.rs

1///sample implementation of kernel
2
3use interface::i_window::IWindow;
4use interface::i_game_logic::IGameLogic;
5use interface::i_kernel::IKernel;
6use interface::i_ui::IUi;
7use interface::i_renderer::IRenderer;
8
9// use implement::logic::game0::GameLogic; //example game logic to test
10use implement::window::winglutin::WinGlutin;
11use implement::render::renderer_gl::Renderer;
12use implement::ui::input_default_glutin::XformInput;
13
14pub struct Kernel < GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
15                                                              EventRender = <Renderer as IRenderer>::EventRender >,
16<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
17{
18    pub _windowing: WinGlutin,
19    pub _input: XformInput,
20    pub _game_logic: GameLogic,
21    pub _renderer: Renderer,
22}
23
24///use default implementation for run method
25impl < GameLogic > IKernel< WinGlutin, XformInput, GameLogic, Renderer > for Kernel< GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
26                                                                                                                               EventRender = <Renderer as IRenderer>::EventRender >,
27<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
28{
29        
30    fn new() -> Result< Self, & 'static str > where Self: Sized {
31
32        info!("kernel creation." );
33
34        let w = WinGlutin::new( 500, 500 );
35        
36        w.make_current()?;
37
38        //render init need windowing to be already init
39        let r = Renderer::init().expect("renderer init unsuccessful");
40
41        let k = Kernel {
42            _windowing: w,
43            _input: XformInput::new(),
44            _game_logic: GameLogic::new(),
45            _renderer: r,
46        };
47
48        Ok( k )
49    }
50    fn init_hook( & mut self ) -> Result< (), & 'static str > {
51        
52        self._windowing.make_current()?;
53        
54        self._game_logic.run_init_hook()?;
55
56        Ok( () )
57    }
58    fn deinit_hook( & mut self ) -> Result< (), & 'static str > {
59        Ok( () )
60    }
61}
62
63impl < GameLogic > AsMut< WinGlutin > for Kernel< GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
64                                                                                            EventRender = <Renderer as IRenderer>::EventRender >,
65<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
66{
67    fn as_mut( & mut self ) -> & mut WinGlutin {
68        & mut self._windowing
69    }
70}
71
72impl < GameLogic > AsMut< GameLogic > for Kernel < GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
73                                                                                             EventRender = <Renderer as IRenderer>::EventRender >,
74<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
75{
76    fn as_mut( & mut self ) -> & mut GameLogic {
77        & mut self._game_logic
78    }
79}
80
81impl < GameLogic > AsMut< Renderer > for Kernel < GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
82                                                                                            EventRender = <Renderer as IRenderer>::EventRender >,
83<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
84{
85   fn as_mut( & mut self ) -> & mut Renderer {
86        & mut self._renderer
87    }
88
89}
90    
91impl < GameLogic > AsMut< XformInput > for Kernel < GameLogic > where GameLogic : IGameLogic< EventInput = <XformInput as IUi>::EventInputFiltered,
92                                                                                              EventRender = <Renderer as IRenderer>::EventRender >,
93<GameLogic as IGameLogic>::RenderObj : Into< Vec< <GameLogic as IGameLogic>::EventRender > >
94{
95   fn as_mut( & mut self ) -> & mut XformInput {
96        & mut self._input
97    }
98
99}