mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 15:01:38 -04:00
169 lines
4.7 KiB
C++
169 lines
4.7 KiB
C++
#ifndef F_BASE_H
|
|
#define F_BASE_H
|
|
|
|
// This file is adapted from
|
|
// https://github.com/NSMBW-Community/NSMBW-Decomp/blob/master/include/dol/framework/f_base.hpp and the Skyward Sword
|
|
// Ghidra database. Comments and docs can be seen above. stripped in this file for easier looking
|
|
|
|
#include "c/c_list.h"
|
|
#include "common.h"
|
|
#include "egg/core/eggFrmHeap.h"
|
|
#include "f/f_base_id.h"
|
|
#include "f/f_helper_unk.h"
|
|
#include "f/f_list_mg.h"
|
|
#include "f/f_manager.h"
|
|
#include "f/f_profile.h"
|
|
|
|
// Ghidra: fBase
|
|
// size: 0x64
|
|
// official name
|
|
class fBase_c {
|
|
public:
|
|
/* 0x00 */ fBaseID_e mID;
|
|
/* 0x04 */ u32 mParams;
|
|
/* 0x08 */ ProfileName mProfileName;
|
|
/* 0x0A */ u8 mLifecycleState;
|
|
/* 0x0B */ bool mDeleteRequest;
|
|
/* 0x0C */ s8 mUpdateRequest;
|
|
/* 0x0D */ bool mCreateRequest;
|
|
/* 0x0E */ u8 mGroupType;
|
|
/* 0x0F */ u8 mProcControl;
|
|
/* 0x10 */ fManager_c mManager;
|
|
/* 0x50 */ fBaHelper_c *mpHelper;
|
|
/* 0x54 */ cListMg_c mActorList;
|
|
/* 0x5C */ EGG::FrmHeap *mpHeap;
|
|
/* 0x60 */ // vtable
|
|
public:
|
|
enum UPDATE_STATUS_e {
|
|
UPDATING,
|
|
UPDATE_REQUEST,
|
|
UPDATE_FORCE,
|
|
};
|
|
enum LIFECYCLE_e {
|
|
WAITING_FOR_CREATE,
|
|
ACTIVE,
|
|
TO_BE_DELETED,
|
|
};
|
|
enum GROUP_TYPE_e {
|
|
OTHER,
|
|
SCENE,
|
|
ACTOR,
|
|
STAGE,
|
|
};
|
|
enum MAIN_STATE_e {
|
|
CANCELED,
|
|
ERROR,
|
|
SUCCESS,
|
|
WAITING
|
|
};
|
|
enum PACK_RESULT_e {
|
|
NOT_READY,
|
|
SUCCEEDED,
|
|
FAILED,
|
|
};
|
|
enum PROC_DISABLE_e {
|
|
ROOT_DISABLE_EXECUTE = 1,
|
|
DISABLE_EXECUTE = 2,
|
|
ROOT_DISABLE_DRAW = 4,
|
|
DISABLE_DRAW = 8
|
|
};
|
|
|
|
int getID() const {
|
|
return mID;
|
|
}
|
|
|
|
bool checkProcControl(u8 procControl) const {
|
|
return (mProcControl & procControl) != 0;
|
|
}
|
|
void setProcControl(u8 procControl) {
|
|
mProcControl |= procControl;
|
|
}
|
|
void unsetProcControl(u8 procControl) {
|
|
mProcControl &= ~procControl;
|
|
}
|
|
|
|
void setParams() {
|
|
mID = m_rootUniqueID;
|
|
mParams = m_tmpCtData.params;
|
|
mProfileName = m_tmpCtData.prof_name;
|
|
mGroupType = m_tmpCtData.group_type;
|
|
}
|
|
|
|
u32 getFromParams(u8 shift, u32 mask) {
|
|
return (mParams >> shift) & mask;
|
|
}
|
|
|
|
public:
|
|
fBase_c();
|
|
static void *operator new(size_t);
|
|
static void operator delete(void *);
|
|
|
|
public:
|
|
/* vt 0x08 */ virtual int create();
|
|
/* vt 0x0C */ virtual int preCreate();
|
|
/* vt 0x10 */ virtual void postCreate(MAIN_STATE_e state);
|
|
/* vt 0x14 */ virtual int doDelete();
|
|
/* vt 0x18 */ virtual int preDelete();
|
|
/* vt 0x1C */ virtual void postDelete(MAIN_STATE_e state);
|
|
/* vt 0x20 */ virtual int execute();
|
|
/* vt 0x24 */ virtual int preExecute();
|
|
/* vt 0x28 */ virtual void postExecute(MAIN_STATE_e state);
|
|
/* vt 0x2C */ virtual int draw();
|
|
/* vt 0x30 */ virtual int preDraw();
|
|
/* vt 0x34 */ virtual void postDraw(MAIN_STATE_e state);
|
|
/* vt 0x38 */ virtual void deleteReady();
|
|
/* vt 0x3C */ virtual bool entryFrmHeap(size_t size, EGG::Heap *parentHeap);
|
|
/* vt 0x40 */ virtual bool entryFrmHeapNonAdjust(size_t size, EGG::Heap *parentHeap);
|
|
/* vt 0x44 */ virtual bool createHeap();
|
|
/* vt 0x48 */ virtual ~fBase_c();
|
|
|
|
public:
|
|
int commonPack(int (fBase_c::*doFunc)(), int (fBase_c::*preFunc)(), void (fBase_c::*postFunc)(MAIN_STATE_e));
|
|
int createPack();
|
|
int deletePack();
|
|
int executePack();
|
|
int drawPack();
|
|
int connectProc();
|
|
void deleteRequest();
|
|
void forceUpdate();
|
|
static fBase_c *getConnectRoot();
|
|
static fBase_c *getConnectTreeNext(fBase_c *);
|
|
fBase_c *getConnectParent() const;
|
|
fBase_c *getConnectChild() const;
|
|
fBase_c *getConnectBrNext() const;
|
|
void updateExecutePriority(u16 priority);
|
|
bool setConnectChild(fBase_c *child);
|
|
void runCreate();
|
|
fBase_c *getChildProcessCreateState() const;
|
|
bool checkChildProcessCreateState() const;
|
|
|
|
public:
|
|
static void setTmpCtData(ProfileName profName, fTrNdBa_c *connectParent, u32 param, u8 groupType);
|
|
static fBase_c *fBase_make(ProfileName profName, fTrNdBa_c *connectParent, u32 param, u8 groupType);
|
|
static fBase_c *createRoot(ProfileName profName, u32 param, u8 groupType);
|
|
static fBase_c *createChild(ProfileName profName, fBase_c *parent, u32 param, u8 groupType);
|
|
|
|
public:
|
|
static fLiMgBa_c m_forceExecuteList;
|
|
static int (*sLoadAsyncCallback)();
|
|
static void (*sUnloadCallback)();
|
|
|
|
private:
|
|
static fBaseID_e m_rootUniqueID;
|
|
|
|
struct ConstructData {
|
|
ProfileName prof_name;
|
|
fTrNdBa_c *connect_parent;
|
|
u32 params;
|
|
u8 group_type;
|
|
};
|
|
|
|
static ConstructData m_tmpCtData;
|
|
|
|
friend class fManager_c;
|
|
friend class fLiNdBa_c;
|
|
friend class fTrMgBa_c;
|
|
};
|
|
|
|
#endif
|