mirror of https://github.com/zeldaret/botw.git
ksys/act: Implement more Query functions
This commit is contained in:
parent
fcbe17a3f0
commit
930b780cd1
|
@ -40494,13 +40494,13 @@
|
|||
0x0000007100683ec0,AI_Query_BranchByDyeColor::doQuery,36,
|
||||
0x0000007100683ee4,AI_Query_BranchByDyeColor::m10,4,
|
||||
0x0000007100683ee8,AI_Query_BranchByDyeColor::loadParams,4,
|
||||
0x0000007100683eec,AI_QueryBase::m8n,4,_ZN4ksys3act2ai5Query2m8Ev
|
||||
0x0000007100683eec,AI_QueryBase::m8n,4,_ZN4ksys3act2ai5Query8preInit_Ev
|
||||
0x0000007100683ef0,AI_Query_BranchByDyeColor::rtti1,204,
|
||||
0x0000007100683fbc,AI_Query_BranchByDyeColor::rtti2,92,
|
||||
0x0000007100684018,AI_QueryBase::m4r0,8,_ZN4ksys3act2ai5Query2m4Ev
|
||||
0x0000007100684020,AI_QueryBase::m5r0,8,_ZN4ksys3act2ai5Query2m5Ev
|
||||
0x0000007100684028,AI_QueryBase::m6n,4,_ZN4ksys3act2ai5Query2m6Ev
|
||||
0x000000710068402c,AI_QueryBase::m7r1,8,_ZN4ksys3act2ai5Query2m7Ev
|
||||
0x000000710068402c,AI_QueryBase::m7r1,8,_ZN4ksys3act2ai5Query5init_EPN4sead4HeapE
|
||||
0x0000007100684034,AI_QueryBase::m11r1,8,_ZN4ksys3act2ai5Query3m11Ev
|
||||
0x000000710068403c,AI_QueryBase::m12n,4,_ZN4ksys3act2ai5Query3m12Ev
|
||||
0x0000007100684040,AI_QueryBase::rtti1,112,_ZNK4ksys3act2ai5Query27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
|
@ -74048,13 +74048,13 @@
|
|||
0x0000007100d5a158,sub_7100D5A158,92,
|
||||
0x0000007100d5a1b4,sub_7100D5A1B4,140,_ZNK4sead15RuntimeTypeInfo6DeriveINS_15SharcArchiveResEE9isDerivedEPKNS0_9InterfaceE
|
||||
0x0000007100d5a240,AI_QueryBase::ctor,72,_ZN4ksys3act2ai5QueryC1ERKNS2_7InitArgE
|
||||
0x0000007100d5a288,sub_7100D5A288,304,
|
||||
0x0000007100d5a3b8,sub_7100D5A3B8,64,
|
||||
0x0000007100d5a3f8,sub_7100D5A3F8,56,
|
||||
0x0000007100d5a430,AI_QueryBase::getString_m8,108,
|
||||
0x0000007100d5a49c,AI_QueryBase::getIntDynamic,84,
|
||||
0x0000007100d5a4f0,sub_7100D5A4F0,80,
|
||||
0x0000007100d5a540,sub_7100D5A540,80,
|
||||
0x0000007100d5a288,sub_7100D5A288,304,_ZN4ksys3act2ai5Query4initEPN4sead4HeapE
|
||||
0x0000007100d5a3b8,sub_7100D5A3B8,64,_ZNK4ksys3act2ai5Query7getNameEv
|
||||
0x0000007100d5a3f8,sub_7100D5A3F8,56,_ZNK4ksys3act2ai5Query13getSInstParamEPPKfRKN4sead14SafeStringBaseIcEE
|
||||
0x0000007100d5a430,AI_QueryBase::getString_m8,108,_ZNK4ksys3act2ai5Query13getDInstParamEPN4sead14SafeStringBaseIcEERKS5_
|
||||
0x0000007100d5a49c,AI_QueryBase::getIntDynamic,84,_ZNK4ksys3act2ai5Query13getDInstParamEPPKiRKN4sead14SafeStringBaseIcEE
|
||||
0x0000007100d5a4f0,sub_7100D5A4F0,80,_ZNK4ksys3act2ai5Query13getDInstParamEPPKfRKN4sead14SafeStringBaseIcEE
|
||||
0x0000007100d5a540,sub_7100D5A540,80,_ZNK4ksys3act2ai5Query13getDInstParamEPPKbRKN4sead14SafeStringBaseIcEE
|
||||
0x0000007100d5a590,AI_QueryBase::getArgument_m10,196,
|
||||
0x0000007100d5a654,sub_7100D5A654,184,
|
||||
0x0000007100d5a70c,sub_7100D5A70C,184,
|
||||
|
@ -74294,8 +74294,8 @@
|
|||
0x0000007100d64664,sub_7100D64664,40,_ZThn56_N4ksys3act2ai6RootAiD0Ev
|
||||
0x0000007100d6468c,ai::ActorAI::createAiClass,996,
|
||||
0x0000007100d64a70,ai::loadActorParamsIntoClassDef,592,
|
||||
0x0000007100d64cc0,ai::ActorAI::loadMapUnitParams,36,
|
||||
0x0000007100d64ce4,ai::ActorAI::loadAITreeParams,36,
|
||||
0x0000007100d64cc0,ai::ActorAI::loadMapUnitParams,36,_ZN4ksys3act2ai6RootAi17loadMapUnitParamsERKNS_5AIDefEPN4sead4HeapE
|
||||
0x0000007100d64ce4,ai::ActorAI::loadAITreeParams,36,_ZN4ksys3act2ai6RootAi16loadAITreeParamsERKNS_5AIDefEPN4sead4HeapE
|
||||
0x0000007100d64d08,act::getExtraHeapSizeForParams,200,
|
||||
0x0000007100d64dd0,ai::ActorAI::init,8,
|
||||
0x0000007100d64dd8,ai::ActorAI::calcRecursively,240,
|
||||
|
@ -91459,10 +91459,10 @@
|
|||
0x00000071011aa070,Aiprog::loadDefParameters,1556,_ZN4ksys3res9AIProgram14parseDefParamsEPNS1_10DefinitionEPvPN4sead4HeapERKN3agl3utl16ResParameterListEPtSD_
|
||||
0x00000071011aa684,sub_71011AA684,256,_ZN4ksys3res9AIProgram10Definition14addSInstParam_IN4sead14SafeStringBaseIcEEEEbiPKcPNS4_4HeapERKT_
|
||||
0x00000071011aa784,Aiprog::getActionsOrAIs,20,_ZNK4ksys3res9AIProgram15getActionsOrAIsENS1_12AIActionTypeE
|
||||
0x00000071011aa798,sub_71011AA798,168,
|
||||
0x00000071011aa798,sub_71011AA798,168,_ZNK4ksys3res9AIProgram13getSInstParamEPPKcRKNS1_10DefinitionERKN4sead14SafeStringBaseIcEE
|
||||
0x00000071011aa840,Aiprog::x_2,208,_ZNK4ksys3res9AIProgram13getSInstParamEPN4sead14SafeStringBaseIcEERKNS1_10DefinitionERKS4_
|
||||
0x00000071011aa910,sub_71011AA910,156,_ZNK4ksys3res9AIProgram13getSInstParamEPPKiRKNS1_10DefinitionERKN4sead14SafeStringBaseIcEE?
|
||||
0x00000071011aa9ac,sub_71011AA9AC,156,
|
||||
0x00000071011aa9ac,sub_71011AA9AC,156,_ZNK4ksys3res9AIProgram13getSInstParamEPPKfRKNS1_10DefinitionERKN4sead14SafeStringBaseIcEE?
|
||||
0x00000071011aaa48,Aiprog::x_3,156,_ZNK4ksys3res9AIProgram13getSInstParamEPPKN4sead7Vector3IfEERKNS1_10DefinitionERKNS2_14SafeStringBaseIcEE?
|
||||
0x00000071011aaae4,sub_71011AAAE4,168,_ZNK4ksys3res9AIProgram13getSInstParamEPPKbRKNS1_10DefinitionERKN4sead14SafeStringBaseIcEE
|
||||
0x00000071011aab8c,sub_71011AAB8C,8,_ZNK4ksys3res9AIProgram27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -28,6 +28,7 @@ public:
|
|||
|
||||
SEAD_RTTI_OVERRIDE(Actor, BaseProc)
|
||||
|
||||
ai::RootAi* getRootAi() const { return mRootAi; }
|
||||
const ActorParam* getParam() const { return mActorParam; }
|
||||
const map::MubinIter& getMapObjIter() const { return mMapObjIter; }
|
||||
|
||||
|
|
|
@ -80,7 +80,8 @@ public:
|
|||
}
|
||||
|
||||
bool load(const Actor& actor, const ParamNameTypePairs& pairs, s32 count, sead::Heap* heap);
|
||||
void* getAITreeVariablePointer(const sead::SafeString& key, AIDefParamType type, bool x) const;
|
||||
void* getAITreeVariablePointer(const sead::SafeString& key, AIDefParamType type,
|
||||
bool x = false) const;
|
||||
void copy(InlineParamPack* dest, bool x);
|
||||
void getPairs(ParamNameTypePairs* pairs, bool update_use_count) const;
|
||||
|
||||
|
|
|
@ -1,10 +1,73 @@
|
|||
#include "KingSystem/ActorSystem/actAiQuery.h"
|
||||
#include "KingSystem/ActorSystem/actActorParam.h"
|
||||
#include "KingSystem/ActorSystem/actAiRoot.h"
|
||||
#include "KingSystem/Resource/resResourceAIProgram.h"
|
||||
|
||||
namespace ksys::act::ai {
|
||||
|
||||
Query::Query(const InitArg& arg) : mActor(arg.actor), mDefIdx(arg.def_idx) {}
|
||||
|
||||
inline res::AIProgram* Query::getAIProg() const {
|
||||
return mActor->getParam()->getRes().mAIProgram;
|
||||
}
|
||||
|
||||
bool Query::init(sead::Heap* heap) {
|
||||
if (mDefIdx != -1) {
|
||||
AIDefSet set;
|
||||
set.dynamic_params.num_params = 0;
|
||||
set.ai_tree_params.num_params = 0;
|
||||
|
||||
auto* inst = AIClassDef::instance();
|
||||
const auto& query = getAIProg()->getQueries()[mDefIdx];
|
||||
inst->getDef(query.mClassName, &set, AIDefType::Query);
|
||||
|
||||
if (mActor->getRootAi()->loadMapUnitParams(set.map_unit_params, heap) &&
|
||||
mActor->getRootAi()->loadAITreeParams(set.ai_tree_params, heap) &&
|
||||
(set.dynamic_params.num_params < 1 ||
|
||||
mParamPack.load(*mActor, set.dynamic_params, heap, AIDefInstParamKind::Dynamic))) {
|
||||
preInit_();
|
||||
return init_(heap);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* Query::getName() const {
|
||||
if (mDefIdx == -1)
|
||||
return nullptr;
|
||||
|
||||
return getAIProg()->getQueries()[mDefIdx].mClassName;
|
||||
}
|
||||
|
||||
bool Query::getSInstParam(const f32** value, const sead::SafeString& param) const {
|
||||
const auto& def = getAIProg()->getQueries()[mDefIdx];
|
||||
return getAIProg()->getSInstParam(value, def, param);
|
||||
}
|
||||
|
||||
bool Query::getDInstParam(sead::SafeString* value, const sead::SafeString& param) const {
|
||||
if (mParamPack.getString(value, param))
|
||||
return true;
|
||||
*value = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Query::getDInstParam(const s32** value, const sead::SafeString& param) const {
|
||||
static s32 sDefault{};
|
||||
return getDInstParam_<s32>(value, param, AIDefParamType::Int, &sDefault);
|
||||
}
|
||||
|
||||
bool Query::getDInstParam(const f32** value, const sead::SafeString& param) const {
|
||||
static f32 sDefault{};
|
||||
return getDInstParam_<f32>(value, param, AIDefParamType::Float, &sDefault);
|
||||
}
|
||||
|
||||
bool Query::getDInstParam(const bool** value, const sead::SafeString& param) const {
|
||||
static bool sDefault{};
|
||||
auto ret = static_cast<bool*>(mParamPack.getAITreeVariablePointer(param, AIDefParamType::Bool));
|
||||
*value = ret ? ret : &sDefault;
|
||||
return ret != nullptr;
|
||||
}
|
||||
|
||||
template class ClassContainer<Query>;
|
||||
|
||||
} // namespace ksys::act::ai
|
||||
|
|
|
@ -5,10 +5,18 @@
|
|||
#include "KingSystem/ActorSystem/actAiParam.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace evfl {
|
||||
class ParamAccessor;
|
||||
}
|
||||
|
||||
namespace ksys::act {
|
||||
class Actor;
|
||||
}
|
||||
|
||||
namespace ksys::res {
|
||||
class AIProgram;
|
||||
}
|
||||
|
||||
namespace ksys::act::ai {
|
||||
|
||||
class Query {
|
||||
|
@ -24,17 +32,47 @@ public:
|
|||
explicit Query(const InitArg& arg);
|
||||
virtual ~Query() = default;
|
||||
|
||||
bool init(sead::Heap* heap);
|
||||
const char* getName() const;
|
||||
|
||||
bool getSInstParam(const f32** value, const sead::SafeString& param) const;
|
||||
|
||||
bool getDInstParam(sead::SafeString* value, const sead::SafeString& param) const;
|
||||
bool getDInstParam(const s32** value, const sead::SafeString& param) const;
|
||||
bool getDInstParam(const f32** value, const sead::SafeString& param) const;
|
||||
bool getDInstParam(const bool** value, const sead::SafeString& param) const;
|
||||
|
||||
bool loadString(evfl::ParamAccessor* accessor, const sead::SafeString& param);
|
||||
bool loadInt(evfl::ParamAccessor* accessor, const sead::SafeString& param);
|
||||
bool loadFloat(evfl::ParamAccessor* accessor, const sead::SafeString& param);
|
||||
bool loadBool(evfl::ParamAccessor* accessor, const sead::SafeString& param);
|
||||
|
||||
bool getAITreeVariable(const sead::SafeString** value, const sead::SafeString& param) const;
|
||||
bool getAITreeVariable(const char** value, const sead::SafeString& param) const;
|
||||
|
||||
virtual bool m4() { return false; }
|
||||
virtual bool m5() { return false; }
|
||||
virtual void m6() {}
|
||||
virtual bool m7() { return true; }
|
||||
virtual void m8() {}
|
||||
virtual bool init_(sead::Heap* heap) { return true; }
|
||||
virtual void preInit_() {}
|
||||
virtual int doQuery() { return 0; }
|
||||
virtual void m10() {}
|
||||
virtual bool m11() { return true; }
|
||||
virtual void m12() {}
|
||||
|
||||
protected:
|
||||
res::AIProgram* getAIProg() const;
|
||||
|
||||
template <typename T>
|
||||
bool getDInstParam_(const T** value, const sead::SafeString& param, AIDefParamType type,
|
||||
const T* default_value) const {
|
||||
*value = static_cast<T*>(mParamPack.getAITreeVariablePointer(param, type));
|
||||
if (*value)
|
||||
return true;
|
||||
*value = default_value;
|
||||
return false;
|
||||
}
|
||||
|
||||
Actor* mActor;
|
||||
ParamPack mParamPack;
|
||||
s32 mDefIdx;
|
||||
|
|
|
@ -16,4 +16,12 @@ RootAi::~RootAi() {
|
|||
delete _140;
|
||||
}
|
||||
|
||||
bool RootAi::loadMapUnitParams(const AIDef& def, sead::Heap* heap) {
|
||||
return mMapUnitParams.load(*mActor, def, heap, AIDefInstParamKind::MapUnit);
|
||||
}
|
||||
|
||||
bool RootAi::loadAITreeParams(const AIDef& def, sead::Heap* heap) {
|
||||
return mAiTreeParams.load(*mActor, def, heap, AIDefInstParamKind::AITree);
|
||||
}
|
||||
|
||||
} // namespace ksys::act::ai
|
||||
|
|
|
@ -48,6 +48,9 @@ public:
|
|||
const ParamPack& getMapUnitParams() const { return mMapUnitParams; }
|
||||
const ParamPack& getAiTreeParams() const { return mAiTreeParams; }
|
||||
|
||||
bool loadMapUnitParams(const AIDef& def, sead::Heap* heap);
|
||||
bool loadAITreeParams(const AIDef& def, sead::Heap* heap);
|
||||
|
||||
private:
|
||||
// TODO: rename and put this in a different translation unit
|
||||
struct SomeStruct {
|
||||
|
|
|
@ -326,6 +326,17 @@ AIProgram::Definition::findSInstParam(const sead::SafeString& name) const {
|
|||
return findSInstParam(agl::utl::ParameterBase::calcHash(name));
|
||||
}
|
||||
|
||||
bool AIProgram::getSInstParam(const char** value, const AIProgram::Definition& def,
|
||||
const sead::SafeString& param_name) const {
|
||||
const auto* param = def.findSInstParam(param_name);
|
||||
if (!param || param->getParameterType() != agl::utl::ParameterType::StringRef) {
|
||||
*value = &sead::SafeString::cNullChar;
|
||||
return false;
|
||||
}
|
||||
*value = param->ptrT<char>();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AIProgram::getSInstParam(sead::SafeString* value, const AIProgram::Definition& def,
|
||||
const sead::SafeString& param_name) const {
|
||||
const auto* param = def.findSInstParam(param_name);
|
||||
|
@ -343,6 +354,12 @@ bool AIProgram::getSInstParam(const s32** value, const AIProgram::Definition& de
|
|||
return getSInstParam_(value, def, param_name, agl::utl::ParameterType::Int, &sDefault);
|
||||
}
|
||||
|
||||
bool AIProgram::getSInstParam(const f32** value, const AIProgram::Definition& def,
|
||||
const sead::SafeString& param_name) const {
|
||||
static const f32 sDefault{};
|
||||
return getSInstParam_(value, def, param_name, agl::utl::ParameterType::F32, &sDefault);
|
||||
}
|
||||
|
||||
bool AIProgram::getSInstParam(const sead::Vector3f** value, const AIProgram::Definition& def,
|
||||
const sead::SafeString& param_name) const {
|
||||
return getSInstParam_(value, def, param_name, agl::utl::ParameterType::Vec3,
|
||||
|
|
|
@ -64,12 +64,14 @@ public:
|
|||
const sead::Buffer<BehaviorDef>& getBehaviors() const { return mBehaviors; }
|
||||
const sead::Buffer<QueryDef>& getQueries() const { return mQueries; }
|
||||
|
||||
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 f32** 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,
|
||||
|
@ -129,10 +131,4 @@ inline bool AIProgram::getSInstParam_(const T** value, const AIProgram::Definiti
|
|||
return true;
|
||||
}
|
||||
|
||||
inline bool AIProgram::getSInstParam(const f32** value, const AIProgram::Definition& def,
|
||||
const sead::SafeString& param_name) const {
|
||||
static const f32 sDefault{};
|
||||
return getSInstParam_(value, def, param_name, agl::utl::ParameterType::F32, &sDefault);
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
|
Loading…
Reference in New Issue