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))); }
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; } }
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; }
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; } } } }
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; }