From 8ffa01ad48663257450b27d7888ebfba498ae5b9 Mon Sep 17 00:00:00 2001 From: reo Date: Sun, 10 Aug 2025 13:34:02 +0300 Subject: [PATCH] Implement the core engine methods --- raidillon_core/src/engine.rs | 54 ++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/raidillon_core/src/engine.rs b/raidillon_core/src/engine.rs index 91fd6de..68ecdc2 100644 --- a/raidillon_core/src/engine.rs +++ b/raidillon_core/src/engine.rs @@ -1,6 +1,56 @@ +use std::alloc::System; use crate::SceneManager; +use crate::system::{SystemContext, SystemManager}; +use raidillon_platform::EngineTrait; pub struct Engine { - scene_manager: SceneManager, - // TODO: Systems + pub scene_manager: SceneManager, + pub system_manager: SystemManager, +} + +impl EngineTrait for Engine { + fn new() -> Self { + let scene_manager = SceneManager::new(); + let system_manager = SystemManager::new(); + Self { + scene_manager, + system_manager, + } + } + + /// Run the first frame, load the world. + fn initialize(&mut self) -> bool { + // Engine Loading Stage 1: initialize systems + for (system_id, system) in self.system_manager.systems.iter_mut() { + system.initialize(); + } + + let mut ctx = SystemContext { + scene: self.scene_manager.current_mut(), + }; + + // Engine Loading Stage 2: load world + for (system_id, system) in self.system_manager.systems.iter_mut() { + system.load_world(&mut ctx); + } + + true + } + + /// Runs every frame + fn update(&mut self) { + let mut ctx = SystemContext { + scene: self.scene_manager.current_mut(), + }; + + for (system_id, system) in self.system_manager.systems.iter_mut() { + system.update(&mut ctx); + } + } + + // pub fn build_system_context(&mut self) -> SystemContext { + // SystemContext { + // scene: self.scene_manager.current_mut(), + // } + // } }