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 } |