rust/lib-hedgewars-engine/src/world.rs
changeset 15890 8a6a2d931bae
parent 15828 44b49f255e31
child 15891 d52f5d8e75e6
equal deleted inserted replaced
15889:eb52cf05e454 15890:8a6a2d931bae
     9 use landgen::{
     9 use landgen::{
    10     outline_template::OutlineTemplate, template_based::TemplatedLandGenerator,
    10     outline_template::OutlineTemplate, template_based::TemplatedLandGenerator,
    11     LandGenerationParameters, LandGenerator,
    11     LandGenerationParameters, LandGenerator,
    12 };
    12 };
    13 use lfprng::LaggedFibonacciPRNG;
    13 use lfprng::LaggedFibonacciPRNG;
       
    14 use std::path::{Path, PathBuf};
    14 
    15 
    15 use crate::render::{camera::Camera, GearEntry, GearRenderer, MapRenderer};
    16 use crate::render::{camera::Camera, GearEntry, GearRenderer, MapRenderer};
    16 
    17 
    17 struct GameState {
    18 struct GameState {
    18     land: Land2D<u32>,
    19     land: Land2D<u32>,
    32     game_state: Option<GameState>,
    33     game_state: Option<GameState>,
    33     map_renderer: Option<MapRenderer>,
    34     map_renderer: Option<MapRenderer>,
    34     gear_renderer: Option<GearRenderer>,
    35     gear_renderer: Option<GearRenderer>,
    35     camera: Camera,
    36     camera: Camera,
    36     gear_entries: Vec<GearEntry>,
    37     gear_entries: Vec<GearEntry>,
       
    38     data_path: PathBuf,
    37 }
    39 }
    38 
    40 
    39 impl World {
    41 impl World {
    40     pub fn new() -> Self {
    42     pub fn new() -> Self {
    41         Self {
    43         Self {
    45             game_state: None,
    47             game_state: None,
    46             map_renderer: None,
    48             map_renderer: None,
    47             gear_renderer: None,
    49             gear_renderer: None,
    48             camera: Camera::new(),
    50             camera: Camera::new(),
    49             gear_entries: vec![],
    51             gear_entries: vec![],
       
    52             data_path: PathBuf::from("../../share/hedgewars/Data"),
    50         }
    53         }
    51     }
    54     }
    52 
    55 
    53     pub fn create_renderer(&mut self, width: u16, height: u16) {
    56     pub fn create_renderer(&mut self, width: u16, height: u16) {
    54         let land_tile_size = Size::square(512);
    57         let land_tile_size = Size::square(512);
    55         self.map_renderer = Some(MapRenderer::new(land_tile_size));
    58         self.map_renderer = Some(MapRenderer::new(land_tile_size));
    56         self.gear_renderer = Some(GearRenderer::new());
    59         self.gear_renderer = Some(GearRenderer::new(&self.data_path.as_path()));
    57         self.camera = Camera::with_size(Size::new(width as usize, height as usize));
    60         self.camera = Camera::with_size(Size::new(width as usize, height as usize));
    58 
    61 
    59         use mapgen::{theme::Theme, MapGenerator};
    62         use mapgen::{theme::Theme, MapGenerator};
    60         use std::path::Path;
       
    61 
    63 
    62         if let Some(ref state) = self.game_state {
    64         if let Some(ref state) = self.game_state {
    63             self.camera.position = state.land.play_box().center();
    65             self.camera.position = state.land.play_box().center();
    64 
    66 
    65             let theme =
    67             let theme =
    66                 Theme::load(Path::new("../../share/hedgewars/Data/Themes/Cheese/")).unwrap();
    68                 Theme::load(self.data_path.join(Path::new("Themes/Cheese/")).as_path()).unwrap();
    67             let texture = MapGenerator::new().make_texture(&state.land, &theme);
    69             let texture = MapGenerator::new().make_texture(&state.land, &theme);
    68             if let Some(ref mut renderer) = self.map_renderer {
    70             if let Some(ref mut renderer) = self.map_renderer {
    69                 renderer.init(&texture);
    71                 renderer.init(&texture);
    70             }
    72             }
    71         }
    73         }