ksys/act: Start adding ai::ActionBase

This commit is contained in:
Léo Lam 2020-12-06 17:56:42 +01:00
parent 5a1a488ed3
commit 933811d34a
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
11 changed files with 81 additions and 46 deletions

View File

@ -15,7 +15,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(uking)
target_include_directories(uking PRIVATE src)
target_compile_options(uking PRIVATE -fno-rtti -fno-exceptions)
target_compile_options(uking PRIVATE -Wall -Wextra -Wdeprecated)
target_compile_options(uking PRIVATE -Wall -Wextra -Wdeprecated -Wno-unused-parameter)
target_compile_options(uking PRIVATE -fno-strict-aliasing)
target_compile_options(uking PRIVATE -Wno-invalid-offsetof)

View File

@ -1310,9 +1310,9 @@
0x000000710004be58,AI_Action_ActivateAttackSensor::loadParams,436,
0x000000710004c00c,AI_Action_ActivateAttackSensor::rtti1,288,
0x000000710004c12c,AI_Action_ActivateAttackSensor::rtti2,92,
0x000000710004c188,AI_AIOrActionBase::isFlag1Set,12,_ZN4ksys3act2ai10ActionBase8isFailedEv
0x000000710004c194,AI_AIOrActionBase::isFinished,12,_ZN4ksys3act2ai10ActionBase10isFinishedEv
0x000000710004c1a0,AI_AIOrActionBase::isFlag2Set,12,
0x000000710004c188,AI_AIOrActionBase::isFlag1Set,12,_ZNK4ksys3act2ai10ActionBase8isFailedEv
0x000000710004c194,AI_AIOrActionBase::isFinished,12,_ZNK4ksys3act2ai10ActionBase10isFinishedEv
0x000000710004c1a0,AI_AIOrActionBase::isFlag2Set,12,_ZNK4ksys3act2ai10ActionBase10isFlag4SetEv
0x000000710004c1ac,AI_AIOrActionBase::ret0,8,
0x000000710004c1b4,AI_AIOrActionBase::ret0_2,8,
0x000000710004c1bc,AI_AIOrActionBase::m9_null,4,
@ -1325,7 +1325,7 @@
0x000000710004c1ec,AI_AIOrActionBase::ret0_1,8,
0x000000710004c1f4,AI_AIOrActionBase::ret1_1,8,
0x000000710004c1fc,AI_AIOrActionBase::ret0_5,8,
0x000000710004c204,AI_ActionBase::isAction,8,_ZN4ksys3act2ai6Action8isActionEv
0x000000710004c204,AI_ActionBase::isAction,8,_ZNK4ksys3act2ai6Action8isActionEv
0x000000710004c20c,AI_AIOrActionBase::m28,16,
0x000000710004c21c,AI_AIOrActionBase::m29_null,4,
0x000000710004c220,AI_AIOrActionBase::ret0_6,8,
@ -15799,18 +15799,18 @@
0x000000710024980c,AI_Action_SetInstEventFlag::init,8,
0x0000007100249814,AI_Action_SetInstEventFlag::oneShot,28,
0x0000007100249830,AI_Action_SetInstEventFlag::loadParams,4,
0x0000007100249834,AI_Action_SetInstEventFlag::rtti1,288,
0x0000007100249954,AI_Action_SetInstEventFlag::rtti2,92,
0x0000007100249834,AI_Action_SetInstEventFlag::rtti1,288,_ZNK5uking6action22SetInstEventFlagAction27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007100249954,AI_Action_SetInstEventFlag::rtti2,92,_ZNK5uking6action22SetInstEventFlagAction18getRuntimeTypeInfoEv
0x00000071002499b0,AI_Action_SetLinkTagBasic::ctor,52,_ZN5uking6action21SetLinkTagBasicActionC1ERKN4ksys3act2ai10ActionBase7InitArgE
0x00000071002499e4,AI_Action_SetLinkTagBasic::dtor,20,_ZN5uking6action21SetLinkTagBasicActionD1Ev
0x00000071002499f8,AI_Action_SetLinkTagBasic::dtorDelete,52,_ZN5uking6action21SetLinkTagBasicActionD0Ev
0x0000007100249a2c,AI_Action_SetLinkTagBasic::init,8,
0x0000007100249a34,AI_Action_SetLinkTagBasic::enter,60,_ZN5uking6action21SetLinkTagBasicAction5enterEv
0x0000007100249a34,AI_Action_SetLinkTagBasic::enter,60,_ZN5uking6action21SetLinkTagBasicAction6enter_EPN4ksys3act2ai15InlineParamPackE
0x0000007100249a70,AI_Action_SetLinkTagBasic::calc,4,
0x0000007100249a74,AI_Action_SetLinkTagBasic::leave,4,
0x0000007100249a78,AI_Action_SetLinkTagBasic::loadParams,64,_ZN5uking6action21SetLinkTagBasicAction10loadParamsEv
0x0000007100249ab8,AI_Action_SetLinkTagBasic::rtti1,288,
0x0000007100249bd8,AI_Action_SetLinkTagBasic::rtti2,92,
0x0000007100249a78,AI_Action_SetLinkTagBasic::loadParams,64,_ZN5uking6action21SetLinkTagBasicAction11loadParams_Ev
0x0000007100249ab8,AI_Action_SetLinkTagBasic::rtti1,288,_ZNK5uking6action21SetLinkTagBasicAction27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007100249bd8,AI_Action_SetLinkTagBasic::rtti2,92,_ZNK5uking6action21SetLinkTagBasicAction18getRuntimeTypeInfoEv
0x0000007100249c34,AI_Action_SetMaterialVisible::ctor,76,
0x0000007100249c80,AI_Action_SetMaterialVisible::dtor,20,
0x0000007100249c94,AI_Action_SetMaterialVisible::dtorDelete,52,
@ -72993,7 +72993,7 @@
0x0000007100d15fc0,sub_7100D15FC0,108,
0x0000007100d1602c,j_BaseProcLink::cleanUp,4,
0x0000007100d16030,sub_7100D16030,8,
0x0000007100d16038,AI_AIOrActionBase::ctor,84,_ZN4ksys3act2ai10ActionBaseC1ERKNS2_7InitArgE
0x0000007100d16038,AI_AIOrActionBase::ctor,84,_ZN4ksys3act2ai10ActionBaseC2ERKNS2_7InitArgE
0x0000007100d1608c,AI_AIOrActionBase::preInit,808,
0x0000007100d163b4,AI_AIOrActionBase::getClassName,176,
0x0000007100d16464,AI_AIOrActionBase::x_0,24,
@ -73049,8 +73049,8 @@
0x0000007100d17358,ai::getDefaultBaseProcHandle,16,
0x0000007100d17368,sub_7100D17368,12,
0x0000007100d17374,AI_AIOrActionBase::getDefaultString20,12,
0x0000007100d17380,AI_AIOrActionBase::rtti1,112,
0x0000007100d173f0,AI_AIOrActionBase::rtti2,92,
0x0000007100d17380,AI_AIOrActionBase::rtti1,112,_ZNK4ksys3act2ai10ActionBase27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007100d173f0,AI_AIOrActionBase::rtti2,92,_ZNK4ksys3act2ai10ActionBase18getRuntimeTypeInfoEv
0x0000007100d1744c,AI_AIOrActionBase::dtorDelete,52,_ZN4ksys3act2ai10ActionBaseD0Ev
0x0000007100d17480,AI_AIOrActionBase::m20_null,4,
0x0000007100d17484,sub_7100D17484,336,
@ -73065,7 +73065,7 @@
0x0000007100d17d84,ai::InlineParamPack::addBool,116,_ZN4ksys3act2ai15InlineParamPack7addBoolEbRKN4sead14SafeStringBaseIcEEi
0x0000007100d17df8,ai::InlineParamPack::addActor,132,_ZN4ksys3act2ai15InlineParamPack8addActorERKNS0_12BaseProcLinkERKN4sead14SafeStringBaseIcEEi
0x0000007100d17e7c,ai::InlineParamPack::addMesTransceiverId,152,_ZN4ksys3act2ai15InlineParamPack19addMesTransceiverIdERKNS_3mes13TransceiverIdERKN4sead14SafeStringBaseIcEEi
0x0000007100d17f14,sub_7100D17F14,112,_ZN4ksys3act2ai9ParamPack8getPairsEPNS1_18ParamNameTypePairsEb
0x0000007100d17f14,sub_7100D17F14,112,_ZNK4ksys3act2ai9ParamPack8getPairsEPNS1_18ParamNameTypePairsEb
0x0000007100d17f84,sub_7100D17F84,432,_ZN4ksys3act2ai18ParamNameTypePairs7addPairENS_14AIDefParamTypeERKN4sead14SafeStringBaseIcEEb
0x0000007100d18134,ai::ParamPack::getString,160,_ZNK4ksys3act2ai9ParamPack9getStringEPN4sead14SafeStringBaseIcEERKS5_
0x0000007100d181d4,ai::ParamPack::getString_0,316,_ZNK4ksys3act2ai9ParamPack9setStringERKN4sead14SafeStringBaseIcEES7_

Can't render this file because it is too large.

View File

@ -7,11 +7,14 @@
namespace uking::action {
class SetInstEventFlagAction : public ksys::act::ai::Action {
SEAD_RTTI_OVERRIDE(SetInstEventFlagAction, ksys::act::ai::Action)
public:
explicit SetInstEventFlagAction(const InitArg& arg);
~SetInstEventFlagAction() override;
void oneShot() override;
bool oneShot() override;
bool init_(sead::Heap* heap) override;
void loadParams_() override;
};
KSYS_CHECK_SIZE_NX150(SetInstEventFlagAction, 0x20);

View File

@ -3,12 +3,11 @@
namespace uking::action {
SetLinkTagBasicAction::SetLinkTagBasicAction(const InitArg& arg)
: ksys::act::ai::Action(arg) {}
SetLinkTagBasicAction::SetLinkTagBasicAction(const InitArg& arg) : ksys::act::ai::Action(arg) {}
SetLinkTagBasicAction::~SetLinkTagBasicAction() = default;
void SetLinkTagBasicAction::enter() {
void SetLinkTagBasicAction::enter_(ksys::act::ai::InlineParamPack* params) {
if (IsOn.value())
mActor->emitBasicSigOn();
else
@ -17,7 +16,7 @@ void SetLinkTagBasicAction::enter() {
setFinished();
}
void SetLinkTagBasicAction::loadParams() {
void SetLinkTagBasicAction::loadParams_() {
getParamStatic(&IsOn, "IsOn");
}

View File

@ -7,12 +7,13 @@
namespace uking::action {
class SetLinkTagBasicAction : public ksys::act::ai::Action {
SEAD_RTTI_OVERRIDE(SetLinkTagBasicAction, ksys::act::ai::Action)
public:
explicit SetLinkTagBasicAction(const InitArg& arg);
~SetLinkTagBasicAction() override;
void enter() override;
void loadParams() override;
void enter_(ksys::act::ai::InlineParamPack* params) override;
void loadParams_() override;
private:
ksys::act::ai::ParamRef<bool> IsOn;

View File

@ -4,8 +4,4 @@ namespace ksys::act::ai {
Action::Action(const InitArg& arg) : ActionBase(arg) {}
bool Action::isAction() {
return true;
}
} // namespace ksys::act::ai

View File

@ -6,14 +6,15 @@
namespace ksys::act::ai {
class Action : public ActionBase {
SEAD_RTTI_OVERRIDE(Action, ActionBase)
public:
explicit Action(const InitArg& arg);
virtual void enter() {}
virtual void loadParams() {}
virtual void oneShot() {}
void calc() override;
bool isAction() const override { return true; }
bool isAction() override;
protected:
virtual void calc_() {}
};
KSYS_CHECK_SIZE_NX150(Action, 0x20);

View File

@ -5,22 +5,26 @@ namespace ksys::act::ai {
ActionBase::ActionBase(const InitArg& arg)
: mActor{arg.actor}, mDefinitionIdx{u16(arg.def_idx)}, mRootIdx{u8(arg.root_idx)} {}
bool ActionBase::isFinished() {
return mStatus.isOn(Status::Finished);
bool ActionBase::isFinished() const {
return mFlags.isOn(Flag::Finished);
}
bool ActionBase::isFailed() {
return mStatus.isOn(Status::Failed);
bool ActionBase::isFailed() const {
return mFlags.isOn(Flag::Failed);
}
bool ActionBase::isFlag4Set() const {
return mFlags.isOn(Flag::_4);
}
void ActionBase::setFinished() {
mStatus.set(Status::Finished);
mStatus.reset(Status::Failed);
mFlags.set(Flag::Finished);
mFlags.reset(Flag::Failed);
}
void ActionBase::setFailed() {
mStatus.set(Status::Failed);
mStatus.reset(Status::Finished);
mFlags.set(Flag::Failed);
mFlags.reset(Flag::Finished);
}
} // namespace ksys::act::ai

View File

@ -1,6 +1,7 @@
#pragma once
#include <basis/seadTypes.h>
#include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadTypedBitFlag.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actAiParam.h"
@ -12,7 +13,9 @@ class Actor;
namespace ai {
/// Base class for actions and AIs, which can be seen as looping actions.
class ActionBase {
SEAD_RTTI_BASE(ActionBase)
public:
struct InitArg {
Actor* actor;
@ -25,9 +28,40 @@ public:
explicit ActionBase(const InitArg& arg);
virtual ~ActionBase() = default;
virtual bool isAction();
const char* getName() const;
bool init(sead::Heap* heap, bool load_map_or_tree_params);
enum class Status : u8 {
virtual bool isFinished() const;
virtual bool isFailed() const;
virtual bool isFlag4Set() const;
virtual bool m7() { return false; }
virtual bool m8() { return false; }
virtual void m9() {}
virtual bool oneShot() { return true; }
virtual bool init_(sead::Heap* heap) { return true; }
virtual void enter_(InlineParamPack* params) {}
virtual bool reenter_(ActionBase* other, bool x);
virtual void leave_() {}
virtual void loadParams_() {}
virtual bool m16() { return false; }
virtual bool m17() { return false; }
virtual bool m18() { return true; }
virtual void m19() {}
virtual void calc() {}
virtual void getCurrentName(sead::BufferedSafeString* name, ActionBase* parent) const;
virtual void* m22() { return nullptr; }
virtual void getParams(ParamNameTypePairs* pairs, bool update_use_count) const;
virtual s32 m24() { return 0; }
virtual bool m25() { return true; }
virtual ActionBase* getCurrentChild() const { return nullptr; }
virtual bool isAction() const = 0;
virtual bool reenter(ActionBase* other) { return reenter_(other, false); }
virtual void postLeave() {}
virtual ActionBase* getAction(s32 idx) const { return nullptr; }
protected:
enum class Flag : u8 {
Finished = 1,
Failed = 2,
_4 = 4,
@ -38,9 +72,6 @@ public:
_80 = 0x80,
};
protected:
bool isFinished();
bool isFailed();
void setFinished();
void setFailed();
@ -51,7 +82,7 @@ protected:
ParamPack mParams;
u16 mDefinitionIdx;
u8 mRootIdx;
sead::TypedBitFlag<Status, u8> mStatus;
sead::TypedBitFlag<Flag> mFlags;
u16 mClassIdx;
u16 mPrevClassIdx;
};

View File

@ -196,7 +196,7 @@ void InlineParamPack::addMesTransceiverId(const mes::TransceiverId& value,
param.type = AIDefParamType::MesTransceiverId;
}
void ParamPack::getPairs(ParamNameTypePairs* pairs, bool update_use_count) {
void ParamPack::getPairs(ParamNameTypePairs* pairs, bool update_use_count) const {
for (auto* param = mParams; param; param = param->next) {
if (param->data)
pairs->addPair(param->type, param->name, update_use_count);

View File

@ -82,7 +82,7 @@ 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 copy(InlineParamPack* dest, bool x);
void getPairs(ParamNameTypePairs* pairs, bool update_use_count);
void getPairs(ParamNameTypePairs* pairs, bool update_use_count) const;
bool getString(sead::SafeString* value, const sead::SafeString& key) const;
bool setString(const sead::SafeString& value, const sead::SafeString& key) const;