summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResourceAIProgram.h
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/resResourceAIProgram.h
parent38e5e47b07696a0954145bf68148cb0301cf133c (diff)
ksys: Move ActorParam classes into separate folder to declutter Resource/
Diffstat (limited to 'src/KingSystem/Resource/resResourceAIProgram.h')
-rw-r--r--src/KingSystem/Resource/resResourceAIProgram.h144
1 files changed, 0 insertions, 144 deletions
diff --git a/src/KingSystem/Resource/resResourceAIProgram.h b/src/KingSystem/Resource/resResourceAIProgram.h
deleted file mode 100644
index c7a646bf..00000000
--- a/src/KingSystem/Resource/resResourceAIProgram.h
+++ /dev/null
@@ -1,144 +0,0 @@
-#pragma once
-
-#include <agl/Utils/aglParameter.h>
-#include <agl/Utils/aglParameterList.h>
-#include <agl/Utils/aglParameterObj.h>
-#include <container/seadBuffer.h>
-#include <math/seadVector.h>
-#include "KingSystem/Resource/resResource.h"
-#include "KingSystem/Utils/ParamIO.h"
-#include "KingSystem/Utils/Types.h"
-
-namespace ksys::act::ai {
-enum class ActionType : int;
-}
-
-namespace ksys::res {
-
-class AIProgram : public ParamIO, public Resource {
- SEAD_RTTI_OVERRIDE(AIProgram, Resource)
-public:
- struct Definition {
- const agl::utl::ParameterBase* findSInstParam(u32 name_hash) const;
- const agl::utl::ParameterBase* findSInstParam(const sead::SafeString& name) const;
-
- template <typename T>
- bool addSInstParam_(s32 idx, const char* name, sead::Heap* heap, const T& value);
-
- void finalize_();
-
- agl::utl::ParameterList mList;
- const char* mClassName;
- const char* mName;
- sead::Buffer<agl::utl::ParameterBase*> mSInstParams;
- agl::utl::ParameterObj mSInstObj;
- };
- KSYS_CHECK_SIZE_NX150(Definition, 0x98);
-
- struct AIActionDef : Definition {
- void finalize_();
-
- const char* mGroupName;
- sead::Buffer<u16> mChildIndices;
- sead::Buffer<u8> mBehaviorIndices;
- u16 mTriggerAction;
- u16 mDynamicParamChild;
- u16 _c4;
- };
- KSYS_CHECK_SIZE_NX150(AIActionDef, 0xc8);
-
- struct BehaviorDef : Definition {
- u16 mCalcTiming;
- u16 mNoStop;
- };
- KSYS_CHECK_SIZE_NX150(BehaviorDef, 0xa0);
-
- struct QueryDef : Definition {};
- KSYS_CHECK_SIZE_NX150(QueryDef, 0x98);
-
- AIProgram() : ParamIO("aiprog", 0) {}
- ~AIProgram() override;
-
- const sead::Buffer<AIActionDef>& getActionsOrAIs(act::ai::ActionType type) const;
- const sead::Buffer<BehaviorDef>& getBehaviors() const { return mBehaviors; }
- const sead::Buffer<QueryDef>& getQueries() const { return mQueries; }
-
- const AIActionDef& getAI(s32 index) const { return mAIs[index]; }
- const sead::Buffer<AIActionDef>& getAIs() const { return mAIs; }
- const sead::Buffer<AIActionDef>& getActions() const { return mActions; }
-
- const AIActionDef& getAction(act::ai::ActionType type, s32 index) const {
- return getActionsOrAIs(type)[index];
- }
-
- const sead::Buffer<u16>& getDemoAiActionIndices() const { return mDemoAIActionIndices; }
- const sead::Buffer<u8>& getDemoBehaviorIndices() const { return mDemoBehaviorIndices; }
-
- bool getSInstParam(const char** value, const Definition& def,
- const sead::SafeString& param_name) const;
- bool getSInstParam(sead::SafeString* value, const Definition& def,
- const sead::SafeString& param_name) const;
- bool getSInstParam(const s32** value, const Definition& def,
- const sead::SafeString& param_name) const;
- bool getSInstParam(const f32** value, const Definition& def,
- const sead::SafeString& param_name) const;
- bool getSInstParam(const sead::Vector3f** value, const Definition& def,
- const sead::SafeString& param_name) const;
- bool getSInstParam(const bool** value, const Definition& def,
- const sead::SafeString& param_name) const;
-
- void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override;
- bool needsParse() const override { return true; }
-
-private:
- bool parse_(u8* data, size_t size, sead::Heap* parent_heap) override;
- bool parseAIActions(sead::Buffer<AIActionDef>& defs, sead::Heap* heap,
- agl::utl::ParameterList& target_list,
- const agl::utl::ResParameterList& root, const char* type_name);
- bool parseBehaviors(sead::Heap* heap, const agl::utl::ResParameterList& root);
- bool parseQueries(sead::Heap* heap, const agl::utl::ResParameterList& root);
- bool parseDefParams(Definition* def, void* buffer, sead::Heap* heap,
- const agl::utl::ResParameterList& res, u16* param1, u16* param2);
-
- void finalize_() override;
- void finalizeAIActions(sead::Buffer<AIActionDef>& defs);
- void finalizeBehaviors();
- void finalizeQueries();
-
- template <typename T>
- bool getSInstParam_(const T** value, const Definition& def, const sead::SafeString& param_name,
- agl::utl::ParameterType param_type, const T* default_value) const;
-
- sead::Heap* mHeap = nullptr;
- sead::SafeString mStr;
-
- sead::Buffer<AIActionDef> mAIs;
- sead::Buffer<AIActionDef> mActions;
- sead::Buffer<BehaviorDef> mBehaviors;
- sead::Buffer<QueryDef> mQueries;
-
- agl::utl::ParameterList mParamListAI;
- agl::utl::ParameterList mParamListAction;
- agl::utl::ParameterList mParamListBehavior;
- agl::utl::ParameterList mParamListQuery;
-
- sead::Buffer<u16> mDemoAIActionIndices;
- sead::Buffer<u8> mDemoBehaviorIndices;
-};
-KSYS_CHECK_SIZE_NX150(AIProgram, 0x448);
-
-template <typename T>
-inline bool AIProgram::getSInstParam_(const T** value, const AIProgram::Definition& def,
- const sead::SafeString& param_name,
- agl::utl::ParameterType param_type,
- const T* default_value) const {
- const auto* param = def.findSInstParam(param_name);
- if (!param || param->getParameterType() != param_type) {
- *value = default_value;
- return false;
- }
- *value = param->ptrT<T>();
- return true;
-}
-
-} // namespace ksys::res