Add per-event handling to systems
This commit is contained in:
parent
0c0d5cdb2a
commit
ee2999a0d5
5 changed files with 95 additions and 78 deletions
|
|
@ -1,22 +1,22 @@
|
|||
use crate::GliumAssetManager;
|
||||
use crate::render::BasicMeshRenderingSystem;
|
||||
use crate::render::debug_ui::ImguiBridge;
|
||||
use crate::system::{RenderingContext, RenderingSystem, RenderingSystemManager, SystemID};
|
||||
use glium::Surface;
|
||||
use glium::backend::glutin::Display;
|
||||
use glium::backend::glutin::SimpleWindowBuilder;
|
||||
use glium::glutin::surface::WindowSurface;
|
||||
use glium::winit::event_loop::EventLoop;
|
||||
use glium::winit::window::Window;
|
||||
use raidillon_assets::ModelManagerRef;
|
||||
use raidillon_core::engine::EngineTrait;
|
||||
use raidillon_engine::Engine;
|
||||
use raidillon_platform::{Platform, PlatformContext};
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
use std::str::FromStr;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use raidillon_platform::{Platform, PlatformContext};
|
||||
use glium::winit::event_loop::EventLoop;
|
||||
use glium::winit::window::Window;
|
||||
use glium::backend::glutin::Display;
|
||||
use glium::glutin::surface::WindowSurface;
|
||||
use glium::backend::glutin::SimpleWindowBuilder;
|
||||
use glium::Surface;
|
||||
use crate::system::{RenderingSystemManager, RenderingSystem, RenderingContext, SystemID};
|
||||
use winit::event::{Event, WindowEvent};
|
||||
use raidillon_assets::{ModelManager, ModelManagerRef};
|
||||
use raidillon_core::engine::EngineTrait;
|
||||
use raidillon_engine::Engine;
|
||||
use crate::{GliumAssetManager};
|
||||
use crate::render::debug_ui::ImguiBridge;
|
||||
use crate::render::BasicMeshRenderingSystem;
|
||||
|
||||
pub const MESH_RENDERER: &str = "mesh_renderer";
|
||||
pub const DEBUG_UI_RENDERER: &str = "debug_ui_renderer";
|
||||
|
|
@ -41,13 +41,15 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
|
|||
.with_inner_size(width, height)
|
||||
.build(&event_loop);
|
||||
|
||||
let asset_manager: ModelManagerRef = Rc::new(RefCell::new(Box::new(GliumAssetManager::new(Box::new(display.clone())))));
|
||||
let asset_manager: ModelManagerRef = Rc::new(RefCell::new(Box::new(
|
||||
GliumAssetManager::new(Box::new(display.clone())),
|
||||
)));
|
||||
let mut rendering_system_manager = RenderingSystemManager::new();
|
||||
|
||||
// Install rendering systems
|
||||
rendering_system_manager.add_system(
|
||||
MESH_RENDERER,
|
||||
Box::new(BasicMeshRenderingSystem::initialize(&display, &window))
|
||||
Box::new(BasicMeshRenderingSystem::initialize(&display, &window)),
|
||||
);
|
||||
|
||||
rendering_system_manager.add_system(
|
||||
|
|
@ -75,6 +77,9 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
|
|||
};
|
||||
self.engine.initialize(ctx.clone());
|
||||
let _ = &self.event_loop.run(move |event, el| {
|
||||
let mut ctx2 = ctx.clone();
|
||||
ctx2.current_event = event.clone();
|
||||
self.engine.handle_event(ctx2.clone());
|
||||
self.rendering_system_manager
|
||||
.systems
|
||||
.iter_mut()
|
||||
|
|
@ -85,11 +90,12 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
|
|||
WindowEvent::CloseRequested => {
|
||||
// TODO: Run uninitialize on renderer and engine
|
||||
el.exit();
|
||||
},
|
||||
}
|
||||
WindowEvent::RedrawRequested => {
|
||||
let mut target = self.display.draw();
|
||||
target.clear_color_and_depth((0.1, 0.1, 0.15, 1.0), 1.0);
|
||||
let (scene_mut, debug_ui_buffer) = self.engine.scene_and_debug_ui_buffer_mut();
|
||||
let (scene_mut, debug_ui_buffer) =
|
||||
self.engine.scene_and_debug_ui_buffer_mut();
|
||||
let mut context = RenderingContext {
|
||||
scene: scene_mut,
|
||||
target: &mut target,
|
||||
|
|
@ -104,11 +110,9 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
|
|||
.for_each(|(_, system)| system.render(&mut context));
|
||||
target.finish().unwrap();
|
||||
}
|
||||
_ => {},
|
||||
_ => {}
|
||||
},
|
||||
Event::AboutToWait => {
|
||||
let mut ctx2 = ctx.clone();
|
||||
ctx2.current_event = event.clone();
|
||||
self.engine.update(ctx2);
|
||||
self.rendering_system_manager
|
||||
.systems
|
||||
|
|
@ -116,7 +120,7 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
|
|||
.for_each(|(_, system)| system.prepare_frame(&mut self.window));
|
||||
self.window.request_redraw();
|
||||
}
|
||||
_ => {},
|
||||
_ => {}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue