Пример #1
0
void MainWindow::ConnectNewDomain(Domain *newDomain)
{
	if (testDomain)
	{
		disconnect(testDomain, SIGNAL(Message(QString)), this, SLOT(displayOutput(QString)));
		disconnect(testDomain, SIGNAL(Instructions(QString)), ui->statusBar, SLOT(showMessage(QString)));
		disconnect(testDomain, SIGNAL(ToolFinishedDrawing()), ui->statusBar, SLOT(clearMessage()));
		disconnect(testDomain, SIGNAL(MouseX(float)), this, SLOT(showMouseX(float)));
		disconnect(testDomain, SIGNAL(MouseY(float)), this, SLOT(showMouseY(float)));
		disconnect(testDomain, SIGNAL(CircleToolStatsSet(float,float,float)), this, SLOT(showCircleStats(float,float,float)));
		disconnect(testDomain, SIGNAL(NumNodesDomain(int)), this, SLOT(showNumNodes(int)));
		disconnect(testDomain, SIGNAL(NumElementsDomain(int)), this, SLOT(showNumElements(int)));
		disconnect(testDomain, SIGNAL(NumNodesSelected(int)), this, SLOT(showNumSelectedNodes(int)));
		disconnect(testDomain, SIGNAL(NumElementsSelected(int)), this, SLOT(showNumSelectedElements(int)));
		disconnect(testDomain, SIGNAL(ToolFinishedDrawing()), glStatusBar, SLOT(clearMessage()));
		disconnect(testDomain, SIGNAL(EmitMessage(QString)), this, SLOT(displayOutput(QString)));
		disconnect(testDomain, SIGNAL(UndoAvailable(bool)), ui->undoButton, SLOT(setEnabled(bool)));
		disconnect(testDomain, SIGNAL(RedoAvailable(bool)), ui->redoButton, SLOT(setEnabled(bool)));
	}

	connect(newDomain, SIGNAL(Message(QString)), this, SLOT(displayOutput(QString)));
	connect(newDomain, SIGNAL(Instructions(QString)), ui->statusBar, SLOT(showMessage(QString)));
	connect(newDomain, SIGNAL(ToolFinishedDrawing()), ui->statusBar, SLOT(clearMessage()));
	connect(newDomain, SIGNAL(MouseX(float)), this, SLOT(showMouseX(float)));
	connect(newDomain, SIGNAL(MouseY(float)), this, SLOT(showMouseY(float)));
	connect(newDomain, SIGNAL(CircleToolStatsSet(float,float,float)), this, SLOT(showCircleStats(float,float,float)));
	connect(newDomain, SIGNAL(NumNodesDomain(int)), this, SLOT(showNumNodes(int)));
	connect(newDomain, SIGNAL(NumElementsDomain(int)), this, SLOT(showNumElements(int)));
	connect(newDomain, SIGNAL(NumNodesSelected(int)), this, SLOT(showNumSelectedNodes(int)));
	connect(newDomain, SIGNAL(NumElementsSelected(int)), this, SLOT(showNumSelectedElements(int)));
	connect(newDomain, SIGNAL(ToolFinishedDrawing()), glStatusBar, SLOT(clearMessage()));
	connect(newDomain, SIGNAL(EmitMessage(QString)), this, SLOT(displayOutput(QString)));
	connect(newDomain, SIGNAL(UndoAvailable(bool)), ui->undoButton, SLOT(setEnabled(bool)));
	connect(newDomain, SIGNAL(RedoAvailable(bool)), ui->redoButton, SLOT(setEnabled(bool)));
}
Пример #2
0
   EntityManager::~EntityManager() 
   {
      // send and delete all outstanding messages
      EmitQueuedMessages(FLT_MAX);
	  
      // notify all about shutdown, last chance to deregister
      StopSystemMessage msg;
      EmitMessage(msg);


      for(EntitySystemStore::iterator i = mEntitySystemStore.begin();
         i != mEntitySystemStore.end(); ++i)
      {
         i->second->OnRemoveFromEntityManager(*this);
      }
      // delete all entity objects
      while(HasEntities())
      {
         mEntities.erase(mEntities.begin());
      }

      for(EntitySystemStore::iterator i = mEntitySystemStore.begin();
         i != mEntitySystemStore.end(); ++i)
      {
         delete i->second;
      }
   }
Пример #3
0
   bool EntityManager::RemoveEntitySystem(EntitySystem& s)
   {
      ComponentType componentType = s.GetComponentType();
      if(!HasEntitySystem(componentType))
      {
         return false;
      }
      ComponentType baseType = s.GetBaseType();
      s.OnRemoveFromEntityManager(*this);
      EntitySystemRemovedMessage msg;
      msg.SetComponentType(componentType);
      msg.SetComponentTypeString(GetStringFromSID(componentType));
      EmitMessage(msg);
      mEntitySystemStore.erase(mEntitySystemStore.find(componentType));

      if(baseType != StringId())
      {
         std::pair<TypeHierarchyMap::iterator, TypeHierarchyMap::iterator> keyRange;
         keyRange = mTypeHierarchy.equal_range(baseType);

         TypeHierarchyMap::iterator it = keyRange.first;
         while(it != keyRange.second)
         {
            if(it->second == componentType)
            {
               mTypeHierarchy.erase(it);
               break;
            }
            ++it;
         }
      }
      return true;
   }
Пример #4
0
   void MessagePump::EmitQueuedMessages(double now)
   {
      
      while(!mMessageQueue.Empty())
      {
         const Message* entry = mMessageQueue.Pop();
         EmitMessage(*entry);
         delete entry;
      }

      while(!mFutureMessageQueue.Empty())
      {
         FutureMessageEntry entry = mFutureMessageQueue.Pop();
         mFutureMessages.push_back(entry);
      }

      if(!mFutureMessages.empty())
      {
         std::list<FutureMessageEntry>::iterator i = mFutureMessages.begin();
         while(i != mFutureMessages.end())
         {         
            FutureMessageEntry entry = *i;
            
            if(entry.mTimeToPost <= now)
            {
               EmitMessage(*entry.mMessage);
               delete entry.mMessage;
               i = mFutureMessages.erase(i);               
            }
            else
            {
               ++i;
            }
         }
      }  
   }
Пример #5
0
   bool EntityManager::AddEntitySystem(EntitySystem& s)
   {
      if(HasEntitySystem(s.GetComponentType()))
      {
         LOG_ERROR("Entity system already added! Type: " << GetStringFromSID(s.GetComponentType()));
         return false;
      }
      mEntitySystemStore[s.GetComponentType()] = &s;

      if(s.GetBaseType() != StringId())
      {
         mTypeHierarchy.insert(std::make_pair(s.GetBaseType(), s.GetComponentType()));
      }

      s.OnAddedToEntityManager(*this);
      EntitySystemAddedMessage msg;
      msg.SetComponentType(s.GetComponentType());
      msg.SetComponentTypeString(GetStringFromSID(s.GetComponentType()));
      EmitMessage(msg);
      return true;
   }