Refactor system registration to use TypeIds

This commit is contained in:
Emre Osmanoğlu 2025-09-10 13:21:35 +03:00
parent 0c0d5cdb2a
commit 75fd59a504
5 changed files with 68 additions and 73 deletions

View file

@ -1,25 +1,19 @@
use std::cell::RefCell;
use std::rc::Rc;
use std::str::FromStr;
use std::sync::{Arc, RwLock};
use raidillon_platform::{Platform, PlatformContext};
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 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 crate::system::{RenderingContext, RenderingSystemManager};
use winit::event::{Event, WindowEvent};
use raidillon_assets::{ModelManager, ModelManagerRef};
use raidillon_assets::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";
use crate::GliumAssetManager;
pub struct GliumPlatform<E: EngineTrait> {
event_loop: EventLoop<()>,
@ -45,15 +39,8 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
let mut rendering_system_manager = RenderingSystemManager::new();
// Install rendering systems
rendering_system_manager.add_system(
MESH_RENDERER,
Box::new(BasicMeshRenderingSystem::initialize(&display, &window))
);
rendering_system_manager.add_system(
DEBUG_UI_RENDERER,
Box::new(ImguiBridge::initialize(&display, &window)),
);
rendering_system_manager.add::<BasicMeshRenderingSystem>(&display, &window);
rendering_system_manager.add::<ImguiBridge>(&display, &window);
Self {
event_loop,
@ -77,8 +64,8 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
let _ = &self.event_loop.run(move |event, el| {
self.rendering_system_manager
.systems
.iter_mut()
.for_each(|(_, system)| system.handle_event(&mut self.window, event.clone()));
.values_mut()
.for_each(|system| system.handle_event(&mut self.window, event.clone()));
match event {
Event::WindowEvent { event, .. } => match event {
@ -100,8 +87,8 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
self.rendering_system_manager
.systems
.iter_mut()
.for_each(|(_, system)| system.render(&mut context));
.values_mut()
.for_each(|system| system.render(&mut context));
target.finish().unwrap();
}
_ => {},
@ -112,8 +99,8 @@ impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
self.engine.update(ctx2);
self.rendering_system_manager
.systems
.iter_mut()
.for_each(|(_, system)| system.prepare_frame(&mut self.window));
.values_mut()
.for_each(|system| system.prepare_frame(&mut self.window));
self.window.request_redraw();
}
_ => {},