mirror of https://github.com/zeldaret/botw.git
ksys/act: Finish ParamPack
This commit is contained in:
parent
a72a4b25c0
commit
b11344bc5e
|
|
@ -505,7 +505,7 @@
|
|||
0x0000007100012610,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_,468,_ZNK4sead14SafeStringBaseIcE9findIndexERKS1_
|
||||
0x00000071000127e4,_ZN4sead18Matrix34CalcCommonIfE7inverseERNS_9BaseMtx34IfEERKS3_,336,
|
||||
0x0000007100012934,j__ZdlPv_7,4,
|
||||
0x0000007100012938,_ZN4sead19FixedSafeStringBaseIcLi80EEaSERKNS_14SafeStringBaseIcEE,240,
|
||||
0x0000007100012938,xxxx,240,
|
||||
0x0000007100012a28,sub_7100012A28,600,
|
||||
0x0000007100012c80,Enemy::construct,68,
|
||||
0x0000007100012cc4,sub_7100012CC4,44,
|
||||
|
|
@ -46393,8 +46393,8 @@
|
|||
0x00000071007219e8,Message3DText::set,308,
|
||||
0x0000007100721b1c,sub_7100721B1C,300,
|
||||
0x0000007100721c48,sub_7100721C48,168,
|
||||
0x0000007100721cf0,j__ZdlPv_313,4,
|
||||
0x0000007100721cf4,_ZN4sead15FixedSafeStringILi8EEaSERKNS_14SafeStringBaseIcEE,240,
|
||||
0x0000007100721cf0,j__ZdlPv_313,4,_ZN4sead15FixedSafeStringILi80EED0Ev
|
||||
0x0000007100721cf4,_ZN4sead15FixedSafeStringILi80EEaSERKNS_14SafeStringBaseIcEE,240,_ZN4sead15FixedSafeStringILi80EEaSERKNS_14SafeStringBaseIcEE
|
||||
0x0000007100721de4,sub_7100721DE4,156,
|
||||
0x0000007100721e80,sub_7100721E80,124,
|
||||
0x0000007100721f54,sub_7100721F54,96,
|
||||
|
|
@ -73056,7 +73056,7 @@
|
|||
0x0000007100d17484,sub_7100D17484,336,
|
||||
0x0000007100d175d4,ai::ParamPack::ctor,8,_ZN4ksys3act2ai9ParamPackC1Ev
|
||||
0x0000007100d175dc,ai::ParamPack::dtor,152,_ZN4ksys3act2ai9ParamPackD1Ev
|
||||
0x0000007100d17674,ai::ParamPack::x,184,
|
||||
0x0000007100d17674,ai::ParamPack::x,184,_ZN4ksys3act2ai9ParamPack4loadERKNS0_5ActorERKNS1_18ParamNameTypePairsEiPN4sead4HeapE
|
||||
0x0000007100d1772c,ai::ParamPack::getAITreeVariablePointer,116,_ZNK4ksys3act2ai9ParamPack24getAITreeVariablePointerERKN4sead14SafeStringBaseIcEENS_14AIDefParamTypeEb
|
||||
0x0000007100d177a0,ai::ParamPack::loadFromInlineParamPack,1132,_ZN4ksys3act2ai9ParamPack4copyEPNS1_15InlineParamPackEb
|
||||
0x0000007100d17c0c,ai::InlineParamPack::addInt,116,_ZN4ksys3act2ai15InlineParamPack6addIntEiRKN4sead14SafeStringBaseIcEEi
|
||||
|
|
@ -73065,8 +73065,8 @@
|
|||
0x0000007100d17d84,ai::InlineParamPack::addBool,116,_ZN4ksys3act2ai15InlineParamPack7addBoolEbRKN4sead14SafeStringBaseIcEEi
|
||||
0x0000007100d17df8,ai::InlineParamPack::addActor,132,_ZN4ksys3act2ai15InlineParamPack8addActorERKNS0_12BaseProcLinkERKN4sead14SafeStringBaseIcEEi
|
||||
0x0000007100d17e7c,ai::InlineParamPack::addMesTransceiverId,152,_ZN4ksys3act2ai15InlineParamPack19addMesTransceiverIdERKNS_3mes13TransceiverIdERKN4sead14SafeStringBaseIcEEi
|
||||
0x0000007100d17f14,sub_7100D17F14,112,
|
||||
0x0000007100d17f84,sub_7100D17F84,432,
|
||||
0x0000007100d17f14,sub_7100D17F14,112,_ZN4ksys3act2ai9ParamPack8getPairsEPNS1_18ParamNameTypePairsEb
|
||||
0x0000007100d17f84,sub_7100D17F84,432,_ZN4ksys3act2ai18ParamNameTypePairs7addPairENS_14AIDefParamTypeERKN4sead14SafeStringBaseIcEEb
|
||||
0x0000007100d18134,ai::ParamPack::getString,160,_ZNK4ksys3act2ai9ParamPack9getStringEPN4sead14SafeStringBaseIcEERKS5_
|
||||
0x0000007100d181d4,ai::ParamPack::getString_0,316,_ZNK4ksys3act2ai9ParamPack9setStringERKN4sead14SafeStringBaseIcEES7_
|
||||
0x0000007100d18310,ai::ParamPack::getBaseProcLink_0,120,_ZNK4ksys3act2ai9ParamPack8getActorEPNS0_8BaseProcERKN4sead14SafeStringBaseIcEE
|
||||
|
|
@ -73075,8 +73075,8 @@
|
|||
0x0000007100d1891c,ai::InlineParamPack::addString,132,_ZN4ksys3act2ai15InlineParamPack10addPointerEPvRKN4sead14SafeStringBaseIcEENS_14AIDefParamTypeEi
|
||||
0x0000007100d189a0,sub_7100D189A0,136,_ZN4ksys3act2ai15InlineParamPack12acquireActorEPNS0_8BaseProcERKN4sead14SafeStringBaseIcEEi
|
||||
0x0000007100d18a28,ai::InlineParamPack::copyToParamPack,1204,_ZNK4ksys3act2ai15InlineParamPack15copyToParamPackERNS1_9ParamPackE
|
||||
0x0000007100d18edc,j__ZdlPv_839,4,
|
||||
0x0000007100d18ee0,_ZN4sead19FixedSafeStringBaseIcLi5EEaSERKNS_14SafeStringBaseIcEE,240,
|
||||
0x0000007100d18edc,j__ZdlPv_839,4,_ZN4sead19FixedSafeStringBaseIcLi80EED0Ev
|
||||
0x0000007100d18ee0,_ZN4sead19FixedSafeStringBaseIcLi80EEaSERKNS_14SafeStringBaseIcEE,240,_ZN4sead19FixedSafeStringBaseIcLi80EEaSERKNS_14SafeStringBaseIcEE
|
||||
0x0000007100d18fd0,ActorQuestLink::ctor,424,
|
||||
0x0000007100d19178,ActorQuestLink::allocRes,76,
|
||||
0x0000007100d191c4,sub_7100D191C4,76,
|
||||
|
|
@ -87922,7 +87922,7 @@
|
|||
0x0000007101097f6c,sub_7101097F6C,40,_ZThn664_N4ksys3res11DamageParamD0Ev
|
||||
0x0000007101097f94,getDamageRateTypes,428,_ZN4ksys3res11DamageParam12DamageSource5text_Ei?
|
||||
0x0000007101098140,j__ZdlPv_1173,4,_ZN4sead15FixedSafeStringILi75EED0Ev
|
||||
0x0000007101098144,_ZN4sead15FixedSafeStringILi80EEaSERKNS_14SafeStringBaseIcEE,240,_ZN4sead15FixedSafeStringILi75EEaSERKNS_14SafeStringBaseIcEE
|
||||
0x0000007101098144,_ZN4sead15FixedSafeStringILi75EEaSERKNS_14SafeStringBaseIcEE,240,_ZN4sead15FixedSafeStringILi75EEaSERKNS_14SafeStringBaseIcEE
|
||||
0x0000007101098234,j__ZdlPv_1174,4,_ZN4sead19FixedSafeStringBaseIcLi75EED0Ev
|
||||
0x0000007101098238,_ZN4sead15FixedSafeStringILi165EEaSERKNS_14SafeStringBaseIcEE,240,_ZN4sead19FixedSafeStringBaseIcLi75EEaSERKNS_14SafeStringBaseIcEE
|
||||
0x0000007101098328,getDamageReactionTypes,428,_ZN4ksys3res11DamageParam10DamageSize5text_Ei?
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -65,7 +65,7 @@ enum class CalcTiming {
|
|||
struct AIDef {
|
||||
union Value {
|
||||
Value() {}
|
||||
u8 raw[16];
|
||||
std::array<u8, 16> raw;
|
||||
const char* str;
|
||||
s32 i;
|
||||
f32 f;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,30 @@ ParamPack::~ParamPack() {
|
|||
}
|
||||
}
|
||||
|
||||
bool ParamPack::load(const Actor& actor, const ParamNameTypePairs& pairs, s32 count,
|
||||
sead::Heap* heap) {
|
||||
AIDef def;
|
||||
def.no_stop = false;
|
||||
def.trigger_action = false;
|
||||
def.dynamic_param_child = false;
|
||||
def._24b = false;
|
||||
def.num_params = 0;
|
||||
def.calc_timing = CalcTiming::AIAfter;
|
||||
|
||||
for (s32 i = 0; i < pairs.count; ++i) {
|
||||
const auto& pair = pairs.pairs[i];
|
||||
if (pair.use_count < count) {
|
||||
def.param_names[def.num_params] = pair.name;
|
||||
def.param_types[def.num_params] = pair.type;
|
||||
def.param_values[def.num_params].vec3 = {0, 0, 0};
|
||||
def.param_values[def.num_params].variable_ptr = nullptr;
|
||||
++def.num_params;
|
||||
}
|
||||
}
|
||||
|
||||
return load(actor, def, heap, AIDefInstParamKind::Dynamic);
|
||||
}
|
||||
|
||||
void* ParamPack::getAITreeVariablePointer(const sead::SafeString& key, AIDefParamType type,
|
||||
bool x) const {
|
||||
return getVariable<void>(key, type, x);
|
||||
|
|
@ -172,6 +196,34 @@ void InlineParamPack::addMesTransceiverId(const mes::TransceiverId& value,
|
|||
param.type = AIDefParamType::MesTransceiverId;
|
||||
}
|
||||
|
||||
void ParamPack::getPairs(ParamNameTypePairs* pairs, bool update_use_count) {
|
||||
for (auto* param = mParams; param; param = param->next) {
|
||||
if (param->data)
|
||||
pairs->addPair(param->type, param->name, update_use_count);
|
||||
}
|
||||
}
|
||||
|
||||
void ParamNameTypePairs::addPair(AIDefParamType type, const sead::SafeString& name,
|
||||
bool update_use_count) {
|
||||
for (s32 i = 0; i < count; ++i) {
|
||||
auto& pair = pairs[i];
|
||||
if (pair.type == type && name == pair.name) {
|
||||
if (update_use_count)
|
||||
++pair.use_count;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (count >= pairs.size())
|
||||
return;
|
||||
|
||||
auto& pair = pairs[count];
|
||||
pair.type = type;
|
||||
pair.name = name.cstr();
|
||||
pair.use_count = 1;
|
||||
++count;
|
||||
}
|
||||
|
||||
bool ParamPack::getString(sead::SafeString* value, const sead::SafeString& key) const {
|
||||
auto* str = getVariable<sead::SafeString>(key, AIDefParamType::String, false);
|
||||
if (!str)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include <basis/seadTypes.h>
|
||||
#include <container/seadSafeArray.h>
|
||||
#include <math/seadVector.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include <prim/seadSizedEnum.h>
|
||||
|
|
@ -24,6 +25,21 @@ namespace act::ai {
|
|||
|
||||
struct InlineParamPack;
|
||||
|
||||
struct ParamNameType {
|
||||
const char* name;
|
||||
AIDefParamType type;
|
||||
s32 use_count;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ParamNameType, 0x10);
|
||||
|
||||
struct ParamNameTypePairs {
|
||||
void addPair(AIDefParamType type, const sead::SafeString& name, bool update_use_count);
|
||||
|
||||
sead::SafeArray<ParamNameType, 32> pairs;
|
||||
s32 count;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ParamNameTypePairs, 0x208);
|
||||
|
||||
struct Param {
|
||||
Param* next;
|
||||
u32 hash;
|
||||
|
|
@ -63,8 +79,10 @@ public:
|
|||
*variable = val;
|
||||
}
|
||||
|
||||
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 copy(InlineParamPack* dest, bool x);
|
||||
void getPairs(ParamNameTypePairs* pairs, bool update_use_count);
|
||||
|
||||
bool getString(sead::SafeString* value, const sead::SafeString& key) const;
|
||||
bool setString(const sead::SafeString& value, const sead::SafeString& key) const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue