diff options
| author | Léo Lam <leo@leolam.fr> | 2020-12-17 23:14:09 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-12-19 20:37:37 +0100 |
| commit | 8a22f0bb50bbe3aa7973d80ff1e4cc62c369f9a3 (patch) | |
| tree | d673cb1c59c98357be0779e70a69f08300ef8885 /src/KingSystem/ActorSystem/actAiRoot.cpp | |
| parent | cd6bf1e82170328a1c68c515ce438f5ed977a246 (diff) | |
ksys/act: Add more ActionBase, Ai and RootAi functions
Diffstat (limited to 'src/KingSystem/ActorSystem/actAiRoot.cpp')
| -rw-r--r-- | src/KingSystem/ActorSystem/actAiRoot.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actAiRoot.cpp b/src/KingSystem/ActorSystem/actAiRoot.cpp index 9498c151..85da4dff 100644 --- a/src/KingSystem/ActorSystem/actAiRoot.cpp +++ b/src/KingSystem/ActorSystem/actAiRoot.cpp @@ -1,4 +1,6 @@ #include "KingSystem/ActorSystem/actAiRoot.h" +#include "KingSystem/ActorSystem/actActor.h" +#include "KingSystem/Utils/InitTimeInfo.h" namespace ksys::act::ai { @@ -28,6 +30,118 @@ bool RootAi::isActorDeletedOrDeleting() const { return mActor->isDeletedOrDeleting(); } +bool RootAi::getMapUnitParam(sead::SafeString* value, const sead::SafeString& key) const { + sead::SafeString out; + if (mMapUnitParams.getString(&out, key)) { + *value = out.cstr(); + return true; + } + *value = sead::SafeString::cEmptyString; + return false; +} + +bool RootAi::getMapUnitParam(const s32** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<int*>(mMapUnitParams.getAITreeVariablePointer(key, AIDefParamType::Int)); + static const s32 sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getMapUnitParam(const f32** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<f32*>(mMapUnitParams.getAITreeVariablePointer(key, AIDefParamType::Float)); + static const f32 sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getMapUnitParam(const sead::Vector3f** value, const sead::SafeString& key) const { + auto* ptr = static_cast<sead::Vector3f*>( + mMapUnitParams.getAITreeVariablePointer(key, AIDefParamType::Vec3)); + *value = ptr ? ptr : &sead::Vector3f::zero; + return ptr != nullptr; +} + +bool RootAi::getMapUnitParam(const bool** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<bool*>(mMapUnitParams.getAITreeVariablePointer(key, AIDefParamType::Bool)); + static const bool sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +namespace { +sead::FixedSafeString<64> sDefaultString; + +struct Vec3Wrapper { + util::InitTimeInfoEx init_time_info_ex; + sead::Vector3f sDefaultVec3{0, 0, 0}; +}; +Vec3Wrapper sDefaultAITreeVariables; +} // namespace + +bool RootAi::getAITreeVariable(sead::SafeString** value, const sead::SafeString& key) const { + auto* ptr = static_cast<sead::SafeString*>( + mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::String)); + *value = ptr ? ptr : &sDefaultString; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(s32** value, const sead::SafeString& key) const { + auto* ptr = static_cast<s32*>(mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::Int)); + static s32 sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(f32** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<f32*>(mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::Float)); + static f32 sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(sead::Vector3f** value, const sead::SafeString& key) const { + auto* ptr = static_cast<sead::Vector3f*>( + mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::Vec3)); + *value = ptr ? ptr : &sDefaultAITreeVariables.sDefaultVec3; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(bool** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<bool*>(mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::Bool)); + static bool sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(void** value, const sead::SafeString& key) const { + auto* ptr = static_cast<void**>( + mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::AITreeVariablePointer)); + static void* sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable(u32** value, const sead::SafeString& key) const { + auto* ptr = + static_cast<u32*>(mAiTreeParams.getAITreeVariablePointer(key, AIDefParamType::UInt)); + static u32 sDefault{}; + *value = ptr ? ptr : &sDefault; + return ptr != nullptr; +} + +bool RootAi::getAITreeVariable2(sead::Vector3f** value, const sead::SafeString& key) const { + return getAITreeVariable(value, key); +} + +bool RootAi::getAITreeVariable2(bool** value, const sead::SafeString& key) const { + return getAITreeVariable(value, key); +} + const char* getDefaultAiName(s32 root_idx) { static constexpr const char* names[] = {"DemoRootAI", "Root"}; if (root_idx >= 2) |
