use openstranded_map_tool::parse_s2;
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
let path = args.get(1).map(|s| s.as_str()).unwrap_or(
"/home/admen/sources/projects/openstranded/s2mod-tool/tests/stranded2/maps/adventure/map01.s2"
);
let data = fs::read(path).unwrap();
let map = parse_s2(&data).unwrap();
let step = 64.0 / map.terrain_size as f32;
println!("terrain_size: {} step={}", map.terrain_size, step);
println!("objects: {}", map.objects.len());
if !map.objects.is_empty() {
let xs: Vec<f32> = map.objects.iter().map(|o| o.x).collect();
let zs: Vec<f32> = map.objects.iter().map(|o| o.z).collect();
println!(" x range: {:.2} .. {:.2}", xs.iter().copied().fold(f32::MAX, f32::min), xs.iter().copied().fold(f32::MIN, f32::max));
println!(" z range: {:.2} .. {:.2}", zs.iter().copied().fold(f32::MAX, f32::min), zs.iter().copied().fold(f32::MIN, f32::max));
}
println!("units: {}", map.units.len());
if !map.units.is_empty() {
let xs: Vec<f32> = map.units.iter().map(|u| u.x).collect();
let ys: Vec<f32> = map.units.iter().map(|u| u.y).collect();
let zs: Vec<f32> = map.units.iter().map(|u| u.z).collect();
println!(" x range: {:.2} .. {:.2}", xs.iter().copied().fold(f32::MAX, f32::min), xs.iter().copied().fold(f32::MIN, f32::max));
println!(" y range: {:.2} .. {:.2}", ys.iter().copied().fold(f32::MAX, f32::min), ys.iter().copied().fold(f32::MIN, f32::max));
println!(" z range: {:.2} .. {:.2}", zs.iter().copied().fold(f32::MAX, f32::min), zs.iter().copied().fold(f32::MIN, f32::max));
}
println!("items: {}", map.items.len());
if !map.items.is_empty() {
let xs: Vec<f32> = map.items.iter().map(|i| i.x).collect();
let zs: Vec<f32> = map.items.iter().map(|i| i.z).collect();
println!(" x range: {:.2} .. {:.2}", xs.iter().copied().fold(f32::MAX, f32::min), xs.iter().copied().fold(f32::MIN, f32::max));
println!(" z range: {:.2} .. {:.2}", zs.iter().copied().fold(f32::MAX, f32::min), zs.iter().copied().fold(f32::MIN, f32::max));
}
println!("infos: {}", map.infos.len());
if !map.infos.is_empty() {
let xs: Vec<f32> = map.infos.iter().map(|i| i.x).collect();
let zs: Vec<f32> = map.infos.iter().map(|i| i.z).collect();
println!(" x range: {:.2} .. {:.2}", xs.iter().copied().fold(f32::MAX, f32::min), xs.iter().copied().fold(f32::MIN, f32::max));
println!(" z range: {:.2} .. {:.2}", zs.iter().copied().fold(f32::MAX, f32::min), zs.iter().copied().fold(f32::MIN, f32::max));
}
println!("heights: x{}", map.heights.len());
println!("\nFirst few heights (row 0):");
let stride = (map.terrain_size + 1) as usize;
for x in 0..stride.min(5) {
print!(" {:.4}", map.heights[x]);
}
println!();
}