|
@@ -1,6 +1,10 @@
|
|
|
use std::fmt::Display;
|
|
|
|
|
|
use binrw::{BinRead, BinWrite};
|
|
|
+use modular_bitfield::{
|
|
|
+ bitfield,
|
|
|
+ specifiers::{B1, B14},
|
|
|
+};
|
|
|
|
|
|
use crate::{
|
|
|
field_of::FieldOf,
|
|
@@ -16,12 +20,23 @@ pub mod line;
|
|
|
pub mod polygon;
|
|
|
pub mod rectangle;
|
|
|
|
|
|
+#[bitfield(bits = 16)]
|
|
|
+#[derive(BinRead, BinWrite, Debug, Copy, Clone)]
|
|
|
+#[br(map = Self::from_bytes)]
|
|
|
+#[bw(map = |&x| Self::into_bytes(x))]
|
|
|
+pub struct ObjectFlags {
|
|
|
+ pub disabled: B1,
|
|
|
+ pub aspect_ratio_unlocked: B1,
|
|
|
+ #[skip]
|
|
|
+ __: B14,
|
|
|
+}
|
|
|
+
|
|
|
#[derive(BinRead, BinWrite, Debug)]
|
|
|
#[brw(magic(17u32))]
|
|
|
-pub struct ObjBase {
|
|
|
+pub struct ObjectBase {
|
|
|
pub pen: U32,
|
|
|
pub obj_type: FieldOf<ObjectType>,
|
|
|
- pub flags: U16,
|
|
|
+ pub flags: FieldOf<ObjectFlags>,
|
|
|
pub name: WString,
|
|
|
pub count: U32,
|
|
|
_unknown_1: Field,
|
|
@@ -34,9 +49,19 @@ pub struct ObjBase {
|
|
|
_unknown_3: Field,
|
|
|
}
|
|
|
|
|
|
-impl Display for ObjBase {
|
|
|
+impl Display for ObjectBase {
|
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
- f.write_fmt(format_args!("[{}]", self.obj_type))
|
|
|
+ write!(
|
|
|
+ f,
|
|
|
+ "[{} = disabled: {}, locked: {}, count: {}, origin: {}, z: {:.2}, a: {:.2}]",
|
|
|
+ *self.obj_type,
|
|
|
+ self.flags.disabled() != 0,
|
|
|
+ self.flags.aspect_ratio_unlocked() != 0,
|
|
|
+ *self.count,
|
|
|
+ *self.origin,
|
|
|
+ *self.z,
|
|
|
+ *self.a,
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
|