mirror of https://github.com/zeldaret/botw.git
commit
bd150241cf
|
@ -75495,15 +75495,15 @@
|
|||
0x0000007100daeba8,sub_7100DAEBA8,264,
|
||||
0x0000007100daecb0,sub_7100DAECB0,112,
|
||||
0x0000007100daed20,sub_7100DAED20,92,
|
||||
0x0000007100daed7c,sub_7100DAED7C,100,
|
||||
0x0000007100daede0,sub_7100DAEDE0,108,
|
||||
0x0000007100daee4c,EventInfoData::createInstance,160,
|
||||
0x0000007100daeeec,sub_7100DAEEEC,80,
|
||||
0x0000007100daef3c,sub_7100DAEF3C,88,
|
||||
0x0000007100daef94,sub_7100DAEF94,324,
|
||||
0x0000007100daf0d8,EventInfoData::init,8,
|
||||
0x0000007100daf0e0,EventInfoData::getEntry,292,
|
||||
0x0000007100daf204,EventInfoData::getSceneChangeEventTraverseLimit,256,
|
||||
0x0000007100daed7c,sub_7100DAED7C,100,_ZN4ksys3evt8InfoData18SingletonDisposer_D2Ev
|
||||
0x0000007100daede0,sub_7100DAEDE0,108,_ZN4ksys3evt8InfoData18SingletonDisposer_D0Ev
|
||||
0x0000007100daee4c,EventInfoData::createInstance,160,_ZN4ksys3evt8InfoData14createInstanceEPN4sead4HeapE
|
||||
0x0000007100daeeec,sub_7100DAEEEC,80,_ZN4ksys3evt8InfoDataD1Ev
|
||||
0x0000007100daef3c,sub_7100DAEF3C,88,_ZN4ksys3evt8InfoDataD0Ev
|
||||
0x0000007100daef94,EventInfoData::doInit,324,_ZN4ksys3evt8InfoData6doInitEPN4sead4HeapEPNS_12OverlayArenaE
|
||||
0x0000007100daf0d8,EventInfoData::init,8,_ZN4ksys3evt8InfoData4initEPN4sead4HeapE
|
||||
0x0000007100daf0e0,EventInfoData::getEntry,292,_ZN4ksys3evt8InfoData8getEntryEPN2al9ByamlIterERKN4sead14SafeStringBaseIcEES9_
|
||||
0x0000007100daf204,EventInfoData::getSceneChangeEventTraverseLimit,256,_ZN4ksys3evt8InfoData32getSceneChangeEventTraverseLimitERKN4sead14SafeStringBaseIcEE
|
||||
0x0000007100daf304,nullsub_3835,4,
|
||||
0x0000007100daf308,sub_7100DAF308,100,
|
||||
0x0000007100daf36c,sub_7100DAF36C,108,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -1,6 +1,8 @@
|
|||
target_sources(uking PRIVATE
|
||||
evtEvent.cpp
|
||||
evtEvent.h
|
||||
evtInfoData.cpp
|
||||
evtInfoData.h
|
||||
evtManager.cpp
|
||||
evtManager.h
|
||||
)
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
#include "KingSystem/Event/evtInfoData.h"
|
||||
#include <basis/seadNew.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include <resource/seadResource.h>
|
||||
#include "KingSystem/Resource/resHandle.h"
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Utils/Byaml/Byaml.h"
|
||||
|
||||
namespace ksys::evt {
|
||||
|
||||
SEAD_SINGLETON_DISPOSER_IMPL(InfoData)
|
||||
|
||||
InfoData::InfoData() = default;
|
||||
|
||||
void InfoData::init(sead::Heap* heap) {
|
||||
doInit(heap, nullptr);
|
||||
}
|
||||
|
||||
void InfoData::doInit(sead::Heap* heap, OverlayArena* arena) {
|
||||
ksys::res::LoadRequest load_request;
|
||||
|
||||
load_request.mRequester = "evt::InfoData";
|
||||
load_request._22 = true;
|
||||
load_request.mArena = arena;
|
||||
|
||||
mHandle.load("Event/EventInfo.product.byml", &load_request, nullptr);
|
||||
auto* resource = sead::DynamicCast<sead::DirectResource>(mHandle.getResource());
|
||||
|
||||
if (mRootIter)
|
||||
delete mRootIter;
|
||||
|
||||
mRootIter = new (heap) al::ByamlIter(resource->getRawData());
|
||||
}
|
||||
|
||||
InfoData::~InfoData() {
|
||||
if (mRootIter)
|
||||
delete mRootIter;
|
||||
|
||||
if (_80) {
|
||||
delete _80;
|
||||
}
|
||||
}
|
||||
|
||||
bool InfoData::getEntry(al::ByamlIter* iter, const sead::SafeString& event_flow_name,
|
||||
const sead::SafeString& entry_point) {
|
||||
sead::FixedSafeString<256> formatted_key;
|
||||
|
||||
if (entry_point.isEmpty()) {
|
||||
formatted_key.format("%s<%s>", event_flow_name.cstr(), event_flow_name.cstr());
|
||||
} else {
|
||||
formatted_key.format("%s<%s>", event_flow_name.cstr(), entry_point.cstr());
|
||||
}
|
||||
|
||||
return mRootIter->tryGetIterByKey(iter, formatted_key.cstr());
|
||||
}
|
||||
|
||||
bool InfoData::getSceneChangeEventTraverseLimit(const sead::SafeString& event_flow_name) {
|
||||
if (event_flow_name != "ClearRemains") {
|
||||
al::ByamlIter dict;
|
||||
if (!getEntry(&dict, event_flow_name, "")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
f32 value{};
|
||||
if (!(dict.tryGetFloatByKey(&value, "traverse_limit") && value > 0.0)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace ksys::evt
|
|
@ -0,0 +1,34 @@
|
|||
#pragma once
|
||||
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/Resource/resHandle.h"
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Utils/Byaml/Byaml.h"
|
||||
|
||||
namespace ksys::evt {
|
||||
|
||||
class InfoDataUnknownType {
|
||||
public:
|
||||
virtual ~InfoDataUnknownType();
|
||||
};
|
||||
|
||||
class InfoData {
|
||||
SEAD_SINGLETON_DISPOSER(InfoData)
|
||||
InfoData();
|
||||
virtual ~InfoData();
|
||||
|
||||
public:
|
||||
bool getEntry(al::ByamlIter* iter, const sead::SafeString& event_flow_name,
|
||||
const sead::SafeString& entry_point);
|
||||
bool getSceneChangeEventTraverseLimit(const sead::SafeString& event_flow_name);
|
||||
void init(sead::Heap* heap);
|
||||
|
||||
private:
|
||||
void doInit(sead::Heap* heap, OverlayArena* arena);
|
||||
al::ByamlIter* mRootIter = nullptr;
|
||||
ksys::res::Handle mHandle;
|
||||
InfoDataUnknownType* _80 = nullptr;
|
||||
};
|
||||
|
||||
} // namespace ksys::evt
|
|
@ -3,6 +3,7 @@
|
|||
#include <basis/seadTypes.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include <resource/seadResource.h>
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace sead {
|
||||
|
@ -15,9 +16,10 @@ class OverlayArena;
|
|||
|
||||
namespace ksys::res {
|
||||
|
||||
class EntryFactoryBase;
|
||||
class Handle;
|
||||
|
||||
class EntryFactoryBase;
|
||||
|
||||
class ILoadRequest {
|
||||
SEAD_RTTI_BASE(ILoadRequest)
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue