summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResourceAS.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/resResourceAS.cpp
parent38e5e47b07696a0954145bf68148cb0301cf133c (diff)
ksys: Move ActorParam classes into separate folder to declutter Resource/
Diffstat (limited to 'src/KingSystem/Resource/resResourceAS.cpp')
-rw-r--r--src/KingSystem/Resource/resResourceAS.cpp170
1 files changed, 0 insertions, 170 deletions
diff --git a/src/KingSystem/Resource/resResourceAS.cpp b/src/KingSystem/Resource/resResourceAS.cpp
deleted file mode 100644
index 53aaf594..00000000
--- a/src/KingSystem/Resource/resResourceAS.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-#include "KingSystem/Resource/resResourceAS.h"
-#include <memory>
-#include <random/seadGlobalRandom.h>
-#include "KingSystem/Resource/resResourceASResource.h"
-#include "KingSystem/Utils/HeapUtil.h"
-#include "KingSystem/Utils/SafeDelete.h"
-
-namespace ksys::res {
-
-namespace {
-sead::SafeString str_Elements = "Elements";
-sead::SafeString str_CommonParams = "CommonParams";
-} // namespace
-
-AS::AS() : ParamIO("as", 0) {}
-
-AS::~AS() = default;
-
-void AS::doCreate_(u8*, u32, sead::Heap*) {}
-
-// NON_MATCHING: SafeString vtable load is reordered
-bool AS::parse_(u8* data, size_t size, sead::Heap* parent_heap) {
- mHeap = util::tryCreateDualHeap(parent_heap);
- if (!mHeap)
- return false;
-
- mHeap->enableWarning(false);
- auto* heap = mHeap;
-
- agl::utl::ResParameterArchive archive{data};
- const auto root = archive.getRootList();
-
- const auto Elements = agl::utl::getResParameterList(root, str_Elements);
- if (!Elements) {
- mHeap->adjust();
- return true;
- }
-
- const int num_elements = Elements.getResParameterListNum();
- if (num_elements == 0) {
- mHeap->adjust();
- return true;
- }
-
- if (!mElementResources.tryAllocBuffer(num_elements, heap)) {
- mHeap->adjust();
- return false;
- }
-
- for (int i = 0, n = mElementResources.size(); i < n; ++i)
- mElementResources(i) = nullptr;
-
- ASResource::ParseArgs args;
- args.list = {};
- args.heap = heap;
- args.as = this;
- args.index = 0;
-
- auto res_it = Elements.listBegin();
- const auto res_end = Elements.listEnd();
-
- sead::FixedSafeString<16> name{"Element"};
- const auto name_prefix_len = name.calcLength();
-
- for (auto it = mElementResources.begin(), end = mElementResources.end();
- it != end && res_it != res_end; ++it, ++res_it) {
- args.list = res_it.getList();
- *it = ASResource::make(args);
- if (*it == nullptr) {
- mHeap->adjust();
- return false;
- }
-
- name.trim(name_prefix_len);
- name.appendWithFormat("%d", args.index);
- mElementsList.addList(&(*it)->getList(), name);
- ++args.index;
- }
-
- addList(&mElementsList, str_Elements);
-
- mRandomRateMin.init(1.0, "RandomRateMin", "ランダム再生率小", "Min=0.f,Max=10.f",
- &mCommonParams);
- mRandomRateMax.init(1.0, "RandomRateMax", "ランダム再生率大", "Min=0.f,Max=10.f",
- &mCommonParams);
- mForbidPartialDemoAS.init(false, "ForbidPartialDemoAS", "一括再生する", "", &mCommonParams);
- mUseIK.init(true, "UseIK", "IKする", "", &mCommonParams);
-
- addObj(&mCommonParams, str_CommonParams);
-
- _3bb = 0;
-
- res_it = Elements.listBegin();
- args.index = 0;
- for (auto it = mElementResources.begin(), end = mElementResources.end();
- it != end && res_it != res_end; ++it, ++res_it) {
- args.list = res_it.getList();
- if (!(*it)->parse(args)) {
- mHeap->adjust();
- return false;
- }
-
- _3ba |= (*it)->m7() & 1;
-
- switch ((*it)->getTypeIndex()) {
- case 62:
- _3bb |= 1 << 0;
- break;
- case 63:
- _3bb |= 1 << 1;
- break;
- case 64:
- _3bb |= 1 << 2;
- break;
- case 83:
- _3bb |= 1 << 3;
- break;
- case 6:
- _3bb |= 1 << 4;
- break;
- case 39:
- _3bb |= 1 << 5;
- break;
- }
- ++args.index;
- }
-
- applyResParameterArchive(archive);
-
- if (auto* first = getFirstResource()) {
- u32 x = first->m4();
- x = x >= 0xff ? 0xff : x;
- u32 y = first->m5();
- y = y >= 0xff ? 0xff : y;
-
- _3b8 = x;
- _3b9 = y;
- } else {
- _3b8 = 0;
- _3b9 = 0;
- }
-
- mHeap->adjust();
- return true;
-}
-
-ASResource* AS::getFirstResource() const {
- if (mElementResources.size() == 0)
- return nullptr;
- return mElementResources[0];
-}
-
-void AS::finalize_() {
- for (auto* ptr : mElementResources) {
- if (ptr)
- std::destroy_at(ptr);
- }
-
- util::safeDeleteHeap(mHeap);
-}
-
-float AS::getRandomRate() const {
- const auto max = getRandomRateMax();
- const auto min = getRandomRateMin();
- if (max - min > 0.0)
- return sead::GlobalRandom::instance()->getF32Range(min, max);
- return min;
-}
-
-} // namespace ksys::res