ksys: Split actAiParam.h to reduce compile times

This commit is contained in:
Léo Lam 2021-03-23 15:11:53 +01:00
parent 814baf809e
commit 3a9fd0f9b9
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
12 changed files with 140 additions and 97 deletions

View File

@ -42,6 +42,7 @@ target_sources(uking PRIVATE
actAiBehavior.h actAiBehavior.h
actAiClassDef.cpp actAiClassDef.cpp
actAiClassDef.h actAiClassDef.h
actAiInlineParam.h
actAiParam.cpp actAiParam.cpp
actAiParam.h actAiParam.h
actAiQuery.cpp actAiQuery.cpp

View File

@ -2,9 +2,11 @@
#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorParam.h" #include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actAiAction.h" #include "KingSystem/ActorSystem/actAiAction.h"
#include "KingSystem/ActorSystem/actAiInlineParam.h"
#include "KingSystem/ActorSystem/actAiRoot.h" #include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/Resource/resResourceAIProgram.h" #include "KingSystem/Resource/resResourceAIProgram.h"
#include "KingSystem/Utils/InitTimeInfo.h" #include "KingSystem/Utils/InitTimeInfo.h"
#include "KingSystem/Utils/Thread/MessageTransceiverId.h"
namespace ksys::act::ai { namespace ksys::act::ai {

View File

@ -2,14 +2,17 @@
#include <basis/seadTypes.h> #include <basis/seadTypes.h>
#include <math/seadMathCalcCommon.h> #include <math/seadMathCalcCommon.h>
#include <math/seadVector.h>
#include <prim/seadRuntimeTypeInfo.h> #include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadTypedBitFlag.h> #include <prim/seadTypedBitFlag.h>
#include "KingSystem/ActorSystem/actAiParam.h" #include "KingSystem/ActorSystem/actAiParam.h"
#include "KingSystem/Utils/Types.h" #include "KingSystem/Utils/Types.h"
namespace ksys { namespace ksys {
struct AIDefSet;
class Message; class Message;
} struct MesTransceiverId;
} // namespace ksys
namespace ksys::res { namespace ksys::res {
class AIProgram; class AIProgram;

View File

@ -3,6 +3,8 @@
#include "KingSystem/ActorSystem/actActorParam.h" #include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actActorUtil.h" #include "KingSystem/ActorSystem/actActorUtil.h"
#include "KingSystem/ActorSystem/actAiAction.h" #include "KingSystem/ActorSystem/actAiAction.h"
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/ActorSystem/actAiInlineParam.h"
#include "KingSystem/ActorSystem/actAiRoot.h" #include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/ActorSystem/aiDummyAi.h" #include "KingSystem/ActorSystem/aiDummyAi.h"
#include "KingSystem/Resource/resResourceAIProgram.h" #include "KingSystem/Resource/resResourceAIProgram.h"

View File

@ -3,6 +3,7 @@
#include <codec/seadHashCRC32.h> #include <codec/seadHashCRC32.h>
#include <prim/seadContainerIterator.h> #include <prim/seadContainerIterator.h>
#include <resource/seadResource.h> #include <resource/seadResource.h>
#include "KingSystem/ActorSystem/actAiParam.h"
#include "KingSystem/Resource/resLoadRequest.h" #include "KingSystem/Resource/resLoadRequest.h"
#include "KingSystem/Utils/Byaml/ByamlData.h" #include "KingSystem/Utils/Byaml/ByamlData.h"
#include "KingSystem/Utils/Byaml/ByamlHashIter.h" #include "KingSystem/Utils/Byaml/ByamlHashIter.h"

View File

@ -40,21 +40,7 @@ constexpr bool paramKindHasValue(AIDefInstParamKind kind) {
constexpr s32 NumAIDefInstParamKinds = 4; constexpr s32 NumAIDefInstParamKinds = 4;
enum class AIDefParamType { enum class AIDefParamType;
String = 0,
Int = 1,
Float = 2,
Vec3 = 3,
Bool = 4,
Tree = 5,
AITreeVariablePointer = 6,
UInt = 7,
BaseProcLink = 8,
MesTransceiverId = 9,
BaseProcHandle = 10,
Rail = 11,
Other = 12,
};
enum class CalcTiming { enum class CalcTiming {
AIAfter = 0, AIAfter = 0,

View File

@ -0,0 +1,85 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadVector.h>
#include <prim/seadSafeString.h>
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/Utils/Thread/MessageTransceiverId.h"
#include "KingSystem/Utils/Types.h"
namespace ksys {
class Rail;
namespace act {
class Actor;
class BaseProc;
} // namespace act
namespace act::ai {
struct InlineParam {
union {
bool b;
int i;
u32 u;
float f;
const char* cstr;
void* ptr;
};
BaseProcLink baseProcLink;
sead::Vector3f vec3;
MesTransceiverId mesTransceiverId;
AIDefParamType type;
const char* key;
};
KSYS_CHECK_SIZE_NX150(InlineParam, 0x50);
struct InlineParamPack {
InlineParamPack() = default;
InlineParam& getParam(s32 idx) {
if (idx < 0) {
idx = count;
if (count > NumParamsMax - 1)
idx = 0;
else
count = idx + 1;
}
return params[idx];
}
s32 findIndex(const sead::SafeString& name, AIDefParamType type) const {
for (s32 i = 0; i < count; ++i) {
if (params[i].type == type && name == params[i].key)
return i;
}
return -1;
}
void addString(const char* value, const sead::SafeString& key, s32 idx);
void addString(const sead::SafeString& value, const sead::SafeString& key, s32 idx) {
addString(value.cstr(), key, idx);
}
void addInt(s32 value, const sead::SafeString& key, s32 idx);
void addFloat(f32 value, const sead::SafeString& key, s32 idx);
void addVec3(const sead::Vector3f& value, const sead::SafeString& key, s32 idx);
void addBool(bool value, const sead::SafeString& key, s32 idx);
void addUInt(u32 value, const sead::SafeString& key, s32 idx);
void addActor(const BaseProcLink& value, const sead::SafeString& key, s32 idx);
void addMesTransceiverId(const MesTransceiverId& value, const sead::SafeString& key, s32 idx);
void addPointer(void* value, const sead::SafeString& key, AIDefParamType type, s32 idx);
void acquireActor(BaseProc* proc, const sead::SafeString& key, s32 idx);
void copyToParamPack(ParamPack& pack) const;
static constexpr s32 NumParamsMax = 32;
InlineParam params[NumParamsMax];
int count = 0;
};
KSYS_CHECK_SIZE_NX150(InlineParamPack, 0xA08);
} // namespace act::ai
} // namespace ksys

View File

@ -1,5 +1,8 @@
#include "KingSystem/ActorSystem/actAiParam.h" #include "KingSystem/ActorSystem/actAiParam.h"
#include <agl/Utils/aglParameter.h>
#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/ActorSystem/actAiInlineParam.h"
namespace ksys::act { namespace ksys::act {
class BaseProcHandle; class BaseProcHandle;
@ -58,6 +61,22 @@ ParamPack::~ParamPack() {
} }
} }
template <typename T>
T* ParamPack::getVariable(const sead::SafeString& key, AIDefParamType type, bool a4) const {
const u32 hash = agl::utl::ParameterBase::calcHash(key);
auto* param = mParams;
if (!param)
return nullptr;
while (param->hash != hash || param->type != type) {
param = param->next;
if (!param)
return nullptr;
}
if (a4)
param->used = true;
return static_cast<T*>(param->data);
}
bool ParamPack::load(const Actor& actor, const ParamNameTypePairs& pairs, s32 count, bool ParamPack::load(const Actor& actor, const ParamNameTypePairs& pairs, s32 count,
sead::Heap* heap) { sead::Heap* heap) {
AIDef def; AIDef def;

View File

@ -1,26 +1,40 @@
#pragma once #pragma once
#include <agl/Utils/aglParameter.h>
#include <basis/seadTypes.h> #include <basis/seadTypes.h>
#include <container/seadSafeArray.h> #include <container/seadSafeArray.h>
#include <math/seadVector.h>
#include <prim/seadSafeString.h> #include <prim/seadSafeString.h>
#include <prim/seadSizedEnum.h> #include <prim/seadSizedEnum.h>
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/ActorSystem/actBaseProcLink.h"
#include "KingSystem/Utils/Thread/MessageTransceiverId.h"
#include "KingSystem/Utils/Types.h" #include "KingSystem/Utils/Types.h"
namespace ksys { namespace ksys {
class Rail;
namespace act { namespace act {
class Actor; class Actor;
class BaseProc; class BaseProc;
class BaseProcLink;
} // namespace act } // namespace act
struct AIDef;
class Rail;
enum class AIDefInstParamKind;
enum class AIDefParamType {
String = 0,
Int = 1,
Float = 2,
Vec3 = 3,
Bool = 4,
Tree = 5,
AITreeVariablePointer = 6,
UInt = 7,
BaseProcLink = 8,
MesTransceiverId = 9,
BaseProcHandle = 10,
Rail = 11,
Other = 12,
};
namespace act::ai { namespace act::ai {
struct InlineParamPack; struct InlineParamPack;
@ -57,20 +71,7 @@ public:
~ParamPack(); ~ParamPack();
template <typename T> template <typename T>
T* getVariable(const sead::SafeString& key, AIDefParamType type, bool a4 = true) const { T* getVariable(const sead::SafeString& key, AIDefParamType type, bool a4 = true) const;
const u32 hash = agl::utl::ParameterBase::calcHash(key);
auto* param = mParams;
if (!param)
return nullptr;
while (param->hash != hash || param->type != type) {
param = param->next;
if (!param)
return nullptr;
}
if (a4)
param->used = true;
return static_cast<T*>(param->data);
}
template <typename T> template <typename T>
void setVariable(const sead::SafeString& key, AIDefParamType type, const T& val) const { void setVariable(const sead::SafeString& key, AIDefParamType type, const T& val) const {
@ -112,66 +113,6 @@ private:
Param* mParams = nullptr; Param* mParams = nullptr;
}; };
struct InlineParam {
union {
bool b;
int i;
u32 u;
float f;
const char* cstr;
void* ptr;
};
BaseProcLink baseProcLink;
sead::Vector3f vec3;
MesTransceiverId mesTransceiverId;
AIDefParamType type;
const char* key;
};
KSYS_CHECK_SIZE_NX150(InlineParam, 0x50);
struct InlineParamPack {
InlineParamPack() = default;
InlineParam& getParam(s32 idx) {
if (idx < 0) {
idx = count;
if (count > NumParamsMax - 1)
idx = 0;
else
count = idx + 1;
}
return params[idx];
}
s32 findIndex(const sead::SafeString& name, AIDefParamType type) const {
for (s32 i = 0; i < count; ++i) {
if (params[i].type == type && name == params[i].key)
return i;
}
return -1;
}
void addString(const char* value, const sead::SafeString& key, s32 idx);
void addString(const sead::SafeString& value, const sead::SafeString& key, s32 idx) {
addString(value.cstr(), key, idx);
}
void addInt(s32 value, const sead::SafeString& key, s32 idx);
void addFloat(f32 value, const sead::SafeString& key, s32 idx);
void addVec3(const sead::Vector3f& value, const sead::SafeString& key, s32 idx);
void addBool(bool value, const sead::SafeString& key, s32 idx);
void addUInt(u32 value, const sead::SafeString& key, s32 idx);
void addActor(const BaseProcLink& value, const sead::SafeString& key, s32 idx);
void addMesTransceiverId(const MesTransceiverId& value, const sead::SafeString& key, s32 idx);
void addPointer(void* value, const sead::SafeString& key, AIDefParamType type, s32 idx);
void acquireActor(BaseProc* proc, const sead::SafeString& key, s32 idx);
void copyToParamPack(ParamPack& pack) const;
static constexpr s32 NumParamsMax = 32;
InlineParam params[NumParamsMax];
int count = 0;
};
KSYS_CHECK_SIZE_NX150(InlineParamPack, 0xA08);
} // namespace act::ai } // namespace act::ai
} // namespace ksys } // namespace ksys

View File

@ -1,6 +1,7 @@
#include "KingSystem/ActorSystem/actAiQuery.h" #include "KingSystem/ActorSystem/actAiQuery.h"
#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorParam.h" #include "KingSystem/ActorSystem/actActorParam.h"
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/ActorSystem/actAiRoot.h" #include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/Resource/resResourceAIProgram.h" #include "KingSystem/Resource/resResourceAIProgram.h"

View File

@ -1,5 +1,6 @@
#include "KingSystem/ActorSystem/actAiRoot.h" #include "KingSystem/ActorSystem/actAiRoot.h"
#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actAiClassDef.h"
#include "KingSystem/Utils/InitTimeInfo.h" #include "KingSystem/Utils/InitTimeInfo.h"
namespace ksys::act::ai { namespace ksys::act::ai {

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <prim/seadTypedBitFlag.h> #include <prim/seadTypedBitFlag.h>
#include <thread/seadAtomic.h>
#include "KingSystem/ActorSystem/actAiAction.h" #include "KingSystem/ActorSystem/actAiAction.h"
#include "KingSystem/ActorSystem/actAiAi.h" #include "KingSystem/ActorSystem/actAiAi.h"
#include "KingSystem/ActorSystem/actAiBehavior.h" #include "KingSystem/ActorSystem/actAiBehavior.h"