gcrecomp_runtime/
runtime.rs1use crate::graphics::Renderer;
3use crate::input::ControllerManager;
4use crate::memory::{ARam, DmaSystem, Ram, VRam};
5use crate::texture::TextureLoader;
6use anyhow::Result;
7use std::sync::Arc;
8
9pub struct Runtime {
10 controller_manager: ControllerManager,
11 renderer: Option<Renderer>,
12 texture_loader: TextureLoader,
13 ram: Ram,
14 vram: VRam,
15 aram: ARam,
16 dma: DmaSystem,
17}
18
19impl Runtime {
20 pub fn new() -> Result<Self> {
21 Ok(Self {
22 controller_manager: ControllerManager::new()?,
23 renderer: None,
24 texture_loader: TextureLoader::new(),
25 ram: Ram::new(),
26 vram: VRam::new(),
27 aram: ARam::new(),
28 dma: DmaSystem::new(),
29 })
30 }
31
32 pub fn initialize_graphics(&mut self, window: Arc<winit::window::Window>) -> Result<()> {
33 self.renderer = Some(Renderer::new(window)?);
34 Ok(())
35 }
36
37 pub fn update(&mut self) -> Result<()> {
38 self.controller_manager.update()?;
40
41 Ok(())
45 }
46
47 pub fn get_controller_input(
48 &self,
49 controller_id: usize,
50 ) -> Option<crate::input::controller::GameCubeInput> {
51 self.controller_manager.get_gamecube_input(controller_id)
52 }
53
54 pub fn ram_mut(&mut self) -> &mut Ram {
55 &mut self.ram
56 }
57
58 pub fn ram(&self) -> &Ram {
59 &self.ram
60 }
61
62 pub fn vram_mut(&mut self) -> &mut VRam {
63 &mut self.vram
64 }
65
66 pub fn vram(&self) -> &VRam {
67 &self.vram
68 }
69
70 pub fn aram_mut(&mut self) -> &mut ARam {
71 &mut self.aram
72 }
73
74 pub fn aram(&self) -> &ARam {
75 &self.aram
76 }
77
78 pub fn dma_mut(&mut self) -> &mut DmaSystem {
79 &mut self.dma
80 }
81
82 pub fn renderer_mut(&mut self) -> Option<&mut Renderer> {
83 self.renderer.as_mut()
84 }
85
86 pub fn texture_loader_mut(&mut self) -> &mut TextureLoader {
87 &mut self.texture_loader
88 }
89}