1#pragma once
2
3#include <prim/seadSafeString.h>
4
5namespace sead {
6class ArchiveFileDevice;
7class ArchiveRes;
8} // namespace sead
9
10namespace nn::g3d {
11class ResFile;
12}
13
14namespace al {
15class InitResourceDataAction;
16class InitResourceDataAnim;
17struct ActionAnimCtrlInfo;
18class ActorInitResourceData;
19
20class Resource {
21public:
22 Resource(const sead::SafeString& path);
23 Resource(const sead::SafeString& path, sead::ArchiveRes* archive);
24
25 bool isExistFile(const sead::SafeString& filePath) const;
26 bool isExistByml(const char* filePath) const;
27 u32 getSize() const;
28 u32 getEntryNum(const sead::SafeString& directoryPath) const;
29 void getEntryName(sead::BufferedSafeString* outName, const sead::SafeString& directoryPath,
30 u32 entryNum) const;
31 u32 getFileSize(const sead::SafeString& filePath) const;
32 const u8* getByml(const sead::SafeString& filePath) const;
33 const void* getFile(const sead::SafeString& filePath) const;
34 const u8* tryGetByml(const sead::SafeString& filePath) const;
35 const void* getKcl(const sead::SafeString& filePath) const;
36 const void* tryGetKcl(const sead::SafeString& filePath) const;
37 const void* getPa(const sead::SafeString& filePath) const;
38 const void* tryGetPa(const sead::SafeString& filePath) const;
39 const void* getOtherFile(const sead::SafeString& filePath) const;
40 const char* getArchiveName() const;
41 bool tryCreateResGraphicsFile(const sead::SafeString& filePath, nn::g3d::ResFile* resFile);
42 void cleanupResGraphicsFile();
43
44 ActorInitResourceData* getResData() const { return mData; }
45
46 nn::g3d::ResFile* getResFile() const { return mResFile; }
47
48private:
49 sead::ArchiveRes* mArchive = nullptr;
50 sead::ArchiveFileDevice* mDevice = nullptr;
51 sead::FixedSafeString<0x80> mName;
52 sead::Heap* mHeap;
53 ActorInitResourceData* mData = nullptr;
54 nn::g3d::ResFile* mResFile = nullptr;
55};
56
57class ActorResource {
58public:
59 ActorResource(const sead::SafeString&, Resource*, Resource*);
60 virtual ~ActorResource();
61
62 void initResourceData(const char*, bool);
63
64 bool hasAnimData() const { return mHasAnimData; }
65
66 Resource* getModelRes() const { return mModelRes; }
67
68 Resource* getAnimRes() const { return mAnimRes; }
69
70private:
71 sead::FixedSafeString<0x80> mName;
72 Resource* mModelRes;
73 Resource* mAnimRes;
74 bool mHasAnimData;
75 InitResourceDataAnim* mAnimResData;
76 InitResourceDataAction* mActionResData;
77};
78
79} // namespace al
80