summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-08-21 15:18:54 -0700
committerLéo Lam <leo@leolam.fr>2020-08-22 10:17:58 +0200
commita49164a85fa68175eba66cb1c49d13641dc5f32e (patch)
tree227f13cb1487390d446f2a4a8f5dfda4e438b9f0 /src/KingSystem/ActorSystem
parentff99d7763572fc5b463bc8ece39a2c40e90deaf0 (diff)
BaseProc child connection functions
Diffstat (limited to 'src/KingSystem/ActorSystem')
-rw-r--r--src/KingSystem/ActorSystem/actBaseProc.cpp50
-rw-r--r--src/KingSystem/ActorSystem/actBaseProc.h2
2 files changed, 51 insertions, 1 deletions
diff --git a/src/KingSystem/ActorSystem/actBaseProc.cpp b/src/KingSystem/ActorSystem/actBaseProc.cpp
index 79e2cc47..2748f667 100644
--- a/src/KingSystem/ActorSystem/actBaseProc.cpp
+++ b/src/KingSystem/ActorSystem/actBaseProc.cpp
@@ -449,4 +449,54 @@ bool BaseProc::setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_de
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
diff --git a/src/KingSystem/ActorSystem/actBaseProc.h b/src/KingSystem/ActorSystem/actBaseProc.h
index 41393c0b..4d2675f0 100644
--- a/src/KingSystem/ActorSystem/actBaseProc.h
+++ b/src/KingSystem/ActorSystem/actBaseProc.h
@@ -111,7 +111,7 @@ public:
void resetConnectedCalcParent(bool clear_existing_set_request);
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);
bool isSpecialJobType(JobType type);