|
@@ -2,20 +2,20 @@ use binrw::{BinRead, BinWrite};
|
|
|
|
|
|
use crate::{
|
|
|
object::Object,
|
|
|
- types::{Field, WString, F64, U16, U32},
|
|
|
+ types::{Field, WString, F64, U16, U32}, array_of::ArrayOf,
|
|
|
};
|
|
|
|
|
|
-#[derive(BinRead, BinWrite, Debug)]
|
|
|
-pub struct LayerHeader {
|
|
|
- pub layer_count: u32,
|
|
|
- #[br(count = layer_count)]
|
|
|
- pub layers: Vec<Layer>,
|
|
|
-}
|
|
|
+// #[derive(BinRead, BinWrite, Debug)]
|
|
|
+// pub struct LayerHeader {
|
|
|
+// // pub layer_count: u32,
|
|
|
+// // #[br(count = layer_count)]
|
|
|
+// // pub layers: Vec<Layer>,
|
|
|
+// pub layers: ArrayOf<Layer>,
|
|
|
+// }
|
|
|
|
|
|
#[derive(BinRead, BinWrite, Debug)]
|
|
|
-pub struct Layer {
|
|
|
- #[br(assert(field_count_1 == 17))]
|
|
|
- field_count_1: u32, // Number of fields until objects
|
|
|
+#[brw(magic(17u32))] // Number of fields within this struct
|
|
|
+pub struct LayerPre {
|
|
|
_unknown_1: [Field; 3],
|
|
|
pub name: WString,
|
|
|
pub count: U32,
|
|
@@ -23,11 +23,11 @@ pub struct Layer {
|
|
|
pub input_signal_wait_enable_mask: U16,
|
|
|
pub input_signal_wait_disable_mask: U16,
|
|
|
_unknown_3: [Field; 9],
|
|
|
- pub object_count: u32,
|
|
|
- #[br(count = object_count)]
|
|
|
- pub objects: Vec<Object>,
|
|
|
- #[br(assert(field_count_2 == 151))]
|
|
|
- field_count_2: u32, // Number of remaining fields
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(BinRead, BinWrite, Debug)]
|
|
|
+#[brw(magic(151u32))] // Number of fields within this struct
|
|
|
+pub struct LayerPost {
|
|
|
_unknown_4: [Field; 54],
|
|
|
pub output_signal_start_enable_mask: U16,
|
|
|
pub output_signal_start_disable_mask: U16,
|
|
@@ -45,3 +45,10 @@ pub struct Layer {
|
|
|
_unknown_8: [Field; 12],
|
|
|
footer: u32,
|
|
|
}
|
|
|
+
|
|
|
+#[derive(BinRead, BinWrite, Debug)]
|
|
|
+pub struct Layer {
|
|
|
+ pub pre: LayerPre,
|
|
|
+ pub objects: ArrayOf<Object>,
|
|
|
+ pub post: LayerPost,
|
|
|
+}
|