mirror of https://github.com/zeldaret/botw.git
Merge pull request #1 from notyouraveragehooman/master
BaseProc parent and child connections
This commit is contained in:
commit
31e4ddd572
|
@ -89467,25 +89467,25 @@
|
||||||
0x00000071011ba200,ActorBase::x,112,
|
0x00000071011ba200,ActorBase::x,112,
|
||||||
0x00000071011ba270,ActorBase::queueExtraJobPush,68,_ZN4ksys3act8BaseProc18queueExtraJobPush_ENS0_7JobTypeE
|
0x00000071011ba270,ActorBase::queueExtraJobPush,68,_ZN4ksys3act8BaseProc18queueExtraJobPush_ENS0_7JobTypeE
|
||||||
0x00000071011ba2b4,ActorBase::shouldSkipJobPush,144,
|
0x00000071011ba2b4,ActorBase::shouldSkipJobPush,144,
|
||||||
0x00000071011ba344,ActorBase::getConnectedCalcParent,32,
|
0x00000071011ba344,ActorBase::getConnectedCalcParent,32,_ZNK4ksys3act8BaseProc22getConnectedCalcParentEv
|
||||||
0x00000071011ba364,ActorBase::jobInvoked,564,
|
0x00000071011ba364,ActorBase::jobInvoked,564,
|
||||||
0x00000071011ba598,ActorBase::updateState,1076,_ZN4ksys3act8BaseProc18processStateUpdateEh!
|
0x00000071011ba598,ActorBase::updateState,1076,_ZN4ksys3act8BaseProc18processStateUpdateEh!
|
||||||
0x00000071011ba9cc,ActorBase::afterUpdateState,48,_ZN4ksys3act8BaseProc17afterUpdateState_Ev
|
0x00000071011ba9cc,ActorBase::afterUpdateState,48,_ZN4ksys3act8BaseProc17afterUpdateState_Ev
|
||||||
0x00000071011BA9FC,_ZN4ksys3act8BaseProc17x00000071011ba9fcEv,0xBC,_ZN4ksys3act8BaseProc17x00000071011ba9fcEv
|
0x00000071011BA9FC,_ZN4ksys3act8BaseProc17x00000071011ba9fcEv,0xBC,_ZN4ksys3act8BaseProc17x00000071011ba9fcEv
|
||||||
0x00000071011baab8,ActorBase::setProcStateFlag,124,
|
0x00000071011baab8,ActorBase::setProcStateFlag,124,
|
||||||
0x00000071011bab34,ActorBase::acquire,196,
|
0x00000071011bab34,ActorBase::acquire,196,
|
||||||
0x00000071011babf8,ActorBase::release,36,
|
0x00000071011babf8,ActorBase::release,36,_ZN4ksys3act8BaseProc7releaseEv
|
||||||
0x00000071011bac1c,ActorBase::doDelete,244,
|
0x00000071011bac1c,ActorBase::doDelete,244,
|
||||||
0x00000071011bad10,ActorBase::preDelete,164,_ZN4ksys3act8BaseProc11doPreDeleteEPb
|
0x00000071011bad10,ActorBase::preDelete,164,_ZN4ksys3act8BaseProc11doPreDeleteEPb
|
||||||
0x00000071011badb4,ActorBase::setJobPriority,288,
|
0x00000071011badb4,ActorBase::setJobPriority,288,
|
||||||
0x00000071011baed4,ActorBase::setJobPriority2,288,
|
0x00000071011baed4,ActorBase::setJobPriority2,288,
|
||||||
0x00000071011baff4,ActorBase::sleep,308,
|
0x00000071011baff4,ActorBase::sleep,308,
|
||||||
0x00000071011bb128,ActorBase::wakeUp,484,
|
0x00000071011bb128,ActorBase::wakeUp,484,
|
||||||
0x00000071011bb30c,ActorBase::getConnectedCalcChild,32,
|
0x00000071011bb30c,ActorBase::getConnectedCalcChild,32,_ZNK4ksys3act8BaseProc21getConnectedCalcChildEv
|
||||||
0x00000071011bb32c,ActorBase::setConnectedCalcChild,248,
|
0x00000071011bb32c,ActorBase::setConnectedCalcChild,248,_ZN4ksys3act8BaseProc21setConnectedCalcChildEPS1_b
|
||||||
0x00000071011bb424,ActorBase::setConnectedCalcParent,248,
|
0x00000071011bb424,ActorBase::setConnectedCalcParent,248,_ZN4ksys3act8BaseProc22setConnectedCalcParentEPS1_b
|
||||||
0x00000071011bb51c,ActorBase::resetConnectedCalcChild,188,
|
0x00000071011bb51c,ActorBase::resetConnectedCalcChild,188,_ZN4ksys3act8BaseProc23resetConnectedCalcChildEb
|
||||||
0x00000071011bb5d8,ActorBase::resetConnectedCalcParent,188,
|
0x00000071011bb5d8,ActorBase::resetConnectedCalcParent,188,_ZN4ksys3act8BaseProc24resetConnectedCalcParentEb
|
||||||
0x00000071011bb6a0,ActorBase::setCreatePriorityState2,12,
|
0x00000071011bb6a0,ActorBase::setCreatePriorityState2,12,
|
||||||
0x00000071011bb6ac,ActorBase::rtti1,112,_ZNK4ksys3act8BaseProc27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
0x00000071011bb6ac,ActorBase::rtti1,112,_ZNK4ksys3act8BaseProc27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071011bb71c,ActorBase::rtti2,92,_ZNK4ksys3act8BaseProc18getRuntimeTypeInfoEv
|
0x00000071011bb71c,ActorBase::rtti2,92,_ZNK4ksys3act8BaseProc18getRuntimeTypeInfoEv
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -66,7 +66,7 @@ bool BaseProc::deleteLater(DeleteReason reason) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BaseProcMgr::instance()->addToUpdateStateList(*this))
|
if (!BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestDelete))
|
||||||
onDeleteRequested_(reason);
|
onDeleteRequested_(reason);
|
||||||
|
|
||||||
if (!is_high_prio)
|
if (!is_high_prio)
|
||||||
|
@ -425,4 +425,83 @@ bool BaseProc::x00000071011ba9fc() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseProc::release() {
|
||||||
|
if (mRefCount >= 1)
|
||||||
|
mRefCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseProc* BaseProc::getConnectedCalcParent() const {
|
||||||
|
if (mConnectedCalcParent == nullptr || mConnectedCalcParent->mState == State::Delete)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return mConnectedCalcParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BaseProc::setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete) {
|
||||||
|
if (parent == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (isDeletedOrDeleting() || parent->isDeletedOrDeleting())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestSetParent))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
mConnectedCalcParentNew = parent;
|
||||||
|
|
||||||
|
mFlags.change(Flags::DeleteParentOnDelete, delete_parent_on_delete);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseProc::resetConnectedCalcParent(bool clear_existing_set_request) {
|
||||||
|
if (isDeletedOrDeleting())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (clear_existing_set_request) {
|
||||||
|
mStateFlags.reset(StateFlags::RequestSetParent);
|
||||||
|
mConnectedCalcParentNew = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mConnectedCalcParent)
|
||||||
|
BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestResetParent);
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseProc* BaseProc::getConnectedCalcChild() const {
|
||||||
|
if (!mConnectedCalcChild || mConnectedCalcChild->mState == State::Delete)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return mConnectedCalcChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BaseProc::setConnectedCalcChild(BaseProc* child, bool delete_child_on_delete) {
|
||||||
|
if (child == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (isDeletedOrDeleting() || child->isDeletedOrDeleting())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestSetChild))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
mConnectedCalcChildNew = child;
|
||||||
|
|
||||||
|
mFlags.change(Flags::DeleteChildOnDelete, delete_child_on_delete);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseProc::resetConnectedCalcChild(bool clear_existing_set_request) {
|
||||||
|
if (isDeletedOrDeleting())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (clear_existing_set_request) {
|
||||||
|
mStateFlags.reset(StateFlags::RequestSetChild);
|
||||||
|
mConnectedCalcChildNew = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mConnectedCalcChild)
|
||||||
|
BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestResetChild);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ksys::act
|
} // namespace ksys::act
|
||||||
|
|
|
@ -107,11 +107,11 @@ public:
|
||||||
void release();
|
void release();
|
||||||
|
|
||||||
BaseProc* getConnectedCalcParent() const;
|
BaseProc* getConnectedCalcParent() const;
|
||||||
void setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete);
|
bool setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete);
|
||||||
void resetConnectedCalcParent(bool clear_existing_set_request);
|
void resetConnectedCalcParent(bool clear_existing_set_request);
|
||||||
|
|
||||||
BaseProc* getConnectedCalcChild() const;
|
BaseProc* getConnectedCalcChild() const;
|
||||||
void setConnectedCalcChild(BaseProc* child, bool delete_child_on_delete);
|
bool setConnectedCalcChild(BaseProc* child, bool delete_child_on_delete);
|
||||||
void resetConnectedCalcChild(bool clear_existing_set_request);
|
void resetConnectedCalcChild(bool clear_existing_set_request);
|
||||||
|
|
||||||
bool isSpecialJobType(JobType type);
|
bool isSpecialJobType(JobType type);
|
||||||
|
@ -282,7 +282,7 @@ protected:
|
||||||
sead::ListNode mDeleteListNode;
|
sead::ListNode mDeleteListNode;
|
||||||
BaseProcMapNode mMapNode{this};
|
BaseProcMapNode mMapNode{this};
|
||||||
BaseProcUnit* mProcUnit = nullptr;
|
BaseProcUnit* mProcUnit = nullptr;
|
||||||
sead::Atomic<u32> mRefCount = 0;
|
sead::Atomic<s32> mRefCount = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void unlinkProcUnit_();
|
void unlinkProcUnit_();
|
||||||
|
|
|
@ -69,7 +69,7 @@ public:
|
||||||
void unregisterProc(BaseProc& proc);
|
void unregisterProc(BaseProc& proc);
|
||||||
|
|
||||||
void addToPreDeleteList(BaseProc& proc);
|
void addToPreDeleteList(BaseProc& proc);
|
||||||
bool addToUpdateStateList(BaseProc& proc);
|
bool addToUpdateStateList(BaseProc& proc, BaseProc::StateFlags flags);
|
||||||
void eraseFromPreDeleteList(BaseProc& proc);
|
void eraseFromPreDeleteList(BaseProc& proc);
|
||||||
void eraseFromUpdateStateList(BaseProc& proc);
|
void eraseFromUpdateStateList(BaseProc& proc);
|
||||||
void processPreDeleteList();
|
void processPreDeleteList();
|
||||||
|
@ -210,11 +210,10 @@ private:
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(BaseProcMgr, 0x21a0);
|
KSYS_CHECK_SIZE_NX150(BaseProcMgr, 0x21a0);
|
||||||
|
|
||||||
inline bool BaseProcMgr::addToUpdateStateList(BaseProc& proc) {
|
inline bool BaseProcMgr::addToUpdateStateList(BaseProc& proc, BaseProc::StateFlags flag) {
|
||||||
auto lock = sead::makeScopedLock(mProcUpdateStateListCS);
|
auto lock = sead::makeScopedLock(mProcUpdateStateListCS);
|
||||||
doAddToUpdateStateList_(proc);
|
doAddToUpdateStateList_(proc);
|
||||||
return (proc.mStateFlags.set(BaseProc::StateFlags::RequestDelete) &
|
return (proc.mStateFlags.set(flag) & u32(flag)) != 0;
|
||||||
u32(BaseProc::StateFlags::RequestDelete)) != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ksys::act
|
} // namespace ksys::act
|
||||||
|
|
Loading…
Reference in New Issue