pub mod contours;
pub mod grid;
pub mod hillshade;
pub mod mesh;
pub use contours::*;
pub use grid::*;
pub use hillshade::*;
pub use mesh::*;
pub type ElevationConverter = fn(r: u8, g: u8, b: u8, a: Option<u8>) -> f64;
pub fn convert_terrarium_elevation_data(r: u8, g: u8, b: u8, _a: Option<u8>) -> f64 {
(r as f64) * 256.0 + (g as f64) + (b as f64) / 256.0 - 32768.0
}
pub fn convert_mapbox_elevation_data(r: u8, g: u8, b: u8, _a: Option<u8>) -> f64 {
-10000. + ((r as f64) * 256. * 256. + (g as f64) * 256. + (b as f64)) * 0.1
}
pub type ElevationEncoder = fn(f64) -> (u8, u8, u8, Option<u8>);
pub fn encode_terrarium_elevation_data(elevation: f64) -> (u8, u8, u8, Option<u8>) {
let scaled_elevation = ((elevation + 32768.0) * 256.0).round() as u32;
let r = ((scaled_elevation >> 16) & 0xFF) as u8;
let g = ((scaled_elevation >> 8) & 0xFF) as u8;
let b = (scaled_elevation & 0xFF) as u8;
(r, g, b, None)
}
pub fn encode_mapbox_elevation_data(elevation: f64) -> (u8, u8, u8, Option<u8>) {
let scaled_elevation = ((elevation + 10000.0) * 10.0).round() as u32;
let r = ((scaled_elevation >> 16) & 0xFF) as u8;
let g = ((scaled_elevation >> 8) & 0xFF) as u8;
let b = (scaled_elevation & 0xFF) as u8;
(r, g, b, None)
}