mirror of https://github.com/zeldaret/botw.git
				
				
				
			Implement more parts of aocManager
This commit is contained in:
		
							parent
							
								
									1bd2f03de8
								
							
						
					
					
						commit
						aa766a1977
					
				| 
						 | 
				
			
			@ -74404,12 +74404,12 @@
 | 
			
		|||
0x0000007100d68e54,sub_7100D68E54,188,
 | 
			
		||||
0x0000007100d68f10,nullsub_5545,4,
 | 
			
		||||
0x0000007100d68f14,sub_7100D68F14,412,
 | 
			
		||||
0x0000007100d690b0,aocManager::disposer::dtor,92,
 | 
			
		||||
0x0000007100d6910c,aocManager::disposer::dtorDelete,100,
 | 
			
		||||
0x0000007100d69170,aocManager::createInstance,128,
 | 
			
		||||
0x0000007100d691f0,aocManager::ctor,1560,
 | 
			
		||||
0x0000007100d690b0,aocManager::disposer::dtor,92,_ZN5uking3aoc7Manager18SingletonDisposer_D2Ev
 | 
			
		||||
0x0000007100d6910c,aocManager::disposer::dtorDelete,100,_ZN5uking3aoc7Manager18SingletonDisposer_D0Ev
 | 
			
		||||
0x0000007100d69170,aocManager::createInstance,128,_ZN5uking3aoc7Manager14createInstanceEPN4sead4HeapE
 | 
			
		||||
0x0000007100d691f0,aocManager::ctor,1560,_ZN5uking3aoc7ManagerC1Ev
 | 
			
		||||
0x0000007100d69808,aocManagerInitFlagsFuncPtr,4,
 | 
			
		||||
0x0000007100d6980c,aocManager::dtor,380,
 | 
			
		||||
0x0000007100d6980c,aocManager::dtor,380,_ZN5uking3aoc7ManagerD1Ev
 | 
			
		||||
0x0000007100d69988,aocManager::init,256,
 | 
			
		||||
0x0000007100d69a88,aocManager::loadVersionFile,204,
 | 
			
		||||
0x0000007100d69b54,sub_7100D69B54,180,
 | 
			
		||||
| 
						 | 
				
			
			@ -74441,8 +74441,8 @@
 | 
			
		|||
0x0000007100d6c8c4,getAocFlagString,428,
 | 
			
		||||
0x0000007100d6ca70,j__ZdlPv_858,4,
 | 
			
		||||
0x0000007100d6ca74,_ZN4sead19FixedSafeStringBaseIcLi107EEaSERKNS_14SafeStringBaseIcEE,240,
 | 
			
		||||
0x0000007100d6cb64,sub_7100D6CB64,48,
 | 
			
		||||
0x0000007100d6cb94,sub_7100D6CB94,92,
 | 
			
		||||
0x0000007100d6cb64,sub_7100D6CB64,48,_ZN4sead9Delegate1IN5uking3aoc7ManagerEPN4ksys3gdt7Manager11ReinitEventEE6invokeES8_
 | 
			
		||||
0x0000007100d6cb94,sub_7100D6CB94,92,_ZNK4sead9Delegate1IN5uking3aoc7ManagerEPN4ksys3gdt7Manager11ReinitEventEE5cloneEPNS_4HeapE
 | 
			
		||||
0x0000007100d6cbf0,j__ZdlPv_859,4,
 | 
			
		||||
0x0000007100d6cbf4,_ZN4sead15FixedSafeStringILi153EEaSERKNS_14SafeStringBaseIcEE,240,
 | 
			
		||||
0x0000007100d6cce4,aoc2::Instance::dtor,92,_ZN5uking4aoc218SingletonDisposer_D2Ev
 | 
			
		||||
| 
						 | 
				
			
			@ -76026,7 +76026,7 @@
 | 
			
		|||
0x0000007100dd0970,nullsub_3856,4,
 | 
			
		||||
0x0000007100dd0974,GameDataMgr::calc1,240,
 | 
			
		||||
0x0000007100dd0a64,GameDataMgr::setCallback_stubbed,4,_ZN4ksys3gdt7Manager17addReinitCallbackERN4sead13DelegateEventIPNS1_11ReinitEventEE4SlotE
 | 
			
		||||
0x0000007100dd0a68,nullsub_3858,4,
 | 
			
		||||
0x0000007100dd0a68,nullsub_3858,4,_ZN4ksys3gdt7Manager20removeReinitCallbackERN4sead13DelegateEventIPNS1_11ReinitEventEE4SlotE
 | 
			
		||||
0x0000007100dd0a6c,GameDataMgr::setCurrentRupeeFlagName,12,
 | 
			
		||||
0x0000007100dd0a78,GameDataMgr::requestResetAllToInitial,16,
 | 
			
		||||
0x0000007100dd0a88,GameDataMgr::getAndSetShrineQuestAndKassFlags,3628,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		
		
			 Can't render this file because it is too large. 
		
	 | 
							
								
								
									
										2
									
								
								lib/sead
								
								
								
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								lib/sead
								
								
								
								
							| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
Subproject commit 0295cef7a2f87eef8c7b75b6a21d8b3a9bd1572d
 | 
			
		||||
Subproject commit 161a4d014b9de8c41b44ba08b716b3b45e656de4
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +1,46 @@
 | 
			
		|||
#include "Game/DLC/aocManager.h"
 | 
			
		||||
#include <filedevice/seadFileDeviceMgr.h>
 | 
			
		||||
#include "KingSystem/Utils/SafeDelete.h"
 | 
			
		||||
 | 
			
		||||
#ifdef NNSDK
 | 
			
		||||
#include <nn/fs.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace uking::aoc {
 | 
			
		||||
 | 
			
		||||
SEAD_SINGLETON_DISPOSER_IMPL(Manager)
 | 
			
		||||
 | 
			
		||||
Manager::Manager() : mGdtReinitSlot{this, &Manager::onGdtReinit} {
 | 
			
		||||
    resetFlags();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Manager::~Manager() {
 | 
			
		||||
    if (auto* gdm = ksys::gdt::Manager::instance())
 | 
			
		||||
        gdm->removeReinitCallback(mGdtReinitSlot);
 | 
			
		||||
 | 
			
		||||
    mFileDevicePrefix.deregister();
 | 
			
		||||
    mFileDevicePrefix2.deregister();
 | 
			
		||||
    mVersionFileDevPrefix.deregister();
 | 
			
		||||
 | 
			
		||||
    if (mFileDevice) {
 | 
			
		||||
        sead::FileDeviceMgr::instance()->unmount("aoc");
 | 
			
		||||
        ksys::util::safeDelete(mFileDevice);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef NNSDK
 | 
			
		||||
    if (mAocFsCache) {
 | 
			
		||||
        nn::fs::Unmount("aoc");
 | 
			
		||||
        ksys::util::safeDelete(mAocFsCache);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Manager::resetFlags() {
 | 
			
		||||
    mFlagAocVerAtLastPlay = ksys::gdt::InvalidHandle;
 | 
			
		||||
    mFlagLatestAocVerPlayed = ksys::gdt::InvalidHandle;
 | 
			
		||||
    mFlagHasAocVer1 = ksys::gdt::InvalidHandle;
 | 
			
		||||
    mFlagHasAocVer2 = ksys::gdt::InvalidHandle;
 | 
			
		||||
    mFlagHasAocVer3 = ksys::gdt::InvalidHandle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace uking::aoc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,15 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <container/seadSafeArray.h>
 | 
			
		||||
#include <heap/seadDisposer.h>
 | 
			
		||||
#include <math/seadVector.h>
 | 
			
		||||
#include <prim/seadSafeString.h>
 | 
			
		||||
#include <prim/seadStorageFor.h>
 | 
			
		||||
#include <prim/seadTypedBitFlag.h>
 | 
			
		||||
#include "KingSystem/GameData/gdtManager.h"
 | 
			
		||||
#include "KingSystem/Resource/resHandle.h"
 | 
			
		||||
#include "KingSystem/Resource/resResourceMgrTask.h"
 | 
			
		||||
#include "KingSystem/Utils/Types.h"
 | 
			
		||||
 | 
			
		||||
namespace sead {
 | 
			
		||||
class FileDevice;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,13 +33,53 @@ public:
 | 
			
		|||
    bool hasAoc3() const { return mVersion >= 0x300; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    sead::FileDevice* mFileDevice{};
 | 
			
		||||
    ksys::res::FileDevicePrefix mFileDevicePrefix;
 | 
			
		||||
    enum class Flag : u8 {
 | 
			
		||||
 | 
			
		||||
    ksys::res::Handle mVersionResHandle;
 | 
			
		||||
    sead::FixedSafeString<16> mVersionString;
 | 
			
		||||
    u32 mVersion{};
 | 
			
		||||
    // TODO: more fields
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct DLCPosition {
 | 
			
		||||
        sead::Vector3f translate = sead::Vector3f::zero;
 | 
			
		||||
        sead::Vector3f rotate = sead::Vector3f::zero;
 | 
			
		||||
        sead::Vector3f translate2 = sead::Vector3f::zero;
 | 
			
		||||
        float scale = 0.0;
 | 
			
		||||
        ksys::gdt::FlagHandle flag_handle = ksys::gdt::InvalidHandle;
 | 
			
		||||
    };
 | 
			
		||||
    KSYS_CHECK_SIZE_NX150(DLCPosition, 0x2c);
 | 
			
		||||
 | 
			
		||||
    struct VersionFile {
 | 
			
		||||
        ksys::res::Handle file_handle;
 | 
			
		||||
        sead::FixedSafeString<16> string;
 | 
			
		||||
    };
 | 
			
		||||
    KSYS_CHECK_SIZE_NX150(VersionFile, 0x78);
 | 
			
		||||
 | 
			
		||||
    void resetFlags();
 | 
			
		||||
    void onGdtReinit(ksys::gdt::Manager::ReinitEvent* event);
 | 
			
		||||
 | 
			
		||||
    sead::FileDevice* mFileDevice{};
 | 
			
		||||
 | 
			
		||||
    ksys::res::FileDevicePrefix mVersionFileDevPrefix;
 | 
			
		||||
    sead::StorageFor<VersionFile, true> mVersionFile{sead::ZeroInitializeTag{}};
 | 
			
		||||
    u32 mVersion{};
 | 
			
		||||
 | 
			
		||||
    ksys::res::Handle mAocMapMainFieldPack;
 | 
			
		||||
    ksys::res::FileDevicePrefix mFileDevicePrefix;
 | 
			
		||||
    ksys::res::Handle* mAocArchive{};
 | 
			
		||||
    ksys::res::FileDevicePrefix mFileDevicePrefix2;
 | 
			
		||||
 | 
			
		||||
    sead::SafeArray<DLCPosition, 20> mDLCPositions;
 | 
			
		||||
 | 
			
		||||
    ksys::gdt::FlagHandle mFlagAocVerAtLastPlay{};
 | 
			
		||||
    ksys::gdt::FlagHandle mFlagLatestAocVerPlayed{};
 | 
			
		||||
    ksys::gdt::FlagHandle mFlagHasAocVer1{};
 | 
			
		||||
    ksys::gdt::FlagHandle mFlagHasAocVer2{};
 | 
			
		||||
    ksys::gdt::FlagHandle mFlagHasAocVer3{};
 | 
			
		||||
    ksys::gdt::Manager::ReinitSignal::Slot mGdtReinitSlot;
 | 
			
		||||
 | 
			
		||||
    sead::TypedBitFlag<Flag> mFlags{};
 | 
			
		||||
#ifdef NNSDK
 | 
			
		||||
    u8* mAocFsCache{};
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
KSYS_CHECK_SIZE_NX150(Manager, 0x598);
 | 
			
		||||
 | 
			
		||||
}  // namespace uking::aoc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -137,6 +137,10 @@ void Manager::addReinitCallback(sead::DelegateEvent<ReinitEvent*>::Slot&) {
 | 
			
		|||
    // Stubbed in release builds.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Manager::removeReinitCallback(sead::DelegateEvent<Manager::ReinitEvent*>::Slot& slot) {
 | 
			
		||||
    // Stubbed in release builds.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Manager::IncreaseLogger::addRecord(s32 value, const sead::SafeString& name, s32 sub_idx,
 | 
			
		||||
                                        bool debug) {
 | 
			
		||||
    const u32 name_hash = sead::HashCRC32::calcStringHash(name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -478,6 +478,7 @@ public:
 | 
			
		|||
    void init(sead::Heap* heap, sead::Framework* framework);
 | 
			
		||||
 | 
			
		||||
    void addReinitCallback(ReinitSignal::Slot& slot);
 | 
			
		||||
    void removeReinitCallback(ReinitSignal::Slot& slot);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    enum class BitFlag {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,6 +66,8 @@ public:
 | 
			
		|||
    bool getField28() const { return _28; }
 | 
			
		||||
    void setField28(bool value) { _28 = value; }
 | 
			
		||||
 | 
			
		||||
    void deregister();
 | 
			
		||||
 | 
			
		||||
    static constexpr size_t getListNodeOffset() { return offsetof(FileDevicePrefix, mListNode); }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
| 
						 | 
				
			
			@ -404,4 +406,9 @@ KSYS_CHECK_SIZE_NX150(sead::TaskBase, 0xd0);
 | 
			
		|||
KSYS_CHECK_SIZE_NX150(sead::MethodTreeNode, 0x98);
 | 
			
		||||
KSYS_CHECK_SIZE_NX150(ResourceMgrTask, 0x9c0eb8);
 | 
			
		||||
 | 
			
		||||
inline void FileDevicePrefix::deregister() {
 | 
			
		||||
    if (mListNode.isLinked())
 | 
			
		||||
        ResourceMgrTask::instance()->deregisterFileDevicePrefix(*this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace ksys::res
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue