e2rcore/implement/kernel/
kernel_impl_001.rs1use 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
9use 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
24impl < 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 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}