Starting new VN Structure

This commit is contained in:
2023-04-18 09:55:11 -07:00
parent 60a5a98ec5
commit 6d86fc10bc
72 changed files with 803 additions and 1761 deletions

View File

@ -44,6 +44,36 @@ namespace Dawn {
private:
std::vector<IStateEvent*> eventsSubscribed;
std::vector<IStateOwnerEventLegacy*> eventLegacyBridge;
protected:
/**
* Removes all currently subscribed effects and events.
*/
void unsubscribeAllEvents() {
auto providers = this->_stateProviderListeners;
auto itProvider = providers.begin();
while(itProvider != providers.end()) {
(*itProvider)();
++itProvider;
}
auto it = this->eventsSubscribed.begin();
while(it != this->eventsSubscribed.end()) {
(*it)->_stateOwnerDestroyed(this);
++it;
}
auto itBridge = this->eventLegacyBridge.begin();
while(itBridge != this->eventLegacyBridge.end()) {
(*itBridge)->removeListener();
delete *itBridge;
++itBridge;
}
this->_stateProviderListeners.clear();
this->eventsSubscribed.clear();
this->eventLegacyBridge.clear();
}
public:
std::vector<std::function<void()>> _stateProviderListeners;
@ -123,7 +153,11 @@ namespace Dawn {
auto itProp = props.begin();
while(itProp != props.end()) {
auto property = *itProp;
if(property->owner == nullptr) { property->owner = this; } else { assertTrue(property->owner == this); }
if(property->owner == nullptr) {
property->owner = this;
} else {
assertTrue(property->owner == this);
}
property->_effectListners.push_back(fn);
++itProp;
}
@ -230,25 +264,7 @@ namespace Dawn {
* useEffects or useEvents.
*/
virtual ~StateOwner() {
auto providers = this->_stateProviderListeners;
auto itProvider = providers.begin();
while(itProvider != providers.end()) {
(*itProvider)();
++itProvider;
}
auto it = this->eventsSubscribed.begin();
while(it != this->eventsSubscribed.end()) {
(*it)->_stateOwnerDestroyed(this);
++it;
}
auto itBridge = this->eventLegacyBridge.begin();
while(itBridge != this->eventLegacyBridge.end()) {
(*itBridge)->removeListener();
delete *itBridge;
++itBridge;
}
this->unsubscribeAllEvents();
}
};
}