|
1 use fpnum::{FPNum, fp}; |
1 use integral_geometry::{Point, Rect, Size}; |
2 use integral_geometry::{Point, Rect, Size}; |
2 use land2d::Land2D; |
3 use land2d::Land2D; |
3 use landgen::{ |
4 use landgen::{ |
4 outline_template::OutlineTemplate, template_based::TemplatedLandGenerator, |
5 outline_template::OutlineTemplate, |
5 LandGenerationParameters, LandGenerator, |
6 template_based::TemplatedLandGenerator, |
|
7 LandGenerationParameters, |
|
8 LandGenerator, |
6 }; |
9 }; |
7 use lfprng::LaggedFibonacciPRNG; |
10 use lfprng::LaggedFibonacciPRNG; |
|
11 use hwphysics as hwp; |
|
12 |
|
13 struct GameState { |
|
14 land: Land2D<u32>, |
|
15 physics: hwp::World, |
|
16 } |
|
17 |
|
18 impl GameState { |
|
19 fn new(land: Land2D<u32>, physics: hwp::World) -> Self { |
|
20 Self { |
|
21 land, |
|
22 physics, |
|
23 } |
|
24 } |
|
25 } |
8 |
26 |
9 pub struct World { |
27 pub struct World { |
10 random_numbers_gen: LaggedFibonacciPRNG, |
28 random_numbers_gen: LaggedFibonacciPRNG, |
11 preview: Land2D<u8>, |
29 preview: Land2D<u8>, |
|
30 game_state: Option<GameState>, |
12 } |
31 } |
13 |
32 |
14 impl World { |
33 impl World { |
15 pub fn new() -> Self { |
34 pub fn new() -> Self { |
16 Self { |
35 Self { |
17 random_numbers_gen: LaggedFibonacciPRNG::new(&[]), |
36 random_numbers_gen: LaggedFibonacciPRNG::new(&[]), |
18 preview: Land2D::new(Size::new(0, 0), 0), |
37 preview: Land2D::new(Size::new(0, 0), 0), |
|
38 game_state: None, |
19 } |
39 } |
20 } |
40 } |
21 |
41 |
22 pub fn set_seed(&mut self, seed: &[u8]) { |
42 pub fn set_seed(&mut self, seed: &[u8]) { |
23 self.random_numbers_gen = LaggedFibonacciPRNG::new(seed); |
43 self.random_numbers_gen = LaggedFibonacciPRNG::new(seed); |
39 template.fill_points = vec![Point::new(1, 0)]; |
59 template.fill_points = vec![Point::new(1, 0)]; |
40 |
60 |
41 template |
61 template |
42 } |
62 } |
43 |
63 |
44 let params = LandGenerationParameters::new(0 as u8, 255, 5, false, false); |
64 let params = LandGenerationParameters::new(0u8, u8::max_value(), 5, false, false); |
45 let landgen = TemplatedLandGenerator::new(template()); |
65 let landgen = TemplatedLandGenerator::new(template()); |
46 self.preview = landgen.generate_land(¶ms, &mut self.random_numbers_gen); |
66 self.preview = landgen.generate_land(¶ms, &mut self.random_numbers_gen); |
47 } |
67 } |
|
68 |
|
69 pub fn init(&mut self, template: OutlineTemplate) { |
|
70 let physics = hwp::World::new(template.size); |
|
71 |
|
72 let params = LandGenerationParameters::new(0u32, u32::max_value(), 5, false, false); |
|
73 let landgen = TemplatedLandGenerator::new(template); |
|
74 let land = landgen.generate_land(¶ms, &mut self.random_numbers_gen); |
|
75 |
|
76 self.game_state = Some(GameState::new(land, physics)); |
|
77 } |
|
78 |
|
79 pub fn step(&mut self) { |
|
80 if let Some(ref mut state) = self.game_state { |
|
81 state.physics.step(fp!(1), &state.land); |
|
82 } |
|
83 } |
48 } |
84 } |