mirror of
https://github.com/zeldaret/ss
synced 2026-08-08 10:33:26 -04:00
lyt_arcResourceAccessor
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user