rust/lib-hedgewars-engine/src/world.rs
changeset 14295 fd8e0e52d5bd
parent 14272 3152d9fdb499
child 14373 4409344db447
equal deleted inserted replaced
14294:21be7838a127 14295:fd8e0e52d5bd
       
     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(&params, &mut self.random_numbers_gen);
    66         self.preview = landgen.generate_land(&params, &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(&params, &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 }