diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 43f1d3e7..e7e946b3 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -1263,8 +1263,8 @@ 0x000000710004be58,AI_Action_ActivateAttackSensor::loadParams,436, 0x000000710004c00c,AI_Action_ActivateAttackSensor::rtti1,288, 0x000000710004c12c,AI_Action_ActivateAttackSensor::rtti2,92, -0x000000710004c188,AI_AIOrActionBase::isFlag1Set,12, -0x000000710004c194,AI_AIOrActionBase::isFinished,12, +0x000000710004c188,AI_AIOrActionBase::isFlag1Set,12,_ZN4ksys3act2ai10ActionBase8isFailedEv +0x000000710004c194,AI_AIOrActionBase::isFinished,12,_ZN4ksys3act2ai10ActionBase10isFinishedEv 0x000000710004c1a0,AI_AIOrActionBase::isFlag2Set,12, 0x000000710004c1ac,AI_AIOrActionBase::ret0,8, 0x000000710004c1b4,AI_AIOrActionBase::ret0_2,8, @@ -1278,7 +1278,7 @@ 0x000000710004c1ec,AI_AIOrActionBase::ret0_1,8, 0x000000710004c1f4,AI_AIOrActionBase::ret1_1,8, 0x000000710004c1fc,AI_AIOrActionBase::ret0_5,8, -0x000000710004c204,AI_ActionBase::isAction,8, +0x000000710004c204,AI_ActionBase::isAction,8,_ZN4ksys3act2ai6Action8isActionEv 0x000000710004c20c,AI_AIOrActionBase::m28,16, 0x000000710004c21c,AI_AIOrActionBase::m29_null,4, 0x000000710004c220,AI_AIOrActionBase::ret0_6,8, @@ -71374,8 +71374,8 @@ 0x0000007100d16c68,ai::ActorAI::getCurrentAction,144, 0x0000007100d16cf8,ai::ActorAI::x_1,92, 0x0000007100d16d54,ai::ActorAI::x_2,92, -0x0000007100d16db0,AI_AIOrActionBase::setFinished,20, -0x0000007100d16dc4,AI_AIOrActionBase::setFailed,20, +0x0000007100d16db0,AI_AIOrActionBase::setFinished,20,_ZN4ksys3act2ai10ActionBase11setFinishedEv +0x0000007100d16dc4,AI_AIOrActionBase::setFailed,20,_ZN4ksys3act2ai10ActionBase9setFailedEv 0x0000007100d16dd8,AI_AIOrActionBase::appendName,392, 0x0000007100d16f60,AI_AIOrActionBase::m23,12, 0x0000007100d16f6c,sub_7100D16F6C,32, diff --git a/src/KingSystem/ActorSystem/actAiAction.cpp b/src/KingSystem/ActorSystem/actAiAction.cpp index ad5e4c1c..24355040 100644 --- a/src/KingSystem/ActorSystem/actAiAction.cpp +++ b/src/KingSystem/ActorSystem/actAiAction.cpp @@ -4,4 +4,8 @@ namespace ksys::act::ai { Action::Action(const ClassArg& arg) : ActionBase(arg) {} +bool Action::isAction() { + return true; +} + } // namespace ksys::act::ai diff --git a/src/KingSystem/ActorSystem/actAiAction.h b/src/KingSystem/ActorSystem/actAiAction.h index ba0bf61d..2b7b2a3f 100644 --- a/src/KingSystem/ActorSystem/actAiAction.h +++ b/src/KingSystem/ActorSystem/actAiAction.h @@ -11,8 +11,9 @@ public: virtual void enter() {} virtual void loadParams() {} - virtual void oneShot() {} + + bool isAction() override; }; KSYS_CHECK_SIZE_NX150(Action, 0x20); diff --git a/src/KingSystem/ActorSystem/actAiClass.cpp b/src/KingSystem/ActorSystem/actAiClass.cpp index a75511d3..0fad8b58 100644 --- a/src/KingSystem/ActorSystem/actAiClass.cpp +++ b/src/KingSystem/ActorSystem/actAiClass.cpp @@ -5,4 +5,22 @@ namespace ksys::act::ai { ActionBase::ActionBase(const ClassArg& arg) : mActor{arg.actor}, mDefinitionIdx{u16(arg.definitionIdx)}, mRootIdx{u8(arg.rootIdx)} {} +bool ActionBase::isFinished() { + return mStatus.isOn(Status::Finished); +} + +bool ActionBase::isFailed() { + return mStatus.isOn(Status::Failed); +} + +void ActionBase::setFinished() { + mStatus.set(Status::Finished); + mStatus.reset(Status::Failed); +} + +void ActionBase::setFailed() { + mStatus.set(Status::Failed); + mStatus.reset(Status::Finished); +} + } // namespace ksys::act::ai diff --git a/src/KingSystem/ActorSystem/actAiClass.h b/src/KingSystem/ActorSystem/actAiClass.h index d065af14..69ac65f1 100644 --- a/src/KingSystem/ActorSystem/actAiClass.h +++ b/src/KingSystem/ActorSystem/actAiClass.h @@ -1,7 +1,8 @@ #pragma once #include - +#include +#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actAiParam.h" #include "KingSystem/Utils/Types.h" @@ -23,8 +24,24 @@ public: ActionBase(const ClassArg& arg); virtual ~ActionBase() = default; + virtual bool isAction(); + + enum class Status : u8 { + Finished = 1, + Failed = 2, + _4 = 4, + TriggerAction = 8, + DynamicParamChild = 0x10, + _20 = 0x20, + _40 = 0x40, + _80 = 0x80, + }; + protected: + bool isFinished(); + bool isFailed(); void setFinished(); + void setFailed(); template void getParamStatic(ParamRef* value, const sead::SafeString& key); @@ -33,7 +50,7 @@ protected: ParamPack mParams; u16 mDefinitionIdx; u8 mRootIdx; - u8 mStatus = 0; + sead::TypedBitFlag mStatus; u16 mClassIdx; u16 mPrevClassIdx; };