summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResourceActorLink.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-06-15 17:47:03 +0200
committerLéo Lam <leo@leolam.fr>2021-06-15 18:04:39 +0200
commitdd0cc52ce99b9d78f1c7022c1bf13349149f263a (patch)
tree2eb5acd7d704d612181399bd8ab2be7b84fe450f /src/KingSystem/Resource/resResourceActorLink.cpp
parent38e5e47b07696a0954145bf68148cb0301cf133c (diff)
ksys: Move ActorParam classes into separate folder to declutter Resource/
Diffstat (limited to 'src/KingSystem/Resource/resResourceActorLink.cpp')
-rw-r--r--src/KingSystem/Resource/resResourceActorLink.cpp103
1 files changed, 0 insertions, 103 deletions
diff --git a/src/KingSystem/Resource/resResourceActorLink.cpp b/src/KingSystem/Resource/resResourceActorLink.cpp
deleted file mode 100644
index a4cd1709..00000000
--- a/src/KingSystem/Resource/resResourceActorLink.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "KingSystem/Resource/resResourceActorLink.h"
-#include <codec/seadHashCRC32.h>
-#include <heap/seadHeapMgr.h>
-
-namespace ksys::res {
-
-ActorLink::ActorLink() : ParamIO("xml", 0) {
- const auto init_user = [this](auto& param, const char* key, const char* default_ = "Dummy") {
- param.init(default_, key, "", &mUsers.obj);
- };
- init_user(mUsers.profile, "ProfileUser");
- init_user(mUsers.actor_capture, "ActorCaptureUser");
- init_user(mUsers.as, "ASUser", "");
- init_user(mUsers.model, "ModelUser", "");
- init_user(mUsers.anim, "AnimUser", "");
- init_user(mUsers.ai_program, "AIProgramUser", "");
- init_user(mUsers.gparam, "GParamUser", "");
- init_user(mUsers.damage_param, "DamageParamUser");
- init_user(mUsers.rg_config_list, "RgConfigListUser");
- init_user(mUsers.rg_blend_weight, "RgBlendWeightUser");
- init_user(mUsers.awareness, "AwarenessUser");
- init_user(mUsers.elink, "ElinkUser");
- init_user(mUsers.slink, "SlinkUser");
- init_user(mUsers.xlink, "XlinkUser");
- init_user(mUsers.attention, "AttentionUser");
- init_user(mUsers.physics, "PhysicsUser");
- init_user(mUsers.chemical, "ChemicalUser");
- init_user(mUsers.drop_table, "DropTableUser");
- init_user(mUsers.shop_data, "ShopDataUser");
- init_user(mUsers.recipe, "RecipeUser");
- init_user(mUsers.lod, "LODUser");
- init_user(mUsers.ai_schedule, "AIScheduleUser");
- init_user(mUsers.bone_control, "BoneControlUser");
- init_user(mUsers.life_condition, "LifeConditionUser");
- init_user(mUsers.umii, "UMiiUser");
- init_user(mUsers.animation_info, "AnimationInfo");
-
- mActorScale.init(1.0, "ActorScale", "", &mUsers.obj);
- mActorNameJpn.init("不正な名前", "ActorNameJpn", "ActorNameJpn", &mUsers.obj);
- mPriority.init("", "Priority", "Priority", &mUsers.obj);
-
- addObj(&mUsers.obj, "LinkTarget");
-}
-
-bool ActorLink::parse_(u8* data, size_t, sead::Heap* heap) {
- if (!data)
- return true;
-
- const agl::utl::ResParameterArchive archive{data};
- const auto root = archive.getRootList();
-
- const s32 tags_idx = root.searchObjIndex(agl::utl::ParameterBase::calcHash("Tags"));
- // NON_MATCHING: getResParameter (redundant uxtw; i and res increment order)
- const auto parse_tags = [&] {
- if (tags_idx == -1)
- return;
-
- const auto obj = root.getResParameterObj(tags_idx);
- if (!obj.ptr())
- return;
-
- const auto num_tags = obj.getNum();
- if (num_tags == 0)
- return;
-
- mHeap = heap;
- mTags.allocBufferAssert(num_tags, heap);
-
- for (s32 i = 0; i != num_tags; ++i) {
- const char* tag = obj.getResParameter(i).getData<char>();
- mTags[i] = sead::HashCRC32::calcStringHash(tag);
- }
-
- if (num_tags > 1)
- mTags.heapSort(0, num_tags - 1);
- };
- parse_tags();
-
- applyResParameterArchive(agl::utl::ResParameterArchive{data});
- return true;
-}
-
-void ActorLink::finalize_() {
- if (!mTags.isBufferReady())
- return;
-
- if (!mHeap)
- return;
-
- sead::ScopedCurrentHeapSetter setter{mHeap};
- mTags.freeBuffer();
-}
-
-// NON_MATCHING: operands are swapped for an equality comparison in binarySearch
-bool ActorLink::hasTag(const char* tag_name) const {
- return mTags.size() >= 1 && mTags.binarySearch(sead::HashCRC32::calcStringHash(tag_name)) != -1;
-}
-
-bool ActorLink::hasTag(u32 tag) const {
- return mTags.size() >= 1 && mTags.binarySearch(tag) != -1;
-}
-
-} // namespace ksys::res