lyt_arcResourceAccessor

This commit is contained in:
elijah-thomas774
2024-05-18 23:18:40 -04:00
parent fa9a9ce949
commit 230a7d20ce
7 changed files with 245 additions and 230 deletions
+55 -28
View File
@@ -1,13 +1,15 @@
#ifndef NW4R_LYT_ARC_RESOURCE_ACCESSOR_H
#define NW4R_LYT_ARC_RESOURCE_ACCESSOR_H
#include "common.h"
#include "lyt_resourceAccessor.h"
#include "nw4r/lyt/lyt_resourceAccessor.h"
#include "nw4r/ut/ut_Font.h"
#include "nw4r/ut/ut_LinkList.h"
#include <rvl/ARC/arc.h>
#include <rvl/ARC.h>
#include <string.h>
#define FONTNAMEBUF_MAX 127
#define FONTNAMEBUF_MAX 128
#define ROOTPATH_MAX 128
namespace nw4r {
namespace lyt {
@@ -16,7 +18,7 @@ public:
FontRefLink();
~FontRefLink() {}
void Set(const char *, ut::Font *);
void Set(const char *name, ut::Font *pFont);
ut::Font *GetFont() const {
return mFont;
@@ -32,37 +34,61 @@ private:
ut::Font *mFont; // at 0x88
};
class ArcResourceAccessor : public ResourceAccessor {
class ArcResourceLink {
public:
ArcResourceAccessor();
virtual ~ArcResourceAccessor() {} // at 0x8
virtual UNKTYPE *GetResource(u32, const char *, u32 *); // at 0xC
virtual ut::Font *GetFont(const char *); // at 0x10
bool Set(void *pFile, const char *name);
bool Attach(void *, const char *);
void *Detach() {
void *old = mArchive;
mArchive = NULL;
return old;
const char *GetResRootDir() const {
return mResRootDir;
}
bool IsAttached() const {
return (mArchive != NULL);
}
void RegistFont(FontRefLink *pLink) {
mRefList.PushBack(pLink);
}
void UnregistFont(FontRefLink *pLink) {
mRefList.Erase(pLink);
ARCHandle *GetArcHandle() {
return &mArcHandle;
}
private:
ARCHandle mHandle; // at 0x4
void *mArchive; // at 0x8
ut::LinkList<FontRefLink, 0> mRefList; // at 0x24
char mRootDir[FONTNAMEBUF_MAX]; // at 0x30
ut::LinkListNode mLink; // at 0x00
ARCHandle mArcHandle; // at 0x08
char mResRootDir[ROOTPATH_MAX]; // at 0x24
};
class ArcResourceAccessor : public ResourceAccessor {
public:
ArcResourceAccessor();
virtual ~ArcResourceAccessor() {} // at 0x8
virtual void *GetResource(u32, const char *, u32 *); // at 0xC
virtual ut::Font *GetFont(const char *); // at 0x10
bool Attach(void *pFile, const char *name);
void *Detach();
bool IsAttached() const {
return (mArcBuf != NULL);
}
void RegistFont(FontRefLink *pLink);
void UnregistFont(FontRefLink *pLink);
private:
ARCHandle mArcHandle; // at 0x4
void *mArcBuf; // at 0x8
ut::LinkList<FontRefLink, 0> mFontList; // at 0x24
char mResRootDir[ROOTPATH_MAX]; // at 0x30
};
class MultiArcResourceAccessor : ResourceAccessor {
public:
MultiArcResourceAccessor();
virtual ~MultiArcResourceAccessor(); // at 0x8
virtual void *GetResource(u32 resType, const char *name, u32 *pSize); // at 0xC
virtual ut::Font *GetFont(const char *); // at 0x10
void Attach(ArcResourceLink *pArcResource);
void RegistFont(FontRefLink *pLink);
ut::LinkList<ArcResourceLink, 0x0> mArcList; // at 0x4
ut::LinkList<FontRefLink, 0x0> mFontList; // at 0x10
};
namespace detail {
@@ -76,6 +102,7 @@ static ut::Font *FindFont(ut::LinkList<FontRefLink, 0> *pList, const char *name)
return NULL;
}
} // namespace detail
} // namespace lyt
} // namespace nw4r
+6 -6
View File
@@ -81,9 +81,9 @@ typedef struct ARCEntry {
typedef struct ARCDirEntry {
ARCHandle *handle; // at 0x0
u32 path_begin; // at 0x4
u32 path_it; // at 0x8
u32 path_end; // at 0xC
u32 entryNum; // at 0x4
BOOL isDir; // at 0x8
const char *name; // at 0xC
} ARCDirEntry;
BOOL ARCGetCurrentDir(ARCHandle *handle, char *string, u32 maxlen);
@@ -96,9 +96,9 @@ s32 ARCGetStartOffset(ARCFileInfo *info);
u32 ARCGetLength(ARCFileInfo *info);
BOOL ARCClose(ARCFileInfo *info);
BOOL ARCChangeDir(ARCHandle *info, const char *path);
BOOL ARCOpenDir(ARCHandle *info, const char *path, ARCDirEntry *dir);
BOOL ARCReadDir(ARCDirEntry *dir, ARCEntry *entry);
BOOL ARCCloseDir(ARCDirEntry *dir);
BOOL ARCOpenDir(ARCHandle *info, const char *path, ARCDir *dir);
BOOL ARCReadDir(ARCDir *dir, ARCDirEntry *entry);
BOOL ARCCloseDir(ARCDir *dir);
#ifdef __cplusplus
}