From 5514b9eac9c54265b78c39b5bca782280b3a68df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Thu, 18 May 2023 18:49:22 +0200 Subject: [PATCH] pr3d --- rust/powerrender-3d/src/lib.rs | 1 + rust/powerrender-3d/src/main.rs | 1 + rust/powerrender-3d/src/trk.rs | 51 +++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 rust/powerrender-3d/src/trk.rs diff --git a/rust/powerrender-3d/src/lib.rs b/rust/powerrender-3d/src/lib.rs index 68a27f5..0051b6f 100644 --- a/rust/powerrender-3d/src/lib.rs +++ b/rust/powerrender-3d/src/lib.rs @@ -1 +1,2 @@ pub mod pro; +pub mod trk; diff --git a/rust/powerrender-3d/src/main.rs b/rust/powerrender-3d/src/main.rs index 99270a1..99b397f 100644 --- a/rust/powerrender-3d/src/main.rs +++ b/rust/powerrender-3d/src/main.rs @@ -3,6 +3,7 @@ use binrw::BinRead; use std::fs::File; pub mod pro; +pub mod trk; fn main() { let mut file = File::open(r#"E:\Games\Moorhuhn Kart\data\alk.pro"#).unwrap(); diff --git a/rust/powerrender-3d/src/trk.rs b/rust/powerrender-3d/src/trk.rs new file mode 100644 index 0000000..a053066 --- /dev/null +++ b/rust/powerrender-3d/src/trk.rs @@ -0,0 +1,51 @@ +use binrw::{binrw, NullString}; + +#[binrw] +#[br(magic = b"TRK.V07\0")] +#[derive(Debug)] +pub struct Trk { + #[br(temp)] + #[bw(calc = chunks.len() as u32)] + chunk_count: u32, + pub start_chunk: u16, + #[br(count = chunk_count)] + pub chunks: Vec, + #[br(temp)] + #[bw(calc = objects.len() as u32)] + object_count: u32, + #[br(count = object_count)] + pub objects: Vec, + #[br(temp)] + #[bw(calc = clusters.len() as u32)] + cluster_count: u32, + #[br(count = cluster_count)] + pub clusters: Vec, +} + +#[binrw] +#[derive(Debug)] +pub struct Chunk { + pub id: u16, + pub flags: u16, + pub bbox: [f32; 4], + pub adjacent_chunks: [i16; 4], + pub offset: [f32; 4], +} + +#[binrw] +#[derive(Debug)] +pub struct Object { + pub name: NullString, + pub position: [f32; 3], +} + +#[binrw] +#[derive(Debug)] +pub struct Cluster { + pub name: NullString, + #[br(temp)] + #[bw(calc = values.len() as u32)] + value_count: u32, + #[br(count = value_count)] + pub values: Vec<[f32; 4]>, +}