diff --git a/bdi_game/src/asset_manager/asset_manager.rs b/bdi_game/src/asset_manager/asset_manager.rs index ede26bc..3045d37 100644 --- a/bdi_game/src/asset_manager/asset_manager.rs +++ b/bdi_game/src/asset_manager/asset_manager.rs @@ -1,12 +1,18 @@ -pub struct AssetManager {} - -impl AssetManager { - const ASSET_DIR: &'static str = "assets"; - - const MAP_SUBDIR: &'static str = "maps"; - const MAP_EXTENSION: &'static str = "png"; - - pub fn get_map_path(map_name: &str) -> String { - format!("{}/{}/{}.{}", Self::ASSET_DIR, Self::MAP_SUBDIR, map_name, Self::MAP_EXTENSION) - } -} \ No newline at end of file +pub struct AssetManager {} + +impl AssetManager { + const ASSET_DIR: &'static str = "assets"; + + const MAP_SUBDIR: &'static str = "maps"; + const MAP_EXTENSION: &'static str = "png"; + + pub fn get_map_path(map_name: &str) -> String { + format!( + "{}/{}/{}.{}", + Self::ASSET_DIR, + Self::MAP_SUBDIR, + map_name, + Self::MAP_EXTENSION + ) + } +} diff --git a/bdi_game/src/asset_manager/mod.rs b/bdi_game/src/asset_manager/mod.rs index 867fa84..f134a51 100644 --- a/bdi_game/src/asset_manager/mod.rs +++ b/bdi_game/src/asset_manager/mod.rs @@ -1 +1 @@ -pub mod asset_manager; \ No newline at end of file +pub mod asset_manager; diff --git a/bdi_game/src/game/game.rs b/bdi_game/src/game/game.rs index 169143e..d176344 100644 --- a/bdi_game/src/game/game.rs +++ b/bdi_game/src/game/game.rs @@ -3,7 +3,7 @@ use std::time::{Duration, Instant}; use crate::{ display::game_display::GameDisplay, input::Input, - simulation::{simulation::Simulation, world_state::WorldState, world_grid::WorldGrid}, + simulation::{simulation::Simulation, world_grid::WorldGrid, world_state::WorldState}, terrain_manager::map_loader::MapLoader, }; @@ -25,7 +25,7 @@ impl Game { display, simulation: Simulation { state: WorldState {}, - grid: WorldGrid { data: vec![] } + grid: WorldGrid { data: vec![] }, }, // grid: WorldGrid::from_height_map(map), input: Input {}, diff --git a/bdi_game/src/game/logging.rs b/bdi_game/src/game/logging.rs index 932dcb3..d7a060d 100644 --- a/bdi_game/src/game/logging.rs +++ b/bdi_game/src/game/logging.rs @@ -1,6 +1,5 @@ use log::LevelFilter; -use simplelog::{ColorChoice, Config, TermLogger, TerminalMode, CombinedLogger, WriteLogger}; - +use simplelog::{ColorChoice, CombinedLogger, Config, TermLogger, TerminalMode, WriteLogger}; pub(crate) fn init_logging() { // Create log directory if it doesn't exist @@ -24,25 +23,19 @@ pub(crate) fn init_logging() { } }; - match CombinedLogger::init( - vec![ - TermLogger::new( - LevelFilter::Warn, - Config::default(), - TerminalMode::Mixed, - ColorChoice::Auto - ), - WriteLogger::new( - LevelFilter::Debug, - Config::default(), - log_file - ), - ] - ) { + match CombinedLogger::init(vec![ + TermLogger::new( + LevelFilter::Warn, + Config::default(), + TerminalMode::Mixed, + ColorChoice::Auto, + ), + WriteLogger::new(LevelFilter::Debug, Config::default(), log_file), + ]) { Ok(_) => (), Err(e) => { eprintln!("Error while initializing logger: {}", e); std::process::exit(1); } } -} \ No newline at end of file +} diff --git a/bdi_game/src/lib.rs b/bdi_game/src/lib.rs index a7b44ac..135588d 100644 --- a/bdi_game/src/lib.rs +++ b/bdi_game/src/lib.rs @@ -1,7 +1,7 @@ pub mod algorithms; pub mod terrain_manager; +mod asset_manager; pub mod display; pub mod game; mod input; mod simulation; -mod asset_manager; \ No newline at end of file diff --git a/bdi_game/src/simulation/simulation.rs b/bdi_game/src/simulation/simulation.rs index 8e223c0..c8c3ea0 100644 --- a/bdi_game/src/simulation/simulation.rs +++ b/bdi_game/src/simulation/simulation.rs @@ -1,5 +1,5 @@ -use super::world_state::WorldState; use super::world_grid::WorldGrid; +use super::world_state::WorldState; pub struct Simulation { pub state: WorldState, diff --git a/bdi_game/src/simulation/world_grid.rs b/bdi_game/src/simulation/world_grid.rs index 3d1794a..081c1b0 100644 --- a/bdi_game/src/simulation/world_grid.rs +++ b/bdi_game/src/simulation/world_grid.rs @@ -1,6 +1,6 @@ -use image::GrayImage; use crate::simulation::grid::{Grid, GridPoint}; use crate::terrain_manager::sampler::Sampler2D; +use image::GrayImage; #[derive(Default, Clone)] pub(crate) struct WorldCellData { @@ -32,4 +32,4 @@ impl WorldGrid { grid } } -*/ \ No newline at end of file +*/ diff --git a/bdi_game/src/terrain_manager/map.rs b/bdi_game/src/terrain_manager/map.rs index a6f95f8..60c08ac 100644 --- a/bdi_game/src/terrain_manager/map.rs +++ b/bdi_game/src/terrain_manager/map.rs @@ -1,7 +1,7 @@ -use image::GrayImage; - -pub struct Map { - pub side_len: usize, - pub height_map: GrayImage, - pub height_modifiers: GrayImage, -} \ No newline at end of file +use image::GrayImage; + +pub struct Map { + pub side_len: usize, + pub height_map: GrayImage, + pub height_modifiers: GrayImage, +} diff --git a/bdi_game/src/terrain_manager/map_loader.rs b/bdi_game/src/terrain_manager/map_loader.rs index acc775e..ee140bb 100644 --- a/bdi_game/src/terrain_manager/map_loader.rs +++ b/bdi_game/src/terrain_manager/map_loader.rs @@ -1,36 +1,36 @@ -use log::{debug, info}; -use image::GrayImage; -use image::io::Reader as ImageReader; -use crate::asset_manager::asset_manager::AssetManager; - -pub struct MapLoader { - map_asset_path: String, -} - -impl MapLoader { - pub fn map_from_image(map_name: &str) -> GrayImage { - let map_path = AssetManager::get_map_path(map_name); - - let img = match ImageReader::open(map_path) { - Ok(img) => img, - Err(e) => { - eprintln!("Error while loading map from file: {}", e); - return GrayImage::new(0, 0); - } - }; - - let img = match img.decode() { - Ok(img) => img, - Err(e) => { - eprintln!("Error while decoding map format: {}", e); - return GrayImage::new(0, 0); - } - }; - - info!("Map '{}' loaded successfully!", map_name); - debug!("Map format: {:?}", img.color()); - debug!("Map dimensions: {}x{}", img.width(), img.height()); - - return img.into_luma8(); - } -} \ No newline at end of file +use crate::asset_manager::asset_manager::AssetManager; +use image::io::Reader as ImageReader; +use image::GrayImage; +use log::{debug, info}; + +pub struct MapLoader { + map_asset_path: String, +} + +impl MapLoader { + pub fn map_from_image(map_name: &str) -> GrayImage { + let map_path = AssetManager::get_map_path(map_name); + + let img = match ImageReader::open(map_path) { + Ok(img) => img, + Err(e) => { + eprintln!("Error while loading map from file: {}", e); + return GrayImage::new(0, 0); + } + }; + + let img = match img.decode() { + Ok(img) => img, + Err(e) => { + eprintln!("Error while decoding map format: {}", e); + return GrayImage::new(0, 0); + } + }; + + info!("Map '{}' loaded successfully!", map_name); + debug!("Map format: {:?}", img.color()); + debug!("Map dimensions: {}x{}", img.width(), img.height()); + + return img.into_luma8(); + } +} diff --git a/bdi_game/src/terrain_manager/mod.rs b/bdi_game/src/terrain_manager/mod.rs index 528eb01..2de7eee 100644 --- a/bdi_game/src/terrain_manager/mod.rs +++ b/bdi_game/src/terrain_manager/mod.rs @@ -1,4 +1,4 @@ -pub mod map_loader; -pub mod sampler; -mod map; -mod world_object; \ No newline at end of file +mod map; +pub mod map_loader; +pub mod sampler; +mod world_object; diff --git a/bdi_game/src/terrain_manager/sampler.rs b/bdi_game/src/terrain_manager/sampler.rs index c2e399f..96e2b84 100644 --- a/bdi_game/src/terrain_manager/sampler.rs +++ b/bdi_game/src/terrain_manager/sampler.rs @@ -1,44 +1,44 @@ -use image::GrayImage; - -pub struct Sampler2D { - height_map: GrayImage, - side_len: usize, -} - -impl Sampler2D { - pub fn new(height_map: GrayImage, side_len: usize) -> Sampler2D { - Sampler2D { - height_map, - side_len - } - } - - pub fn sample_hexagonal_axial(&self, q: i32, r: i32) -> i32 { - let scale = self.height_map.width() as f32 / self.side_len as f32; - - let offset_q_x = scale * q as f32; - let offset_q_y = 0f32; - - let offset_r_x = scale * 0.5 * r as f32; - let offset_r_y = scale * 3.0f32.sqrt() / 2.0 * r as f32; - - let x = offset_q_x + offset_r_x; - let y = offset_q_y + offset_r_y; - - // Linear interpolation - let x0 = x.floor() as u32; - let x1 = x.ceil() as u32; - let y0 = y.floor() as u32; - let y1 = y.ceil() as u32; - - let x0y0 = self.height_map.get_pixel(x0, y0)[0] as f32; - let x1y0 = self.height_map.get_pixel(x1, y0)[0] as f32; - let x0y1 = self.height_map.get_pixel(x0, y1)[0] as f32; - let x1y1 = self.height_map.get_pixel(x1, y1)[0] as f32; - - let x0y = x0y0 + (x0y1 - x0y0) * (y - y0 as f32); - let x1y = x1y0 + (x1y1 - x1y0) * (y - y0 as f32); - - (x0y + (x1y - x0y) * (x - x0 as f32)) as i32 - } -} \ No newline at end of file +use image::GrayImage; + +pub struct Sampler2D { + height_map: GrayImage, + side_len: usize, +} + +impl Sampler2D { + pub fn new(height_map: GrayImage, side_len: usize) -> Sampler2D { + Sampler2D { + height_map, + side_len, + } + } + + pub fn sample_hexagonal_axial(&self, q: i32, r: i32) -> i32 { + let scale = self.height_map.width() as f32 / self.side_len as f32; + + let offset_q_x = scale * q as f32; + let offset_q_y = 0f32; + + let offset_r_x = scale * 0.5 * r as f32; + let offset_r_y = scale * 3.0f32.sqrt() / 2.0 * r as f32; + + let x = offset_q_x + offset_r_x; + let y = offset_q_y + offset_r_y; + + // Linear interpolation + let x0 = x.floor() as u32; + let x1 = x.ceil() as u32; + let y0 = y.floor() as u32; + let y1 = y.ceil() as u32; + + let x0y0 = self.height_map.get_pixel(x0, y0)[0] as f32; + let x1y0 = self.height_map.get_pixel(x1, y0)[0] as f32; + let x0y1 = self.height_map.get_pixel(x0, y1)[0] as f32; + let x1y1 = self.height_map.get_pixel(x1, y1)[0] as f32; + + let x0y = x0y0 + (x0y1 - x0y0) * (y - y0 as f32); + let x1y = x1y0 + (x1y1 - x1y0) * (y - y0 as f32); + + (x0y + (x1y - x0y) * (x - x0 as f32)) as i32 + } +} diff --git a/bdi_game/src/terrain_manager/world_object.rs b/bdi_game/src/terrain_manager/world_object.rs index e69de29..8b13789 100644 --- a/bdi_game/src/terrain_manager/world_object.rs +++ b/bdi_game/src/terrain_manager/world_object.rs @@ -0,0 +1 @@ +