summaryrefslogtreecommitdiff
path: root/src/KingSystem/XLink/xlinkInfoData.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-04-26 14:45:37 +0200
committerLéo Lam <leo@leolam.fr>2021-04-26 14:47:12 +0200
commitcaa3dcf5489f54c1aeb0bc1981f8de6441ddb0cc (patch)
tree839e5cab2b021f695bae8ad524e6899395fe162c /src/KingSystem/XLink/xlinkInfoData.cpp
parentf365c0b591749009b809e21e9cfa01d4643131fe (diff)
ksys/xlink: Add InfoData
Diffstat (limited to 'src/KingSystem/XLink/xlinkInfoData.cpp')
-rw-r--r--src/KingSystem/XLink/xlinkInfoData.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/KingSystem/XLink/xlinkInfoData.cpp b/src/KingSystem/XLink/xlinkInfoData.cpp
new file mode 100644
index 00000000..2bacc5ea
--- /dev/null
+++ b/src/KingSystem/XLink/xlinkInfoData.cpp
@@ -0,0 +1,84 @@
+#include "KingSystem/XLink/xlinkInfoData.h"
+#include "KingSystem/Resource/resLoadRequest.h"
+
+namespace ksys::xlink {
+
+SEAD_SINGLETON_DISPOSER_IMPL(InfoData)
+
+InfoData::~InfoData() {
+ if (mRootIter)
+ delete mRootIter;
+}
+
+void InfoData::loadInfo(sead::Heap* heap) {
+ res::LoadRequest req;
+ req.mRequester = "xlink::InfoData";
+ req._22 = true;
+ mResHandle.load("Actor/XLink/XLinkInfo.byml", &req);
+
+ auto* resource = sead::DynamicCast<sead::DirectResource>(mResHandle.getResource());
+
+ if (mRootIter)
+ delete mRootIter;
+ mRootIter = new (heap) al::ByamlIter(resource->getRawData());
+}
+
+void InfoData::init(sead::Heap* heap) {
+ loadInfo(heap);
+}
+
+al::ByamlIter InfoData::getIter(const sead::SafeString& key) const {
+ const auto iter = mRootIter->getIterByKey(key.cstr());
+ return al::ByamlIter(iter);
+}
+
+sead::SafeString InfoData::getXLinkSettingPropertyTableName(const al::ByamlIter& iter) const {
+ const char* value = "ActorBasic";
+ iter.tryGetStringByKey(&value, "XLinkSettingPropertyTableName");
+ return value;
+}
+
+sead::SafeString InfoData::getXLinkSettingFootStepProcTypeName(const al::ByamlIter& iter) const {
+ const char* value = "None";
+ iter.tryGetStringByKey(&value, "XLinkSettingFootStepProcTypeName");
+ return value;
+}
+
+float InfoData::getXLinkSettingVeloClampThreshold(const al::ByamlIter& iter) const {
+ float value = 0.0;
+ iter.tryGetFloatByKey(&value, "XLinkSettingVeloClampThreshold");
+ return value;
+}
+
+float InfoData::getXLinkSettingVeloRollClampThreshold(const al::ByamlIter& iter) const {
+ float value = 0.0;
+ iter.tryGetFloatByKey(&value, "XLinkSettingVeloRollClampThreshold");
+ return value;
+}
+
+bool InfoData::getXLinkSettingIsReactionTargetEnemy(const al::ByamlIter& iter) const {
+ bool value = false;
+ iter.tryGetBoolByKey(&value, "XLinkSettingIsReactionTargetEnemy");
+ return value;
+}
+
+bool InfoData::getXLinkSettingIsReactionTargetTinyEnemy(const al::ByamlIter& iter) const {
+ bool value = false;
+ iter.tryGetBoolByKey(&value, "XLinkSettingIsReactionTargetTinyEnemy");
+ return value;
+}
+
+bool InfoData::getXLinkSettingIsReactionTargetObject(const al::ByamlIter& iter) const {
+ bool value = false;
+ iter.tryGetBoolByKey(&value, "XLinkSettingIsReactionTargetObject");
+ return value;
+}
+
+bool InfoData::getXLinkSettingIsIgnoreDamageToObject(const sead::SafeString& key) const {
+ const auto iter = getIter(key);
+ bool value = false;
+ iter.tryGetBoolByKey(&value, "XLinkSettingIsIgnoreDamageToObject");
+ return value;
+}
+
+} // namespace ksys::xlink