ksys/act: Finish ParamPack

This commit is contained in:
Léo Lam 2020-12-06 12:12:39 +01:00
parent a72a4b25c0
commit b11344bc5e
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 80 additions and 10 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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)

View File

@ -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;