SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
NameObjFactory.cpp
1#include "Game/NameObj/NameObjFactory.hpp"
2#include "Game/Map/PlanetMapCreator.hpp"
3#include "Game/Util.hpp"
4
5CreationFuncPtr NameObjFactory::getCreator(const char *pName) {
6 if (PlanetMapCreatorFunction::isRegisteredObj(pName)) {
7 return PlanetMapCreatorFunction::getPlanetMapCreator(pName);
8 }
9
10 const Name2CreateFunc* func = NameObjFactory::getName2CreateFunc(pName, nullptr);
11 return !func ? nullptr : func->mCreationFunc;
12}
13
14void NameObjFactory::requestMountObjectArchives(const char *pName, const JMapInfoIter &rIter) {
16 NameObjFactory::getMountObjectArchiveList(&archiveList, pName, rIter);
17
18 for (int i = 0; i < archiveList.mCount; i++) {
19 MR::mountAsyncArchiveByObjectOrLayoutName(archiveList.getArchive(i), nullptr);
20 }
21}
22
23bool NameObjFactory::isReadResourceFromDVD(const char *pName, const JMapInfoIter &rIter) {
25 NameObjFactory::getMountObjectArchiveList(&archiveList, pName, rIter);
26
27 for (int i = 0; i < archiveList.mCount; i++) {
28 if (!MR::isLoadedObjectOrLayoutArchive(archiveList.getArchive(i))) {
29 return true;
30 }
31 }
32
33 return false;
34}
35
36bool NameObjFactory::isPlayerArchiveLoaderObj(const char *pArchive) {
37 for (u32 i = 0; i < 0x8; i++) {
38 if (MR::isEqualStringCase(cPlayerArchiveLoaderObjTable[i], pArchive)) {
39 return true;
40 }
41 }
42
43 return false;
44}
45
46const NameObjFactory::Name2CreateFunc* NameObjFactory::getName2CreateFunc(const char *pName, const NameObjFactory::Name2CreateFunc *pTable) {
47 if (!pTable) {
48 pTable = cCreateTable;
49 }
50
51
52 const Name2CreateFunc* last = &(cCreateTable[0x49F]);
53
54 for (const Name2CreateFunc* i = pTable; i != last; i++) {
55 if (i->mName) {
56 if (MR::isEqualStringCase(i->mName, pName)) {
57 return i;
58 }
59 }
60 }
61
62 return 0;
63}
64
65void NameObjFactory::getMountObjectArchiveList(NameObjArchiveListCollector *pArchiveList, const char *pName, const JMapInfoIter &rIter) {
66 if (PlanetMapCreatorFunction::isRegisteredObj(pName)) {
67 PlanetMapCreatorFunction::makeArchiveList(pArchiveList, rIter, pName);
68 }
69 else {
70 const Name2CreateFunc* creationFunc = NameObjFactory::getName2CreateFunc(pName, nullptr);
71
72 if (creationFunc && creationFunc->mArchiveName != 0) {
73 pArchiveList->addArchive(creationFunc->mArchiveName);
74 }
75
76 for (NameObjFactory::Name2Archive* curArchive = cName2ArchiveNamesTable; curArchive != &cName2ArchiveNamesTable[0x1B9]; curArchive++) {
77 if (MR::isEqualString(curArchive->mObjectName, pName)) {
78 pArchiveList->addArchive(curArchive->mArchiveName);
79 }
80 }
81
82 for (const NameObjFactory::Name2MakeArchiveListFunc* curFunc = cName2MakeArchiveListFuncTable; curFunc != &cName2MakeArchiveListFuncTable[0x5B]; curFunc++) {
83 if (MR::isEqualString(curFunc->mName, pName)) {
84 curFunc->mArchiveFunc(pArchiveList, rIter);
85 }
86 }
87 }
88}
Stores archive names of NameObjs.