summaryrefslogtreecommitdiffstats
path: root/src/logic/manager.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2015-09-06 13:19:56 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-10-13 07:15:08 +0000
commit4888c951fca43515aa49919a5405baa16f1cff3d (patch)
tree1f77324bfef06e1f2ecc2dcaa804f45368f4cb9c /src/logic/manager.cpp
parent07529a1c316815c8201d84b5eca8eda026facd42 (diff)
Shorten names of classes in Logic namespace
The Logic prefix of the old class names is now redundant, remove it. Change-Id: Ic68ae529e83bd0e571e333a66dfec8339cda3c14 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/logic/manager.cpp')
-rw-r--r--src/logic/manager.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/logic/manager.cpp b/src/logic/manager.cpp
new file mode 100644
index 000000000..7802fc0de
--- /dev/null
+++ b/src/logic/manager.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "manager_p.h"
+#include "qlogicaspect.h"
+#include <Qt3DLogic/private/executor_p.h>
+#include <Qt3DLogic/private/managers_p.h>
+#include <QtCore/qcoreapplication.h>
+
+#include <QDebug>
+#include <QThread>
+
+QT_BEGIN_NAMESPACE
+
+namespace Qt3DLogic {
+namespace Logic {
+
+Manager::Manager()
+ : m_logicHandlerManager(new HandlerManager)
+ , m_semaphore(1)
+{
+ m_semaphore.acquire();
+}
+
+Manager::~Manager()
+{
+}
+
+void Manager::setExecutor(Executor *executor)
+{
+ m_executor = executor;
+ if (m_executor)
+ m_executor->setSemephore(&m_semaphore);
+}
+
+void Manager::appendHandler(Handler *handler)
+{
+ HHandler handle = m_logicHandlerManager->lookupHandle(handler->peerUuid());
+ m_logicHandlers.append(handle);
+ m_logicComponentIds.append(handler->peerUuid());
+}
+
+void Manager::removeHandler(const Qt3D::QNodeId &id)
+{
+ HHandler handle = m_logicHandlerManager->lookupHandle(id);
+ m_logicComponentIds.removeAll(id);
+ m_logicHandlers.removeAll(handle);
+ m_logicHandlerManager->releaseResource(id);
+}
+
+void Manager::triggerLogicFrameUpdates()
+{
+ Q_ASSERT(m_executor);
+
+ // Don't use blocking queued connections to main thread if it is already
+ // in the process of shutting down as that will deadlock.
+ if (m_logicAspect->isShuttingDown())
+ return;
+
+ // Trigger the main thread to process logic frame updates for each
+ // logic component and then wait until done. The Executor will
+ // release the semaphore when it has completed its work.
+ m_executor->enqueueLogicFrameUpdates(m_logicComponentIds);
+ qApp->postEvent(m_executor, new FrameUpdateEvent);
+ m_semaphore.acquire();
+}
+
+} // namespace Logic
+} // namespace Qt3DLogic
+
+QT_END_NAMESPACE