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