summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResourceASResourceExtension.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/resResourceASResourceExtension.cpp
parent38e5e47b07696a0954145bf68148cb0301cf133c (diff)
ksys: Move ActorParam classes into separate folder to declutter Resource/
Diffstat (limited to 'src/KingSystem/Resource/resResourceASResourceExtension.cpp')
-rw-r--r--src/KingSystem/Resource/resResourceASResourceExtension.cpp339
1 files changed, 0 insertions, 339 deletions
diff --git a/src/KingSystem/Resource/resResourceASResourceExtension.cpp b/src/KingSystem/Resource/resResourceASResourceExtension.cpp
deleted file mode 100644
index baad9497..00000000
--- a/src/KingSystem/Resource/resResourceASResourceExtension.cpp
+++ /dev/null
@@ -1,339 +0,0 @@
-#include "KingSystem/Resource/resResourceASResourceExtension.h"
-#include <container/seadSafeArray.h>
-#include <optional>
-#include <prim/seadSafeString.h>
-#include "KingSystem/ActorSystem/actASSetting.h"
-#include "KingSystem/Resource/resResourceASSetting.h"
-
-namespace ksys::res {
-
-bool ASFrameCtrlParser::parse(const ASParamParser::ParseArgs& args) {
- mRate.init(1.0, "Rate", "再生速度", "Min=0.f,Max=10.f", &mObj);
- mStartFrame.init(0.0, "StartFrame", "開始フレーム", "Min=0.f,Max=100.f", &mObj);
- mEndFrame.init(-1.0, "EndFrame", "終了フレーム", "Min=-1.f,Max=100.f", &mObj);
- mLoopStopCount.init(-1.0, "LoopStopCount", "ループ停止回数", "Min=-1.f,Max=10.f", &mObj);
- mLoopStopCountRandom.init(0.0, "LoopStopCountRandom", "ランダムループ追加回数",
- "Min=0.f,Max=10.f", &mObj);
- mReversePlay.init(false, "ReversePlay", "逆再生", "", &mObj);
- mUseGlobalFrame.init(false, "UseGlobalFrame", "グローバルフレーム使う", "", &mObj);
- mFootType.init(0, "FootType", "足解決", "", &mObj);
- mConnect.init(false, "Connect", "接続", "", &mObj);
- mAnmLoop.init(0, "AnmLoop", "ループ設定", "", &mObj);
-
- mList.addObj(&mObj, "FrameCtrl0");
- return true;
-}
-
-bool ASTriggerEventsParser::parse(const ASParamParser::ParseArgs& args) {
- const int num_objs = args.res_list.getResParameterObjNum();
- if (num_objs == 0)
- return true;
-
- if (!mEvents.tryAllocBuffer(num_objs, args.heap))
- return false;
-
- auto it = mEvents.begin();
- const auto end = mEvents.end();
-
- sead::FixedSafeString<32> obj_name{"Event"};
- const auto obj_name_prefix_len = obj_name.calcLength();
-
- auto res_it = args.res_list.objBegin();
- const auto res_end = args.res_list.objEnd();
-
- while (res_it != res_end && it != end) {
- u32 type_index = -1;
- const auto TypeIndex = agl::utl::getResParameter(res_it.getObj(), "TypeIndex");
- if (TypeIndex.ptr())
- type_index = *TypeIndex.getData<int>();
-
- // TODO: add a TypeIndex enum
- it->type_index = type_index > 33 ? 88 : int(type_index) + 54;
-
- it->frame.init(0.0, "Frame", "フレーム", "Min=0.f,Max=100.f", &it->obj);
- it->value.init("", "Value", "値", "", &it->obj);
-
- obj_name.trim(obj_name_prefix_len);
- obj_name.appendWithFormat("%d", it.getIndex());
- mList.addObj(&it->obj, obj_name);
-
- ++res_it;
- ++it;
- }
-
- return true;
-}
-
-bool ASHoldEventsParser::parse(const ASParamParser::ParseArgs& args) {
- const int num_objs = args.res_list.getResParameterObjNum();
- if (num_objs == 0)
- return true;
-
- if (!mEvents.tryAllocBuffer(num_objs, args.heap))
- return false;
-
- auto it = mEvents.begin();
- const auto end = mEvents.end();
-
- sead::FixedSafeString<32> obj_name{"Event"};
- const auto obj_name_prefix_len = obj_name.calcLength();
-
- auto res_it = args.res_list.objBegin();
- const auto res_end = args.res_list.objEnd();
-
- while (res_it != res_end && it != end) {
- u32 type_index = -1;
- const auto TypeIndex = agl::utl::getResParameter(res_it.getObj(), "TypeIndex");
- if (TypeIndex.ptr())
- type_index = *TypeIndex.getData<int>();
-
- // TODO: add a TypeIndex enum
- it->type_index = type_index > 53 ? 88 : int(type_index);
-
- it->start_frame.init(0.0, "StartFrame", "開始フレーム", "Min=0.f,Max=100.f", &it->obj);
- it->end_frame.init(0.0, "EndFrame", "終了フレーム", "Min=0.f,Max=100.f", &it->obj);
- it->value.init("", "Value", "値", "", &it->obj);
-
- obj_name.trim(obj_name_prefix_len);
- obj_name.appendWithFormat("%d", it.getIndex());
- mList.addObj(&it->obj, obj_name);
-
- ++res_it;
- ++it;
- }
-
- return true;
-}
-
-bool ASStringArrayParser::parse(const ASParamParser::ParseArgs& args) {
- const int size = args.res_list.getResParameterObj(0).getNum();
- if (size != 0) {
- if (!mValues.tryAllocBuffer(size, args.heap))
- return false;
-
- sead::FixedSafeString<32> param_name{"Value"};
- const auto param_name_prefix_len = param_name.calcLength();
-
- for (int i = 0; i < size; ++i) {
- param_name.trim(param_name_prefix_len);
- param_name.appendWithFormat("%d", i);
- mValues[i].value.init("", param_name, "値", "", &mObj);
- }
- }
-
- mList.addObj(&mObj, "StringArray0");
- return true;
-}
-
-bool ASRangesParser::parse(const ASParamParser::ParseArgs& args) {
- const int num_objs = args.res_list.getResParameterObjNum();
- if (num_objs == 0)
- return true;
-
- if (!mRanges.tryAllocBuffer(num_objs, args.heap))
- return false;
-
- auto it = mRanges.begin();
- const auto end = mRanges.end();
-
- sead::FixedSafeString<32> obj_name{"Range"};
- const auto obj_name_prefix_len = obj_name.calcLength();
-
- auto res_it = args.res_list.objBegin();
- const auto res_end = args.res_list.objEnd();
-
- while (res_it != res_end && it != end) {
- obj_name.trim(obj_name_prefix_len);
- obj_name.appendWithFormat("%d", it.getIndex());
-
- it->start.init(0.0, "Start", "開始", "Min=0.f,Max=1.f", &it->obj);
- it->end.init(0.0, "End", "終了", "Min=0.f,Max=1.f", &it->obj);
-
- mList.addObj(&it->obj, obj_name);
-
- ++res_it;
- ++it;
- }
-
- return true;
-}
-
-bool ASFloatArrayParser::parse(const ASParamParser::ParseArgs& args) {
- const int size = args.res_list.getResParameterObj(0).getNum();
- if (size != 0) {
- if (!mValues.tryAllocBuffer(size, args.heap))
- return false;
-
- sead::FixedSafeString<32> param_name{"Value"};
- const auto param_name_prefix_len = param_name.calcLength();
-
- for (int i = 0; i < size; ++i) {
- param_name.trim(param_name_prefix_len);
- param_name.appendWithFormat("%d", i);
- mValues[i].value.init(1.0, param_name, "値", "", &mObj);
- }
- }
-
- mList.addObj(&mObj, "FloatArray0");
- return true;
-}
-
-bool ASIntArrayParser::parse(const ASParamParser::ParseArgs& args) {
- const int size = args.res_list.getResParameterObj(0).getNum();
- if (size != 0) {
- if (!mValues.tryAllocBuffer(size, args.heap))
- return false;
-
- sead::FixedSafeString<32> param_name{"Value"};
- const auto param_name_prefix_len = param_name.calcLength();
-
- for (int i = 0; i < size; ++i) {
- param_name.trim(param_name_prefix_len);
- param_name.appendWithFormat("%d", i);
- mValues[i].value.init(1, param_name, "値", "", &mObj);
- }
- }
-
- mList.addObj(&mObj, "IntArray0");
- return true;
-}
-
-bool ASBitIndexParser::parse(const ASParamParser::ParseArgs& args) {
- const auto obj = args.res_list.getResParameterObj(0);
- if (obj.getNum() < 1)
- return true;
-
- const auto TypeIndex = agl::utl::getResParameter(obj, "TypeIndex");
- if (!TypeIndex.ptr())
- return true;
-
- mTypeIndex = *TypeIndex.getData<int>();
- return true;
-}
-
-template <typename T>
-static ASParamParser* factoryImpl_(sead::Heap* heap) {
- return new (heap) T;
-}
-
-static ASParamParser* dummyASParserFactoryImpl_(sead::Heap*) {
- return nullptr;
-}
-
-namespace {
-struct Factory {
- const char* name;
- ASParamParser* (*make)(sead::Heap* heap);
-};
-
-sead::SafeArray<Factory, ASParamParser::NumTypes> sASFactories{{
- {"FrameCtrl", factoryImpl_<ASFrameCtrlParser>},
- {"TriggerEvents", factoryImpl_<ASTriggerEventsParser>},
- {"HoldEvents", factoryImpl_<ASHoldEventsParser>},
- {"StringArray", factoryImpl_<ASStringArrayParser>},
- {"Ranges", factoryImpl_<ASRangesParser>},
- {"FloatArray", factoryImpl_<ASFloatArrayParser>},
- {"IntArray", factoryImpl_<ASIntArrayParser>},
- {"BitIndex", factoryImpl_<ASBitIndexParser>},
- {"BlenderBone", dummyASParserFactoryImpl_},
-}};
-} // namespace
-
-ASExtensions::~ASExtensions() {
- for (auto*& parser : mParsers) {
- if (parser && parser->getType() != ASParamParser::Type::BlenderBone)
- delete parser;
- parser = nullptr;
- }
- mParsers.freeBuffer();
-}
-
-bool ASExtensions::parse(const ASExtensions::ParseArgs& args) {
- const auto Extend = agl::utl::getResParameterList(args.res_list, "Extend");
- if (!Extend)
- return true;
-
- const auto num_extensions = Extend.getResParameterListNum();
- if (num_extensions == 0)
- return true;
-
- if (!mParsers.tryAllocBuffer(num_extensions, args.heap))
- return false;
- for (int i = 0, n = mParsers.size(); i < n; ++i)
- mParsers(i) = nullptr;
-
- auto it = mParsers.begin();
- const auto end = mParsers.end();
-
- ASParamParser::ParseArgs parse_args{};
- parse_args.list = &mList;
- parse_args.heap = args.heap;
-
- auto res_it = Extend.listBegin();
- const auto res_end = Extend.listEnd();
-
- for (; it != end && res_it != res_end; ++it, ++res_it) {
- parse_args.res_list = res_it.getList();
- *it = makeParser(parse_args);
-
- constexpr int bone = int(ASParamParser::Type::BlenderBone);
- if (*it == nullptr && parse_args.res_list.getParameterListNameHash() !=
- agl::utl::ParameterBase::calcHash(sASFactories[bone].name)) {
- return false;
- }
- }
-
- args.list->addList(&mList, "Extend");
- return true;
-}
-
-ASParamParser* ASExtensions::makeParser(const ASParamParser::ParseArgs& args) const {
- const auto is_factory = [&args](int i) {
- return args.res_list.getParameterListNameHash() ==
- agl::utl::ParameterBase::calcHash(sASFactories[i].name);
- };
-
- std::optional<int> type;
- for (int i = 0; i < ASParamParser::NumTypes - 1; ++i) {
- if (!is_factory(i))
- continue;
- type = i;
- break;
- }
-
- if (!type.has_value() && is_factory(int(ASParamParser::Type::BlenderBone))) {
- const auto obj = args.res_list.getResParameterObj(0);
- if (obj.getNum() > 0) {
- const sead::SafeString name = obj.getResParameter(0).getData<const char>();
- return act::ASSetting::instance()->getBoneParams(name);
- }
- }
-
- if (!type.has_value())
- return nullptr;
-
- const auto& factory = sASFactories[*type];
-
- auto* parser = factory.make(args.heap);
- if (!parser)
- return nullptr;
-
- if (!parser->parse(args)) {
- delete parser;
- return nullptr;
- }
-
- args.list->addList(&parser->getList(), factory.name);
- return parser;
-}
-
-ASParamParser* ASExtensions::getParser(ASParamParser::Type type) const {
- for (int i = 0, n = mParsers.size(); i < n; ++i) {
- auto* parser = mParsers[i];
- if (parser && parser->getType() == type)
- return parser;
- }
- return nullptr;
-}
-
-} // namespace ksys::res