mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-15 12:08:37 -04:00
process class inheritance vtable fix
This commit is contained in:
@@ -240,8 +240,14 @@ struct cull_box {
|
||||
/* 0xC */ Vec max;
|
||||
};
|
||||
|
||||
#if __MWERKS__
|
||||
class fopAc_ac_c {
|
||||
public:
|
||||
/* 0x000 */ leafdraw_class base;
|
||||
#else
|
||||
class fopAc_ac_c : public leafdraw_class {
|
||||
public:
|
||||
#endif
|
||||
/* 0x0C0 */ int actor_type;
|
||||
/* 0x0C4 */ create_tag_class actor_tag;
|
||||
/* 0x0D8 */ create_tag_class draw_tag;
|
||||
@@ -284,8 +290,16 @@ public:
|
||||
/* 0x566 */ s8 field_0x566;
|
||||
/* 0x567 */ s8 field_0x567;
|
||||
|
||||
#if !__MWERKS__
|
||||
s8 actor_last_base_field;
|
||||
#endif
|
||||
|
||||
fopAc_ac_c();
|
||||
#if !__MWERKS__
|
||||
~fopAc_ac_c() override;
|
||||
#else
|
||||
~fopAc_ac_c();
|
||||
#endif
|
||||
|
||||
static u32 getStopStatus() { return stopStatus; }
|
||||
static void setStopStatus(u32 status) { stopStatus = status; }
|
||||
|
||||
@@ -17,20 +17,25 @@
|
||||
// Modern compilers will zero the parent struct in default constructors.
|
||||
// So instead of adding default constructors to everything,
|
||||
// we'll just save & restore that data.
|
||||
#define fopAcM_ct_placement_copy_length offsetof(fopAc_ac_c, actor_last_base_field) - offsetof(fopAc_ac_c, type)
|
||||
|
||||
#define fopAcM_ct_placement(ptr, ClassName) \
|
||||
fopAc_ac_c copy; \
|
||||
memcpy(©, &(ptr)->base, sizeof(fopAc_ac_c)); \
|
||||
memcpy(©.type, &(ptr)->type, fopAcM_ct_placement_copy_length); \
|
||||
new (ptr) ClassName() ; \
|
||||
memcpy(&(ptr)->base, ©, sizeof(fopAc_ac_c));
|
||||
memcpy(&(ptr)->type, ©.type, fopAcM_ct_placement_copy_length);
|
||||
#else
|
||||
#define fopAcM_ct_placement(ptr, ClassName) new (ptr) ClassName()
|
||||
#endif
|
||||
|
||||
#define fopAcM_ct(ptr, ClassName) \
|
||||
if ((ptr)->layer_tag.layer == NULL) { OSPanic(__FILE__, __LINE__, "UH OH"); } \
|
||||
if (!fopAcM_CheckCondition(ptr, fopAcCnd_INIT_e)) { \
|
||||
fopAcM_ct_placement(ptr, ClassName); \
|
||||
fopAcM_OnCondition(ptr, fopAcCnd_INIT_e); \
|
||||
}
|
||||
} \
|
||||
if ((ptr)->layer_tag.layer == NULL) { OSPanic(__FILE__, __LINE__, "Oh come on"); }
|
||||
|
||||
|
||||
#define fopAcM_RegisterDeleteID(i_this, actor_name_str) \
|
||||
("Delete -> " actor_name_str "(id=%d)\n", fopAcM_GetID(i_this))
|
||||
|
||||
Reference in New Issue
Block a user