mirror of https://github.com/zeldaret/botw.git
ksys/act: Start adding ai::ActionBase
This commit is contained in:
parent
5a1a488ed3
commit
933811d34a
|
@ -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)
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -4,8 +4,4 @@ namespace ksys::act::ai {
|
|||
|
||||
Action::Action(const InitArg& arg) : ActionBase(arg) {}
|
||||
|
||||
bool Action::isAction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace ksys::act::ai
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue