Files

53 lines
1.5 KiB
C++
Raw Permalink Normal View History

#include "Game/AreaObj/AreaObjContainer.hpp"
#include "Game/AreaObj/AreaObj.hpp"
#include "Game/Scene/SceneObjHolder.hpp"
2023-02-22 21:17:07 -05:00
#include <cstring>
2022-07-25 04:50:39 -04:00
AreaObjContainer::AreaObjContainer(const char *pName) : NameObj(pName) {
mNumManagers = 0;
}
void AreaObjContainer::init(const JMapInfoIter &rIter) {
for (u32 i = 0; i < 0x43; i++) {
AreaObjEntry* entry = &cCreateTable[i];
AreaObjMgr* mgr = entry->mFuncPtr(entry->_4, entry->mName);
JMapInfoIter iter;
iter.mInfo = nullptr;
2022-07-25 04:50:39 -04:00
iter._4 = -1;
mgr->init(iter);
s32 num = mNumManagers;
mNumManagers++;
mManagerArray[num] = mgr;
}
}
2022-07-27 03:52:39 -04:00
/* this function is nearly impossible to match without context behind the random stack storages */
2022-07-25 04:50:39 -04:00
AreaObjMgr* AreaObjContainer::getManager(const char *pName) const {
2022-07-27 03:52:39 -04:00
const char * str;
AreaObjMgr** first = (AreaObjMgr**)&mManagerArray[0];
AreaObjMgr** last = (AreaObjMgr**)&mManagerArray[mNumManagers];
while ((str && str == pName) == false) {
if (++first == last)
2022-07-25 04:50:39 -04:00
break;
2022-07-27 03:52:39 -04:00
str = strstr(pName, (*first)->mName);
2022-07-25 04:50:39 -04:00
}
return *first;
}
2022-07-27 03:52:39 -04:00
2021-12-12 00:32:01 -05:00
AreaObj* AreaObjContainer::getAreaObj(const char *pName, const TVec3f &rVec) const {
return getManager(pName)->find_in(rVec);
}
namespace MR {
AreaObjContainer* getAreaObjContainer() {
return reinterpret_cast<AreaObjContainer*>(MR::getSceneObjHolder()->getObj(SceneObj_AreaObjContainer));
}
};
AreaObjContainer::~AreaObjContainer() {
}