use anyhow::Result; use ecs::*; use engine::prelude::*; fn main() -> Result<()> { let mut world_builder = World::builder(); Engine::new::(EngineCreateInfo::default(), &mut world_builder)?; world_builder.add_system(GameState::update); world_builder.resources.insert(GameState::Startup); world_builder.build().run() } enum GameState { Startup, Loading, Menu, Game(Game), } impl GameState { fn update(world: &mut World) -> Result { match world.resources.get_mut_unchecked::() { GameState::Startup => (), GameState::Loading => (), GameState::Menu => (), GameState::Game(game) => game.update(world)?, } Ok(true) } } impl EventConsumer for GameState { fn event(&mut self, world: &mut World, event: EngineEvent) -> Result<()> { match self { GameState::Startup => (), GameState::Loading => (), GameState::Menu => (), GameState::Game(game) => game.event(world, event)?, } Ok(()) } } struct Game {} impl Game { fn update(&mut self, world: &mut World) -> Result<()> { Ok(()) } fn event(&mut self, world: &mut World, event: EngineEvent) -> Result<()> { Ok(()) } }