mirror of
https://github.com/zeldaret/ss
synced 2026-07-09 06:13:17 -04:00
Merge pull request #233 from robojumper/arc-dvd-ret-cleanups
Small status/result cleanups for arc managers
This commit is contained in:
@@ -6,6 +6,13 @@
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "sized_string.h"
|
||||
|
||||
enum dArcResult_e {
|
||||
D_ARC_RESULT_WAIT = 1,
|
||||
D_ARC_RESULT_OK = 0,
|
||||
D_ARC_RESULT_ERROR_INTERNAL = -1,
|
||||
D_ARC_RESULT_ERROR_NOT_FOUND = -2,
|
||||
};
|
||||
|
||||
class ArcCallbackHandlerBase {
|
||||
public:
|
||||
ArcCallbackHandlerBase() : mPrefix(' ') {}
|
||||
@@ -26,8 +33,6 @@ public:
|
||||
|
||||
void BindSystemModelsAndLighting(nw4r::g3d::ResFile);
|
||||
|
||||
// TODO: loading status could be an enum (-2/-1/0/+1)
|
||||
|
||||
// Ghidra: ArcManagerEntry
|
||||
// size: 0x40
|
||||
class dRawArcEntry_c {
|
||||
@@ -41,10 +46,10 @@ public:
|
||||
static BOOL checkArcExistsOnDisk(const char *fileName, const char *dirName);
|
||||
static BOOL checkArcExistsOnDiskInner(SizedString<128> &path, const char *fileName, const char *dirName);
|
||||
|
||||
int mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap);
|
||||
int onMount(void *callbackArg);
|
||||
dArcResult_e mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap);
|
||||
dArcResult_e onMount(void *callbackArg);
|
||||
|
||||
int ensureLoadedMaybe(void *callbackArg);
|
||||
dArcResult_e ensureLoadedMaybe(void *callbackArg);
|
||||
|
||||
inline bool isReferenced() {
|
||||
return mRefCount != 0;
|
||||
@@ -105,14 +110,14 @@ public:
|
||||
bool init(u16 count, ArcCallbackHandler *callbackArg, EGG::Heap *heap);
|
||||
BOOL getArcOrLoadFromDisk(const char *name, const char *dirName, u8 mountDirection, EGG::Heap *heap);
|
||||
BOOL addEntryFromSuperArc(const char *name, void *data, u8 mountDirection, EGG::Heap *heap);
|
||||
int ensureLoadedMaybe2(const char *name);
|
||||
int ensureLoadedMaybe(const char *name);
|
||||
dArcResult_e ensureLoadedMaybe2(const char *name);
|
||||
dArcResult_e ensureLoadedMaybe(const char *name);
|
||||
bool hasEntry(const char *name);
|
||||
BOOL decreaseRefCount(const char *name);
|
||||
void *getDataFromOarc(const char *name, const char *path);
|
||||
void *getSubEntryData(const char *name, const char *path);
|
||||
void *getLoadedArcData(const char *name);
|
||||
int ensureAllEntriesLoaded();
|
||||
dArcResult_e ensureAllEntriesLoaded();
|
||||
dRawArcEntry_c *findEntry(const char *name) const;
|
||||
dRawArcEntry_c *findEmptySlot();
|
||||
dRawArcEntry_c *findLoadedEntry(const char *name);
|
||||
@@ -123,4 +128,4 @@ private:
|
||||
/* 0x8 */ ArcCallbackHandler *mCallbackArg;
|
||||
};
|
||||
|
||||
#endif;
|
||||
#endif
|
||||
|
||||
@@ -47,6 +47,7 @@ EGG::Heap *getArchiveHeap();
|
||||
} // namespace mDvd
|
||||
|
||||
class mDvd_command_c {
|
||||
friend class mDvd_param_c;
|
||||
public:
|
||||
mDvd_command_c();
|
||||
virtual ~mDvd_command_c();
|
||||
@@ -60,9 +61,14 @@ public:
|
||||
static void destroy(mDvd_command_c **cmd);
|
||||
void do_delete();
|
||||
|
||||
bool isDone() const {
|
||||
return mStatus != 0;
|
||||
}
|
||||
|
||||
void *operator new(size_t size);
|
||||
void operator delete(void *ptr);
|
||||
|
||||
protected:
|
||||
mDvd_command_c *mNext;
|
||||
u8 mStatus;
|
||||
u8 mMountDirection;
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
|
||||
EGG::ExpHeap *getHeap(s32 roomid);
|
||||
|
||||
inline int ensureAllEntriesLoaded() {
|
||||
inline dArcResult_e ensureAllEntriesLoaded() {
|
||||
return mArcTable.ensureAllEntriesLoaded();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,20 @@
|
||||
#include "d/d_rawarchive.h"
|
||||
#include "egg/core/eggHeap.h"
|
||||
|
||||
class LayoutArcControl {
|
||||
public:
|
||||
LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {}
|
||||
virtual ~LayoutArcControl();
|
||||
void set(const char *const *layoutArcs, s32 numArcs);
|
||||
bool load(EGG::Heap *heap) const;
|
||||
bool allLoaded() const;
|
||||
bool release();
|
||||
|
||||
private:
|
||||
const char *const *mLayoutArcs;
|
||||
s32 mNumArcs;
|
||||
};
|
||||
|
||||
class LayoutArcManager {
|
||||
public:
|
||||
LayoutArcManager();
|
||||
@@ -14,13 +28,13 @@ public:
|
||||
|
||||
void init(EGG::Heap *heap);
|
||||
|
||||
inline int ensureAllEntriesLoaded() {
|
||||
inline dArcResult_e ensureAllEntriesLoaded() {
|
||||
return mArcTable.ensureAllEntriesLoaded();
|
||||
}
|
||||
|
||||
bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap);
|
||||
int ensureLoaded1(const char *object);
|
||||
int ensureLoaded2(const char *object);
|
||||
dArcResult_e ensureLoaded1(const char *object);
|
||||
dArcResult_e ensureLoaded2(const char *object);
|
||||
bool hasEntry(const char *object);
|
||||
bool decrement(const char *path);
|
||||
void *getData(const char *oarcName, const char *fileName);
|
||||
@@ -35,17 +49,4 @@ private:
|
||||
dRawArcTable_c mArcTable;
|
||||
};
|
||||
|
||||
class LayoutArcControl {
|
||||
public:
|
||||
LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {}
|
||||
virtual ~LayoutArcControl();
|
||||
void set(const char *const *layoutArcs, s32 numArcs);
|
||||
void load(EGG::Heap *heap);
|
||||
void release();
|
||||
|
||||
private:
|
||||
const char **mLayoutArcs;
|
||||
s32 mNumArcs;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,6 +4,19 @@
|
||||
#include "d/d_rawarchive.h"
|
||||
#include "egg/core/eggHeap.h"
|
||||
|
||||
class ObjectArcControl {
|
||||
public:
|
||||
ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {}
|
||||
virtual ~ObjectArcControl();
|
||||
void set(const char *const *objectArcs, s32 numArcs);
|
||||
bool load(EGG::Heap *heap) const;
|
||||
bool release();
|
||||
|
||||
private:
|
||||
const char *const *mObjectArcs;
|
||||
s32 mNumArcs;
|
||||
};
|
||||
|
||||
class OarcManager {
|
||||
public:
|
||||
OarcManager();
|
||||
@@ -13,15 +26,15 @@ public:
|
||||
|
||||
void init(EGG::Heap *heap);
|
||||
|
||||
inline int ensureAllEntriesLoaded() {
|
||||
inline dArcResult_e ensureAllEntriesLoaded() {
|
||||
return mArcTable.ensureAllEntriesLoaded();
|
||||
}
|
||||
|
||||
bool checkIfObjectArcExistsOnDisk(const char *object);
|
||||
bool loadObjectArcFromDisk(const char *object, EGG::Heap *heap);
|
||||
bool addEntryFromSuperArc(const char *object, void *data, EGG::Heap *heap);
|
||||
int ensureLoaded1(const char *object);
|
||||
void ensureLoaded2(const char *object);
|
||||
dArcResult_e ensureLoaded1(const char *object);
|
||||
dArcResult_e ensureLoaded2(const char *object);
|
||||
bool decrement(const char *path);
|
||||
void *getData(const char *oarcName, const char *fileName);
|
||||
|
||||
@@ -41,17 +54,4 @@ private:
|
||||
dRawArcTable_c mArcTable;
|
||||
};
|
||||
|
||||
class ObjectArcControl {
|
||||
public:
|
||||
ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {}
|
||||
virtual ~ObjectArcControl();
|
||||
void set(const char *const *objectArcs, s32 numArcs);
|
||||
void load(EGG::Heap *heap);
|
||||
void release();
|
||||
|
||||
private:
|
||||
const char **mObjectArcs;
|
||||
s32 mNumArcs;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user