diff --git a/crates/moonhare_game/src/basic/world.rs b/crates/moonhare_game/src/basic/world.rs index 60f9aa8..80803ec 100644 --- a/crates/moonhare_game/src/basic/world.rs +++ b/crates/moonhare_game/src/basic/world.rs @@ -11,6 +11,9 @@ impl World { Self { nodes: vec![] } } + pub fn get_nodes(self) -> Vec> { + self.nodes + } pub fn add_node(&mut self, node: Box) { self.nodes.push(node) } diff --git a/crates/moonhare_game/src/nodes/window.rs b/crates/moonhare_game/src/nodes/window.rs index 96dd9d7..9164e92 100644 --- a/crates/moonhare_game/src/nodes/window.rs +++ b/crates/moonhare_game/src/nodes/window.rs @@ -26,19 +26,34 @@ impl Default for Window { } impl Window { - fn init(&mut self) -> Self { + pub fn init(&mut self) -> Self { Self { context: moonhare_window::WindowRenderContext::OPENGLGLFW, glfw_window: Some(moonhare_window::Window::create(self.context)), - render_context: Some(moonhare_graphics::build_context( - self.glfw_window.clone().unwrap().glfw_window, - )), + render_context: match self.glfw_window { + Some(window) => Some(moonhare_graphics::build_context(Box::new(window))), + None => moonhare_log::error("No window"), + }, + //Some(moonhare_graphics::build_context( + // self.glfw_window.clone().unwrap().glfw_window, + //)), } } + pub fn check_integ(&self) { + println!("{:?}, {:?}", self.context, self.glfw_window) + } + fn update(&mut self) { - handle_window_event(&self.glfw_window.as_mut().unwrap()); - render(self.render_context.clone().unwrap()); + match &self.glfw_window { + Some(window) => handle_window_event(&window), + None => moonhare_log::warn("No Window!"), + } + + match &self.render_context { + Some(context) => render(context.clone()), + None => moonhare_log::warn("No Render Context"), + } } } diff --git a/crates/moonhare_graphics/src/backend.rs b/crates/moonhare_graphics/src/backend.rs index d4db08a..42aed1f 100644 --- a/crates/moonhare_graphics/src/backend.rs +++ b/crates/moonhare_graphics/src/backend.rs @@ -4,13 +4,13 @@ use std::{ rc::Rc, }; -use glium::SwapBuffersError; +use glium::{SwapBuffersError, winit::window::Window}; use moonhare_window::glfw::Context; // adopted from the glium repo -> examples -> manual_creation.rs #[derive(Clone)] pub struct Backend { - pub gl_window: Rc>, + pub gl_window: Rc>>, } unsafe impl glium::backend::Backend for Backend { diff --git a/crates/moonhare_graphics/src/lib.rs b/crates/moonhare_graphics/src/lib.rs index 4d7e080..fd99e9e 100644 --- a/crates/moonhare_graphics/src/lib.rs +++ b/crates/moonhare_graphics/src/lib.rs @@ -9,6 +9,7 @@ use std::{ use glium::{ Frame, Surface, backend::{Context, Facade}, + winit::window::Window, }; use lazy_static::lazy_static; use moonhare_window::glfw::PWindow; @@ -21,8 +22,8 @@ use state::InitCell; use crate::color::Color; -pub fn build_context(window: Rc>) -> Rc { - let gl_window: Rc> = window; +pub fn build_context(window: Rc>>) -> Rc { + let gl_window = window; // now building the context let context = unsafe { diff --git a/playground/src/main.rs b/playground/src/main.rs index e54d5f6..fa0c2df 100644 --- a/playground/src/main.rs +++ b/playground/src/main.rs @@ -1,4 +1,4 @@ -use std::fs::File; +use std::{any::Any, fmt::format, fs::File}; use moonhare_engine::{ game::{Game, basic::world::World, nodes::window::Window}, @@ -7,13 +7,17 @@ use moonhare_engine::{ fn main() { let _ = log::configere_logger(); - log::info("test"); let mut game = Game::new(); let mut world = World::new(); - let window = Window::default(); + let mut window = Window::default(); + window = Window::init(&mut window); + window.check_integ(); world.add_node(Box::new(window)); game.add_world(world.clone()); - log::info(format!("{:?}", game.get_worlds())); + log::info(format!("{:?}", game)); + log::info(format!("Nodes: {:#?}", world.get_nodes().type_id())); + + game.run(); }