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; } }
EditorMainWindow::EditorMainWindow(EditorApplication* app, QWidget* parent) : QMainWindow(parent) , mApplication(app) , mEntityTreeDock(NULL) , mSpawnersDock(NULL) , mPropertyEditorDock(NULL) { mUpdateTimer = new QTimer(this); connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(EmitQueuedMessages())); mUpdateTimer->start(100); // register local message pump to receive messages from game message pump dtEntity::MessageFunctor functor(&mMessagePump, &dtEntity::MessagePump::EnqueueMessage); dtEntity::EntityManager& em = mApplication->GetEntityManager(); em.RegisterForMessages(dtEntity::ToolsUpdatedMessage::TYPE, functor); em.RegisterForMessages(dtEntity::SceneLoadedMessage::TYPE, functor); em.RegisterForMessages(dtEntity::SceneUnloadedMessage::TYPE, functor); em.RegisterForMessages(dtEntity::MapLoadedMessage::TYPE, functor); em.RegisterForMessages(dtEntity::MapUnloadedMessage::TYPE, functor); mMessagePump.RegisterForMessages(dtEntity::ToolsUpdatedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnToolsUpdated)); mMessagePump.RegisterForMessages(dtEntity::SceneLoadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnSceneLoaded)); mMessagePump.RegisterForMessages(dtEntity::SceneUnloadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnSceneUnloaded)); mMessagePump.RegisterForMessages(dtEntity::MapLoadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnMapLoaded)); mMessagePump.RegisterForMessages(dtEntity::MapUnloadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnMapUnloaded)); setMinimumSize(800, 600); layout()->setContentsMargins(0, 0, 0, 0); setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowTabbedDocks | QMainWindow::VerticalTabs); setWindowTitle("dtEntity Editor"); createActions(); createMenus(); createToolBars(); CreateDockWidgets(); connect(this, SIGNAL(LoadScene(const QString&)), app, SLOT(LoadScene(const QString&))); connect(this, SIGNAL(NewScene()), app, SLOT(NewScene())); connect(this, SIGNAL(SaveScene(QString)), app, SLOT(SaveScene(QString))); }