Starting new VN Structure
This commit is contained in:
@ -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();
|
||||
}
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user