mirror of https://github.com/zeldaret/botw.git
ksys/act: Implement more ActorParam functions
This commit is contained in:
parent
23ec19806c
commit
aa92bf882c
|
@ -86787,6 +86787,7 @@
|
|||
0x00000071010c0c3c,Event::waitTimed,32,_ZN4ksys4util5Event4waitEN4sead8TickSpanE
|
||||
0x00000071010c0c5c,Event::setSignal,52,_ZN4ksys4util5Event9setSignalEv
|
||||
0x00000071010c0c90,Event::resetSignal,64,_ZN4ksys4util5Event11resetSignalEv
|
||||
0x00000071010c0cd0,Event::isSignalSet,16,_ZNK4ksys4util5Event11isSignalSetEv
|
||||
0x00000071010c0ce0,sub_71010C0CE0,32,
|
||||
0x00000071010c0d00,ThreadD0Base::ctor,96,_ZN4ksys4util13TaskQueueBaseC1EPN4sead4HeapE
|
||||
0x00000071010c0d60,sub_71010C0D60,136,_ZN4ksys4util13TaskQueueBaseD1Ev
|
||||
|
@ -89053,17 +89054,17 @@
|
|||
0x0000007101185a78,sub_7101185A78,68,_ZN4ksys3act10ActorParamD0Ev
|
||||
0x0000007101185abc,ActorParam::Load::deleteRes2,164,_ZN4ksys3act10ActorParam16deleteResHandlesEv
|
||||
0x0000007101185b60,ActorParam::Load::isDummyParamResource,136,_ZNK4ksys3act10ActorParam12isDummyParamENS_3res9ActorLink5Users4UserE
|
||||
0x0000007101185be8,ActorParam::Load::constructRes2,188,
|
||||
0x0000007101185ca4,ActorParam::Event::incRefCount,72,
|
||||
0x0000007101185cec,ActorParam::Data::unload,124,
|
||||
0x0000007101185d68,ActorParam::Event::setSignal,8,
|
||||
0x0000007101185d70,ActorParam::Event::wait,8,
|
||||
0x0000007101185d78,sub_7101185D78,8,
|
||||
0x0000007101185be8,ActorParam::Load::constructRes2,188,_ZN4ksys3act10ActorParam15allocResHandlesEPN4sead4HeapEji
|
||||
0x0000007101185ca4,ActorParam::Event::incRefCount,72,_ZN4ksys3act10ActorParam12incrementRefEv
|
||||
0x0000007101185cec,ActorParam::Data::unload,124,_ZN4ksys3act10ActorParam12decrementRefEv
|
||||
0x0000007101185d68,ActorParam::Event::setSignal,8,_ZN4ksys3act10ActorParam14setEventSignalEv
|
||||
0x0000007101185d70,ActorParam::Event::wait,8,_ZN4ksys3act10ActorParam12waitForEventEv
|
||||
0x0000007101185d78,sub_7101185D78,8,_ZNK4ksys3act10ActorParam11isSignalSetEv
|
||||
0x0000007101185d80,sub_7101185D80,684,
|
||||
0x000000710118602c,ActorParam::Load::x,52,
|
||||
0x0000007101186060,sub_7101186060,24,
|
||||
0x0000007101186078,ActorParam::Load::setResourcePointer,28,
|
||||
0x0000007101186094,ActorParam::Load::loadPriority,472,
|
||||
0x000000710118602c,ActorParam::Load::x,52,_ZN4ksys3act10ActorParam11allocHandleEv
|
||||
0x0000007101186060,sub_7101186060,24,_ZN4ksys3act10ActorParam14freeLastHandleEv
|
||||
0x0000007101186078,ActorParam::Load::setResourcePointer,28,_ZN4ksys3act10ActorParam11setResourceENS1_12ResourceTypeEPNS_7ParamIOE
|
||||
0x0000007101186094,ActorParam::Load::loadPriority,472,_ZN4ksys3act10ActorParam11setPriorityERKN4sead14SafeStringBaseIcEE
|
||||
0x000000710118626c,ActorParam::Load::checkClassAndPriority,424,
|
||||
0x0000007101186414,nullsub_4613,4,
|
||||
0x0000007101186418,nullsub_4614,4,_ZN4ksys3res10GParamList9doCreate_EPhjPN4sead4HeapE
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -1,4 +1,5 @@
|
|||
#include "KingSystem/ActorSystem/actActorParam.h"
|
||||
#include <basis/seadRawPrint.h>
|
||||
#include <prim/seadScopedLock.h>
|
||||
|
||||
namespace ksys::act {
|
||||
|
@ -34,7 +35,7 @@ void ActorParam::deleteData() {
|
|||
deleteResHandles();
|
||||
|
||||
mActorName = "";
|
||||
_168 = 0;
|
||||
mRefCount = 0;
|
||||
_a = 0;
|
||||
mRes = {};
|
||||
mEvent.resetSignal();
|
||||
|
@ -49,4 +50,79 @@ bool ActorParam::isDummyParam(res::ActorLink::Users::User user) const {
|
|||
return mRes.mActorLink->getUsers().getUserName(user) == "Dummy";
|
||||
}
|
||||
|
||||
void ActorParam::allocResHandles(sead::Heap* heap, u32 buffer_idx, s32 count) {
|
||||
SEAD_ASSERT(buffer_idx == 0 || buffer_idx == 1);
|
||||
mHandles[buffer_idx].allocBufferAssert(count, heap);
|
||||
mNumHandles[buffer_idx] = 0;
|
||||
}
|
||||
|
||||
s32 ActorParam::incrementRef() {
|
||||
auto lock = sead::makeScopedLock(mCS);
|
||||
return ++mRefCount;
|
||||
}
|
||||
|
||||
s32 ActorParam::decrementRef() {
|
||||
auto lock = sead::makeScopedLock(mCS);
|
||||
|
||||
if (mActorName.isEmpty())
|
||||
return 0;
|
||||
|
||||
if (--mRefCount == 0)
|
||||
deleteData();
|
||||
|
||||
return mRefCount;
|
||||
}
|
||||
|
||||
void ActorParam::setEventSignal() {
|
||||
mEvent.setSignal();
|
||||
}
|
||||
|
||||
void ActorParam::waitForEvent() {
|
||||
mEvent.wait();
|
||||
}
|
||||
|
||||
bool ActorParam::isSignalSet() const {
|
||||
return mEvent.isSignalSet();
|
||||
}
|
||||
|
||||
res::Handle* ActorParam::allocHandle() {
|
||||
const auto idx = mNumHandles[mActiveBufferIdx];
|
||||
++mNumHandles[mActiveBufferIdx];
|
||||
return &mHandles[mActiveBufferIdx][idx];
|
||||
}
|
||||
|
||||
void ActorParam::freeLastHandle() {
|
||||
--mNumHandles[mActiveBufferIdx];
|
||||
}
|
||||
|
||||
void ActorParam::setResource(ResourceType type, ParamIO* param_io) {
|
||||
const auto idx = u32(type);
|
||||
mRes.mArray[idx] = param_io;
|
||||
param_io->setIndex(idx);
|
||||
}
|
||||
|
||||
bool ActorParam::setPriority(const sead::SafeString& priority) {
|
||||
if (priority == "PlayerBefore") {
|
||||
mPriority = Priority::PlayerBefore;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (priority == "Player") {
|
||||
mPriority = Priority::Player;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (priority == "PlayerAfter") {
|
||||
mPriority = Priority::PlayerAfter;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (priority == "AllAfter") {
|
||||
mPriority = Priority::AllAfter;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace ksys::act
|
||||
|
|
|
@ -71,32 +71,35 @@ public:
|
|||
AnimationInfo = 24,
|
||||
};
|
||||
|
||||
struct Resources {
|
||||
res::ActorLink* mActorLink;
|
||||
res::ModelList* mModelList;
|
||||
res::ASList* mASList;
|
||||
res::AIProgram* mAIProgram;
|
||||
res::GParamList* mGParamList;
|
||||
res::Physics* mPhysics;
|
||||
res::Chemical* mChemical;
|
||||
res::AttClientList* mAttClientList;
|
||||
res::AISchedule* mAISchedule;
|
||||
res::EventFlow* mEventFlow;
|
||||
res::DamageParam* mDamageParam;
|
||||
res::RagdollConfigList* mRagdollConfigList;
|
||||
res::RagdollBlendWeight* mRagdollBlendWeight;
|
||||
res::Awareness* mAwareness;
|
||||
void* mResource14;
|
||||
void* mResource15;
|
||||
void* mResource16;
|
||||
res::Drop* mDropTable;
|
||||
res::Shop* mShopData;
|
||||
res::Recipe* mRecipe;
|
||||
res::Lod* mLod;
|
||||
res::BoneControl* mBoneControl;
|
||||
res::LifeCondition* mLifeCondition;
|
||||
res::UMii* mUMii;
|
||||
res::AnimationInfo* mAnimationInfo;
|
||||
union Resources {
|
||||
struct {
|
||||
res::ActorLink* mActorLink;
|
||||
res::ModelList* mModelList;
|
||||
res::ASList* mASList;
|
||||
res::AIProgram* mAIProgram;
|
||||
res::GParamList* mGParamList;
|
||||
res::Physics* mPhysics;
|
||||
res::Chemical* mChemical;
|
||||
res::AttClientList* mAttClientList;
|
||||
res::AISchedule* mAISchedule;
|
||||
res::EventFlow* mEventFlow;
|
||||
res::DamageParam* mDamageParam;
|
||||
res::RagdollConfigList* mRagdollConfigList;
|
||||
res::RagdollBlendWeight* mRagdollBlendWeight;
|
||||
res::Awareness* mAwareness;
|
||||
void* mResource14;
|
||||
void* mResource15;
|
||||
void* mResource16;
|
||||
res::Drop* mDropTable;
|
||||
res::Shop* mShopData;
|
||||
res::Recipe* mRecipe;
|
||||
res::Lod* mLod;
|
||||
res::BoneControl* mBoneControl;
|
||||
res::LifeCondition* mLifeCondition;
|
||||
res::UMii* mUMii;
|
||||
res::AnimationInfo* mAnimationInfo;
|
||||
};
|
||||
sead::SafeArray<void*, 25> mArray;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(Resources, 0xc8);
|
||||
|
||||
|
@ -107,7 +110,6 @@ public:
|
|||
const sead::SafeString& getProfile() const { return mProfile; }
|
||||
const char* getClassName() const { return mClassName; }
|
||||
Priority getPriority() const { return mPriority; }
|
||||
u32 get74() const { return _74; }
|
||||
const Resources& getRes() const { return mRes; }
|
||||
|
||||
bool isDummyParam(res::ActorLink::Users::User user) const;
|
||||
|
@ -122,17 +124,33 @@ private:
|
|||
void deleteData();
|
||||
void deleteResHandles();
|
||||
|
||||
void allocResHandles(sead::Heap* heap, u32 buffer_idx, s32 count);
|
||||
|
||||
s32 incrementRef();
|
||||
s32 decrementRef();
|
||||
|
||||
void setEventSignal();
|
||||
void waitForEvent();
|
||||
bool isSignalSet() const;
|
||||
void updateResource(const char* name, const char* data, const char* data1);
|
||||
|
||||
res::Handle* allocHandle();
|
||||
void freeLastHandle();
|
||||
|
||||
void setResource(ResourceType type, ParamIO* param_io);
|
||||
bool setPriority(const sead::SafeString& priority);
|
||||
|
||||
u16 _8 = 0;
|
||||
u8 _a = 0;
|
||||
sead::FixedSafeString<64> mActorName;
|
||||
sead::SafeString mProfile;
|
||||
const char* mClassName{};
|
||||
Priority mPriority = Priority::AllAfter;
|
||||
u32 _74 = 2;
|
||||
u32 mActiveBufferIdx = 2;
|
||||
Resources mRes;
|
||||
std::array<sead::Buffer<res::Handle>, 2> mHandles;
|
||||
std::array<s32, 2> mNumHandles;
|
||||
u32 _168{};
|
||||
s32 mRefCount{};
|
||||
sead::CriticalSection mCS{nullptr};
|
||||
util::Event mEvent{nullptr,
|
||||
sead::IDisposer::HeapNullOption::DoNotAppendDisposerIfNoHeapSpecified, true};
|
||||
|
|
|
@ -13,9 +13,15 @@ public:
|
|||
|
||||
virtual bool ParamIO_m0() { return false; }
|
||||
|
||||
bool applyResourceUpdate(const char* data, const char* data1);
|
||||
|
||||
u32 getIdx() const { return mIdx; }
|
||||
const sead::SafeString& getId() const { return mId; }
|
||||
void setIndex(u32 idx) { mIdx = idx; }
|
||||
|
||||
protected:
|
||||
u32 _1d8 = 0x1c;
|
||||
sead::FixedSafeString<128> _1e0;
|
||||
u32 mIdx = 0x1c;
|
||||
sead::FixedSafeString<128> mId;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ParamIO, 0x278);
|
||||
|
||||
|
|
Loading…
Reference in New Issue