diff -r 12db7e435ea6 -r 19122a329774 rust/lib-hedgewars-engine/src/world.rs --- a/rust/lib-hedgewars-engine/src/world.rs Fri Mar 22 20:01:47 2019 +0300 +++ b/rust/lib-hedgewars-engine/src/world.rs Fri Mar 22 20:26:29 2019 +0300 @@ -1,19 +1,14 @@ -use fpnum::{FPNum, fp}; +use fpnum::{fp, FPNum}; +use hwphysics as hwp; use integral_geometry::{Point, Rect, Size}; use land2d::Land2D; use landgen::{ - outline_template::OutlineTemplate, - template_based::TemplatedLandGenerator, - LandGenerationParameters, - LandGenerator, + outline_template::OutlineTemplate, template_based::TemplatedLandGenerator, + LandGenerationParameters, LandGenerator, }; use lfprng::LaggedFibonacciPRNG; -use hwphysics as hwp; -use crate::render::{ - MapRenderer, - camera::Camera -}; +use crate::render::{camera::Camera, MapRenderer}; struct GameState { land: Land2D, @@ -22,10 +17,7 @@ impl GameState { fn new(land: Land2D, physics: hwp::World) -> Self { - Self { - land, - physics, - } + Self { land, physics } } } @@ -33,8 +25,8 @@ random_numbers_gen: LaggedFibonacciPRNG, preview: Option>, game_state: Option, - renderer: MapRenderer, - camera: Camera + renderer: Option, + camera: Camera, } impl World { @@ -43,11 +35,16 @@ random_numbers_gen: LaggedFibonacciPRNG::new(&[]), preview: None, game_state: None, - renderer: MapRenderer::new(512, 512), - camera: Camera::new() + renderer: None, + camera: Camera::new(), } } + pub fn create_renderer(&mut self, width: u16, height: u16) { + self.renderer = Some(MapRenderer::new(512, 512)); + self.camera = Camera::with_size(Size::new(width as usize, height as usize)); + } + pub fn set_seed(&mut self, seed: &[u8]) { self.random_numbers_gen = LaggedFibonacciPRNG::new(seed); } @@ -87,16 +84,17 @@ let land = landgen.generate_land(¶ms, &mut self.random_numbers_gen); use mapgen::{ + theme::{slice_u32_to_u8, Theme}, MapGenerator, - theme::{Theme, slice_u32_to_u8} }; use std::path::Path; - + let theme = Theme::load(Path::new("../../share/hedgewars/Data/Themes/Cheese/")).unwrap(); let texture = MapGenerator::new().make_texture32(&land, &theme); - self.renderer.init(&texture); - + if let Some(ref mut renderer) = self.renderer { + renderer.init(&texture); + } self.game_state = Some(GameState::new(land, physics)); } @@ -106,13 +104,14 @@ } pub fn render(&mut self) { + if let Some(ref mut renderer) = self.renderer { + unsafe { + gl::ClearColor(0.4f32, 0f32, 0.2f32, 1f32); + gl::Clear(gl::COLOR_BUFFER_BIT); + } - unsafe { - gl::ClearColor(0.4f32, 0f32, 0.2f32, 1f32); - gl::Clear(gl::COLOR_BUFFER_BIT); + renderer.render(self.camera.viewport()); } - - self.renderer.render(self.camera.viewport()); } pub fn step(&mut self) { @@ -121,6 +120,3 @@ } } } - - -