mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Match destructor
This commit is contained in:
parent
fdc35b8257
commit
c018453eae
|
|
@ -32400,21 +32400,21 @@ Address,Quality,Size,Name
|
|||
0x000000710050a340,M,000276,_ZN16E3ResourceLoaderC2Ev
|
||||
0x000000710050a454,O,000452,_ZN16E3ResourceLoader21loadHomeStageResourceEv
|
||||
0x000000710050a618,O,000348,_ZN16E3ResourceLoader17loadWorldResourceEv
|
||||
0x000000710050a774,M,000332,_ZN16E3ResourceLoaderD2Ev
|
||||
0x000000710050a774,O,000332,_ZN16E3ResourceLoaderD2Ev
|
||||
0x000000710050a8c0,O,000012,_ZN16E3ResourceLoader23cancelLoadWorldResourceEv
|
||||
0x000000710050a8cc,M,000036,_ZN16E3ResourceLoaderD0Ev
|
||||
0x000000710050a8cc,O,000036,_ZN16E3ResourceLoaderD0Ev
|
||||
0x000000710050a8f0,O,000104,_ZN16E3ResourceLoader33requestLoadWorldHomeStageResourceEv
|
||||
0x000000710050a958,O,000008,_ZNK16E3ResourceLoader31isEndLoadWorldHomeStageResourceEv
|
||||
0x000000710050a960,O,000112,_ZN16E3ResourceLoader24requestLoadWorldResourceEi
|
||||
0x000000710050a9d0,O,000060,_ZNK16E3ResourceLoader12isEndLoadAnyEv
|
||||
0x000000710050aa0c,M,000396,_ZN16E3ResourceLoader15tryCreateExHeapEi
|
||||
0x000000710050aa0c,O,000396,_ZN16E3ResourceLoader15tryCreateExHeapEi
|
||||
0x000000710050ab98,O,000180,_ZN16E3ResourceLoader23tryDestroyWorldResourceEPN4sead4HeapE
|
||||
0x000000710050ac4c,O,000004,_ZNK16E3ResourceLoader13printHeapInfoEv
|
||||
0x000000710050ac50,M,000360,_ZN16E3ResourceLoader28loadHomeStageResourceByWorldEPKcPN4sead4HeapEii
|
||||
0x000000710050ac50,O,000360,_ZN16E3ResourceLoader28loadHomeStageResourceByWorldEPKcPN4sead4HeapEii
|
||||
0x000000710050adb8,O,000028,_ZNK2al10FunctorV0MIP16E3ResourceLoaderMS1_FvvEEclEv
|
||||
0x000000710050add4,O,000076,_ZNK2al10FunctorV0MIP16E3ResourceLoaderMS1_FvvEE5cloneEv
|
||||
0x000000710050ae20,O,000004,_ZN2al10FunctorV0MIP16E3ResourceLoaderMS1_FvvEED0Ev
|
||||
0x000000710050ae24,U,000032,
|
||||
0x000000710050ae24,W,000032,_GLOBAL__sub_I_E3ResourceLoader.cpp
|
||||
0x000000710050ae44,U,000312,_ZN10E3SequenceC2EPKc
|
||||
0x000000710050af7c,U,000316,_ZN10E3SequenceD2Ev
|
||||
0x000000710050b0b8,U,000008,_ZThn24_N10E3SequenceD1Ev
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "Sequence/E3ResourceLoader.h"
|
||||
#include <thread/seadThread.h>
|
||||
#include "Library/Base/StringUtil.h"
|
||||
#include "Library/File/FileUtil.h"
|
||||
#include "Library/Memory/HeapUtil.h"
|
||||
|
|
@ -6,29 +7,70 @@
|
|||
#include "Library/Thread/AsyncFunctorThread.h"
|
||||
#include "Library/Yaml/ByamlIter.h"
|
||||
#include "Library/Yaml/ByamlUtil.h"
|
||||
#include "Sequence/E3Sequence.h"
|
||||
#include "System/GameDataFunction.h"
|
||||
#include "heap/seadFrameHeap.h"
|
||||
|
||||
s32 cPriority = 22;
|
||||
s32 cCoreId = 16;
|
||||
s32 cE3Priority = E3Sequence::cLoaderPriority;
|
||||
s32 cDefaultPriority = E3Sequence::cDefaultPriority;
|
||||
|
||||
// NON_MATCHING: Compiler creates the first functor in the wrong place
|
||||
E3ResourceLoader::E3ResourceLoader() {
|
||||
using E3ResourceLoaderFunctor = al::FunctorV0M<E3ResourceLoader*, void (E3ResourceLoader::*)()>;
|
||||
|
||||
mLoadHomeStageResourceThread = new al::AsyncFunctorThread(
|
||||
"LoadHomeStageResourceThread",
|
||||
E3ResourceLoaderFunctor(this, &E3ResourceLoader::loadHomeStageResource), cPriority,
|
||||
E3ResourceLoaderFunctor(this, &E3ResourceLoader::loadHomeStageResource), cE3Priority,
|
||||
0x100000, 0);
|
||||
|
||||
mWorldResourceThread = new al::AsyncFunctorThread(
|
||||
"WolrdResourceThread", E3ResourceLoaderFunctor(this, &E3ResourceLoader::loadWorldResource),
|
||||
cPriority, 0x100000, 0);
|
||||
cE3Priority, 0x100000, 0);
|
||||
|
||||
al::createWorldResourceHeap(false);
|
||||
mWorldResourceHeap = al::getWorldResourceHeap();
|
||||
}
|
||||
|
||||
E3ResourceLoader::~E3ResourceLoader() {}
|
||||
E3ResourceLoader::~E3ResourceLoader() {
|
||||
cancelLoadWorldResource();
|
||||
|
||||
if (mLoadHomeStageResourceThread) {
|
||||
delete mLoadHomeStageResourceThread;
|
||||
mLoadHomeStageResourceThread = nullptr;
|
||||
}
|
||||
|
||||
if (mWorldResourceThread) {
|
||||
delete mWorldResourceThread;
|
||||
mWorldResourceThread = nullptr;
|
||||
}
|
||||
|
||||
al::removeResourceCategory("E3常駐");
|
||||
|
||||
if (mSandWorldHomeStageResource) {
|
||||
al::removeResourceCategory("砂ワールドホーム");
|
||||
mSandWorldHomeStageResource->destroy();
|
||||
mSandWorldHomeStageResource = nullptr;
|
||||
}
|
||||
|
||||
if (mCityWorldHomeStageResource) {
|
||||
al::removeResourceCategory("都市ワールドホーム");
|
||||
mCityWorldHomeStageResource->destroy();
|
||||
mCityWorldHomeStageResource = nullptr;
|
||||
}
|
||||
|
||||
if (mWorldExResource) {
|
||||
al::removeResourceCategory("ワールド常駐");
|
||||
mWorldExResource->destroy();
|
||||
mWorldExResource = nullptr;
|
||||
}
|
||||
|
||||
if (mWorldResourceHeap) {
|
||||
al::destroyWorldResourceHeap(false);
|
||||
mWorldResourceHeap = nullptr;
|
||||
}
|
||||
|
||||
al::resetCurrentCategoryName();
|
||||
}
|
||||
|
||||
void E3ResourceLoader::loadHomeStageResource() {
|
||||
if (!_30) {
|
||||
|
|
@ -137,22 +179,32 @@ void E3ResourceLoader::tryCreateExHeap(s32 worldId) {
|
|||
return;
|
||||
|
||||
if (GameDataFunction::getWorldIndexSand() == worldId) {
|
||||
if (mCityWorldHomeStageResource) {
|
||||
if (mSandWorldHomeStageResource == mCityWorldHomeStageResource) {
|
||||
sead::FrameHeap* cityResource = mCityWorldHomeStageResource;
|
||||
if (cityResource) {
|
||||
if (mSandWorldHomeStageResource == cityResource) {
|
||||
al::removeResourceCategory("砂ワールドホーム");
|
||||
mSandWorldHomeStageResource->destroy();
|
||||
mSandWorldHomeStageResource = nullptr;
|
||||
}
|
||||
al::removeResourceCategory("都市ワールドホーム");
|
||||
mCityWorldHomeStageResource->destroy();
|
||||
mCityWorldHomeStageResource = nullptr;
|
||||
if (mCityWorldHomeStageResource == cityResource) {
|
||||
al::removeResourceCategory("都市ワールドホーム");
|
||||
mCityWorldHomeStageResource->destroy();
|
||||
mCityWorldHomeStageResource = nullptr;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (GameDataFunction::getWorldIndexCity() == worldId) {
|
||||
if (mSandWorldHomeStageResource) {
|
||||
al::removeResourceCategory("砂ワールドホーム");
|
||||
mSandWorldHomeStageResource->destroy();
|
||||
mSandWorldHomeStageResource = nullptr;
|
||||
|
||||
} else if (GameDataFunction::getWorldIndexCity() == worldId) {
|
||||
sead::FrameHeap* sandResource = mSandWorldHomeStageResource;
|
||||
|
||||
if (sandResource) {
|
||||
al::removeResourceCategory("砂ワールドホーム");
|
||||
mSandWorldHomeStageResource->destroy();
|
||||
mSandWorldHomeStageResource = nullptr;
|
||||
|
||||
if (mCityWorldHomeStageResource == sandResource) {
|
||||
al::removeResourceCategory("都市ワールドホーム");
|
||||
mCityWorldHomeStageResource->destroy();
|
||||
mCityWorldHomeStageResource = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -160,6 +212,7 @@ void E3ResourceLoader::tryCreateExHeap(s32 worldId) {
|
|||
sead::FrameHeap* newHeap = sead::FrameHeap::create(0, "WorldExResource", mWorldResourceHeap, 8,
|
||||
sead::Heap::cHeapDirection_Forward, false);
|
||||
mWorldExResource = newHeap;
|
||||
|
||||
al::addResourceCategory("ワールド常駐", 0x400, newHeap);
|
||||
}
|
||||
|
||||
|
|
@ -184,16 +237,18 @@ void E3ResourceLoader::printHeapInfo() const {}
|
|||
|
||||
void E3ResourceLoader::loadHomeStageResourceByWorld(const char* worldName, sead::Heap*, s32 id,
|
||||
s32 scenarioid) {
|
||||
al::ByamlIter byamlIter = (al::tryGetBymlFromArcName("SystemData/WorldList", "WorldResource"));
|
||||
auto x = al::tryGetBymlFromArcName("SystemData/WorldList", "WorldResource");
|
||||
al::ByamlIter byamlIter = al::ByamlIter(x);
|
||||
al::ByamlIter worldIter;
|
||||
al::getByamlIterByIndex(&worldIter, byamlIter, id);
|
||||
al::ByamlIter worldResourceIter;
|
||||
al::StringTmp<32> scenarioId{"Scenario%d", scenarioid};
|
||||
|
||||
if (!al::tryGetByamlIterByKey(&worldResourceIter, worldIter, scenarioId.cstr()))
|
||||
if (!al::tryGetByamlIterByKey(&worldResourceIter, worldIter,
|
||||
al::StringTmp<32>{"Scenario%d", scenarioid}.cstr()))
|
||||
return;
|
||||
|
||||
al::setCurrentCategoryName(worldName);
|
||||
|
||||
s32 size = worldResourceIter.getSize();
|
||||
for (s32 i = 0; i < size; i++) {
|
||||
al::ByamlIter v8;
|
||||
|
|
|
|||
4
src/Sequence/E3Sequence.cpp
Normal file
4
src/Sequence/E3Sequence.cpp
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#include "Sequence/E3Sequence.h"
|
||||
|
||||
const s32 E3Sequence::cLoaderPriority = 22;
|
||||
const s32 E3Sequence::cDefaultPriority = 16;
|
||||
9
src/Sequence/E3Sequence.h
Normal file
9
src/Sequence/E3Sequence.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
|
||||
class E3Sequence {
|
||||
public:
|
||||
static const s32 cLoaderPriority;
|
||||
static const s32 cDefaultPriority;
|
||||
};
|
||||
Loading…
Reference in a new issue