# HG changeset patch # User alfadur # Date 1543189854 -10800 # Node ID fd8e0e52d5bd649b0f1763a45fdb7d87e9428871 # Parent 21be7838a127dfa6160653e66ffec81e01444ad0 add hwphysics to engine diff -r 21be7838a127 -r fd8e0e52d5bd rust/lib-hedgewars-engine/Cargo.toml --- a/rust/lib-hedgewars-engine/Cargo.toml Sun Nov 25 22:32:49 2018 +0100 +++ b/rust/lib-hedgewars-engine/Cargo.toml Mon Nov 26 02:50:54 2018 +0300 @@ -9,11 +9,13 @@ gfx_device_gl = "0.15" netbuf = "0.4" +fpnum = { path = "../fpnum" } land2d = { path = "../land2d" } lfprng = { path = "../lfprng" } integral-geometry = { path = "../integral-geometry" } landgen = { path = "../landgen" } hedgewars-engine-messages = { path = "../hedgewars-engine-messages" } +hwphysics = { path = "../hwphysics" } [lib] name = "hedgewars_engine" diff -r 21be7838a127 -r fd8e0e52d5bd rust/lib-hedgewars-engine/src/lib.rs --- a/rust/lib-hedgewars-engine/src/lib.rs Sun Nov 25 22:32:49 2018 +0100 +++ b/rust/lib-hedgewars-engine/src/lib.rs Mon Nov 26 02:50:54 2018 +0300 @@ -112,7 +112,8 @@ #[no_mangle] pub extern "C" fn advance_simulation(engine_state: &mut EngineInstance, ticks: u32) -> bool { - unimplemented!() + engine_state.world.step(); + true } #[no_mangle] pub extern "C" fn cleanup(engine_state: *mut EngineInstance) { diff -r 21be7838a127 -r fd8e0e52d5bd rust/lib-hedgewars-engine/src/world.rs --- a/rust/lib-hedgewars-engine/src/world.rs Sun Nov 25 22:32:49 2018 +0100 +++ b/rust/lib-hedgewars-engine/src/world.rs Mon Nov 26 02:50:54 2018 +0300 @@ -1,14 +1,33 @@ +use fpnum::{FPNum, fp}; 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; + +struct GameState { + land: Land2D, + physics: hwp::World, +} + +impl GameState { + fn new(land: Land2D, physics: hwp::World) -> Self { + Self { + land, + physics, + } + } +} pub struct World { random_numbers_gen: LaggedFibonacciPRNG, preview: Land2D, + game_state: Option, } impl World { @@ -16,6 +35,7 @@ Self { random_numbers_gen: LaggedFibonacciPRNG::new(&[]), preview: Land2D::new(Size::new(0, 0), 0), + game_state: None, } } @@ -41,8 +61,24 @@ template } - let params = LandGenerationParameters::new(0 as u8, 255, 5, false, false); + let params = LandGenerationParameters::new(0u8, u8::max_value(), 5, false, false); let landgen = TemplatedLandGenerator::new(template()); self.preview = landgen.generate_land(¶ms, &mut self.random_numbers_gen); } + + pub fn init(&mut self, template: OutlineTemplate) { + let physics = hwp::World::new(template.size); + + let params = LandGenerationParameters::new(0u32, u32::max_value(), 5, false, false); + let landgen = TemplatedLandGenerator::new(template); + let land = landgen.generate_land(¶ms, &mut self.random_numbers_gen); + + self.game_state = Some(GameState::new(land, physics)); + } + + pub fn step(&mut self) { + if let Some(ref mut state) = self.game_state { + state.physics.step(fp!(1), &state.land); + } + } }