BaseProc::getConnectedCalcParent

BaseProc::setConnectedCalcParent
This commit is contained in:
notyouraveragehooman 2020-08-21 14:18:47 -07:00 committed by Léo Lam
parent fc306aa5f0
commit ff99d77635
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 31 additions and 8 deletions

View File

@ -89467,7 +89467,7 @@
0x00000071011ba200,ActorBase::x,112,
0x00000071011ba270,ActorBase::queueExtraJobPush,68,_ZN4ksys3act8BaseProc18queueExtraJobPush_ENS0_7JobTypeE
0x00000071011ba2b4,ActorBase::shouldSkipJobPush,144,
0x00000071011ba344,ActorBase::getConnectedCalcParent,32,
0x00000071011ba344,ActorBase::getConnectedCalcParent,32,_ZNK4ksys3act8BaseProc22getConnectedCalcParentEv
0x00000071011ba364,ActorBase::jobInvoked,564,
0x00000071011ba598,ActorBase::updateState,1076,_ZN4ksys3act8BaseProc18processStateUpdateEh!
0x00000071011ba9cc,ActorBase::afterUpdateState,48,_ZN4ksys3act8BaseProc17afterUpdateState_Ev
@ -89483,7 +89483,7 @@
0x00000071011bb128,ActorBase::wakeUp,484,
0x00000071011bb30c,ActorBase::getConnectedCalcChild,32,
0x00000071011bb32c,ActorBase::setConnectedCalcChild,248,
0x00000071011bb424,ActorBase::setConnectedCalcParent,248,
0x00000071011bb424,ActorBase::setConnectedCalcParent,248,_ZN4ksys3act8BaseProc22setConnectedCalcParentEPS1_b
0x00000071011bb51c,ActorBase::resetConnectedCalcChild,188,
0x00000071011bb5d8,ActorBase::resetConnectedCalcParent,188,
0x00000071011bb6a0,ActorBase::setCreatePriorityState2,12,

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

View File

@ -66,7 +66,7 @@ bool BaseProc::deleteLater(DeleteReason reason) {
}
}
if (!BaseProcMgr::instance()->addToUpdateStateList(*this))
if (!BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestDelete))
onDeleteRequested_(reason);
if (!is_high_prio)
@ -425,4 +425,28 @@ bool BaseProc::x00000071011ba9fc() {
return true;
}
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;
}
} // namespace ksys::act

View File

@ -107,7 +107,7 @@ public:
void release();
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);
BaseProc* getConnectedCalcChild() const;

View File

@ -69,7 +69,7 @@ public:
void unregisterProc(BaseProc& proc);
void addToPreDeleteList(BaseProc& proc);
bool addToUpdateStateList(BaseProc& proc);
bool addToUpdateStateList(BaseProc& proc, BaseProc::StateFlags flags);
void eraseFromPreDeleteList(BaseProc& proc);
void eraseFromUpdateStateList(BaseProc& proc);
void processPreDeleteList();
@ -210,11 +210,10 @@ private:
};
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);
doAddToUpdateStateList_(proc);
return (proc.mStateFlags.set(BaseProc::StateFlags::RequestDelete) &
u32(BaseProc::StateFlags::RequestDelete)) != 0;
return (proc.mStateFlags.set(flag) & u32(flag)) != 0;
}
} // namespace ksys::act