From 21778cb0c7a64e0712bbfcadb5993965f70d4b49 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Wed, 8 Feb 2023 13:13:04 -0400 Subject: TObject: Add, and make use of `enum object_flags` --- include/pso/TObject.h | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/pso/TObject.h b/include/pso/TObject.h index 4db9ae9..0ea2ec4 100644 --- a/include/pso/TObject.h +++ b/include/pso/TObject.h @@ -13,10 +13,41 @@ extern TMainTask main_task; extern TObject global_obj1; extern TObject global_obj2; + +enum object_flags { + NONE = 0, + QUEUE_DESTRUCTION = 1, + CHILD_QUEUE_DESTRUCTION = 2, + BIT_2 = 4, + BIT_3 = 8, + DISALLOW_UPDATE = 0x0F, + DISALLOW_RENDER = 0x10, + DISALLOW_DESTRUCTION = 0x20, + BIT_8 = 0x100, + BIT_9 = 0x200, + BIT_10 = 0x400, + BIT_11 = 0x800, + BIT_12 = 0x1000, + BIT_13 = 0x2000, + BIT_14 = 0x4000, + BIT_15 = 0x8000, + ALL_BITS = 0xFFFF +}; +static inline object_flags operator^(object_flags a, object_flags b) { return static_cast(static_cast(a) ^ static_cast(b)); }; +static inline object_flags operator&(object_flags a, object_flags b) { return static_cast(static_cast(a) & static_cast(b)); }; +static inline object_flags operator|(object_flags a, object_flags b) { return static_cast(static_cast(a) | static_cast(b)); }; +static inline object_flags operator~(object_flags a) { return static_cast(~static_cast(a)); } +static inline void operator^=(object_flags &a, object_flags b) { a = a ^ b; }; +static inline void operator&=(object_flags &a, object_flags b) { a = a & b; }; +static inline void operator|=(object_flags &a, object_flags b) { a = a | b; }; + class TObject { public: const char *name; - u16 flags; + union { + object_flags flags; + u16 flags_u16; + }; u16 id; TObject *prev; TObject *next; @@ -108,16 +139,17 @@ private: } }; - void set_flags(u16 flags) { + void set_flags(object_flags flags) { this->flags |= flags; } - void clear_flags(u16 flags) { - this->flags &= ~flags; + void clear_flags(object_flags flags) { + flags_u16 &= ~static_cast(flags); } - u32 get_flags(u16 flags) { + u32 get_flags(object_flags flags) { return this->flags & flags; }; }; + #endif -- cgit v1.2.3-13-gbd6f