summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/pso/TMainTask.h24
-rw-r--r--include/pso/TObject.h20
-rw-r--r--include/pso/macros.h8
-rw-r--r--src/pso/TMainTask.cpp4
4 files changed, 37 insertions, 19 deletions
diff --git a/include/pso/TMainTask.h b/include/pso/TMainTask.h
index 3eab543..3a6e59b 100644
--- a/include/pso/TMainTask.h
+++ b/include/pso/TMainTask.h
@@ -6,18 +6,18 @@
#include "pso/TObject.h"
-#define X_OR_Y_CHILD(flags, old_flags, one_prefix, zero_prefix, suffix) \
- if (flags != old_flags) { \
- TMainTask *child; \
- u32 bit = 1; \
- FOREACH_NODE_NODECL_MULTI_ITER(TMainTask, main_task.down, child, bit <<= 1) { \
- if (flags & bit) { \
- child->one_prefix##_##suffix(); \
- } else { \
- child->zero_prefix##_##suffix(); \
- } \
- } \
- old_flags = flags; \
+#define X_OR_Y_CHILD(flags, old_flags, one_prefix, zero_prefix, suffix) \
+ if (flags != old_flags) { \
+ TMainTask *child; \
+ u32 bit = 1; \
+ FOREACH_NODE_NODECL_MULTI_ITER(TMainTask, main_task.get_down(), child, bit <<= 1) { \
+ if (flags & bit) { \
+ child->one_prefix##_##suffix(); \
+ } else { \
+ child->zero_prefix##_##suffix(); \
+ } \
+ } \
+ old_flags = flags; \
}
#define SET_OR_CLEAR_CHILD_FLAGS(flags, old_flags, flag_bit) \
diff --git a/include/pso/TObject.h b/include/pso/TObject.h
index 8d3e6e8..9af0251 100644
--- a/include/pso/TObject.h
+++ b/include/pso/TObject.h
@@ -44,7 +44,7 @@ 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:
+private:
const char *name;
union {
object_flags flags;
@@ -73,6 +73,24 @@ public:
void *operator new (size_t size) { return alloc(size); };
void operator delete(void *ptr) { free(ptr); };
+ const char *get_name() { return this->name; };
+ object_flags get_flags() { return this->flags; };
+ u16 get_flags_u16() { return this->flags_u16; };
+ u16 get_id() { return this->id; };
+ TObject *get_prev() { return this->prev; };
+ TObject *get_next() { return this->next; };
+ TObject *get_up() { return this->up; };
+ TObject *get_down() { return this->down; };
+
+ void set_name(const char *name) { this->name = name; };
+ void set_obj_flags(object_flags flags) { this->flags = flags; };
+ void set_flags_u16(u16 flags) { flags_u16 = flags; };
+ void set_id(u16 id) { this->id = id; };
+ void set_prev(TObject *node) { prev = node; };
+ void set_next(TObject *node) { next = node; };
+ void set_up(TObject *node) { up = node; };
+ void set_down(TObject *node) { down = node; };
+
void delete_children();
void queue_destruction_for_each_node();
void run_tasks();
diff --git a/include/pso/macros.h b/include/pso/macros.h
index a814e12..64ce214 100644
--- a/include/pso/macros.h
+++ b/include/pso/macros.h
@@ -27,10 +27,10 @@
o(tl_fade, TL_FADE) \
o(tl_fadeafter, TL_FADEAFTER)
-#define FOREACH_NODE(type, first, varname) for (type *varname = (type *)(first); varname != NULL; varname = (type *)(varname->next))
-#define FOREACH_NODE_NODECL(type, first, varname) for (varname = (type *)(first); varname != NULL; varname = (type *)(varname->next))
+#define FOREACH_NODE(type, first, varname) for (type *varname = (type *)(first); varname != NULL; varname = (type *)(varname->get_next()))
+#define FOREACH_NODE_NODECL(type, first, varname) for (varname = (type *)(first); varname != NULL; varname = (type *)(varname->get_next()))
-#define FOREACH_NODE_MULTI_ITER(type, first, varname, ...) for (type *varname = (type *)(first); varname != NULL; varname = (type *)(varname->next), __VA_ARGS__)
-#define FOREACH_NODE_NODECL_MULTI_ITER(type, first, varname, ...) for (varname = (type *)(first); varname != NULL; varname = (type *)(varname->next), __VA_ARGS__)
+#define FOREACH_NODE_MULTI_ITER(type, first, varname, ...) for (type *varname = (type *)(first); varname != NULL; varname = (type *)(varname->get_next()), __VA_ARGS__)
+#define FOREACH_NODE_NODECL_MULTI_ITER(type, first, varname, ...) for (varname = (type *)(first); varname != NULL; varname = (type *)(varname->get_next()), __VA_ARGS__)
#endif
diff --git a/src/pso/TMainTask.cpp b/src/pso/TMainTask.cpp
index e8e2715..a66fec2 100644
--- a/src/pso/TMainTask.cpp
+++ b/src/pso/TMainTask.cpp
@@ -325,13 +325,13 @@ void TMainTask::init_main_task() {
alt_heap = new THeap(0x17000, 16);
#define o(var, dummy) \
var = new TObject(this); \
- var->name = var##_name;
+ var->set_name(var##_name);
TL_OBJECTS
#undef o
}
TMainTask::TMainTask() : TObject(NULL) {
- name = TMainTask_name;
+ set_name(TMainTask_name);
task_flags = 0;
mbr_0x20 = 0;
mbr_0x24 = 0;