summaryrefslogtreecommitdiffstats
path: root/sigencore
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-28 00:25:39 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-28 00:25:39 -0400
commitf4bfca3c40237d0d6eb0c875b036e2cfd48cac11 (patch)
tree35cfb453142bc024f2bcc678a6f5ccac16c4964e /sigencore
parentd98346aad61959c40e04adfc4362a4dc4d8324ad (diff)
downloadsigen-f4bfca3c40237d0d6eb0c875b036e2cfd48cac11.tar.gz
sigen-f4bfca3c40237d0d6eb0c875b036e2cfd48cac11.tar.xz
sigen-f4bfca3c40237d0d6eb0c875b036e2cfd48cac11.zip
Add PlayerPlugin interface
Diffstat (limited to 'sigencore')
-rw-r--r--sigencore/plugins/CMakeLists.txt3
-rw-r--r--sigencore/plugins/PlayerPlugin.cpp80
-rw-r--r--sigencore/plugins/PlayerPlugin.h71
-rw-r--r--sigencore/plugins/PlayerPlugin_p.h49
4 files changed, 203 insertions, 0 deletions
diff --git a/sigencore/plugins/CMakeLists.txt b/sigencore/plugins/CMakeLists.txt
index c945d964..6decda94 100644
--- a/sigencore/plugins/CMakeLists.txt
+++ b/sigencore/plugins/CMakeLists.txt
@@ -3,17 +3,20 @@ project(plugins)
set(sigencoreplugins_HEADERS
ArenaPlugin.h
CanvasPlugin.h
+ PlayerPlugin.h
PluginBase.h
Global.h
)
set(sigencoreplugins_SRCS
ArenaPlugin.cpp
CanvasPlugin.cpp
+ PlayerPlugin.cpp
PluginBase.cpp
)
set(sigencoreplugins_SERVICETYPES
sigen_arena.desktop
sigen_canvas.desktop
+ sigen_player.desktop
)
kde4_add_library(sigencoreplugins
diff --git a/sigencore/plugins/PlayerPlugin.cpp b/sigencore/plugins/PlayerPlugin.cpp
new file mode 100644
index 00000000..d9f577a0
--- /dev/null
+++ b/sigencore/plugins/PlayerPlugin.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2009 Ben Boeckel <MathStuf@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Header include
+#include "PlayerPlugin.h"
+#include "PlayerPlugin_p.h"
+
+// Sigencore includes
+#include <sigencore/Player.h>
+
+// Qt includes
+#include <QtCore/QSignalMapper>
+
+using namespace Sigscript;
+using namespace Sigencore;
+using namespace Sigencore::Plugins;
+
+PlayerPlugin::PlayerPlugin(QObject* parent, const QVariantList& args) :
+ PluginBase(parent, args),
+ d(new Private(this, args))
+{
+}
+
+PlayerPlugin::~PlayerPlugin()
+{
+ delete d;
+}
+
+Player* PlayerPlugin::getPlayer(const QString& name, GameWrapper* game, Config* parent)
+{
+ Player* player = createPlayer(name, game, parent);
+ if (player)
+ {
+ ++m_count;
+ d->addPlayer(player);
+ }
+ return player;
+}
+
+PlayerPlugin::Private::Private(PlayerPlugin* plugin, const QVariantList& args) :
+ q(plugin),
+ m_mapper(new QSignalMapper(this))
+{
+ Q_UNUSED(args)
+ connect(m_mapper, SIGNAL(mapped(QObject*)), this, SLOT(cleanupPlayer(QObject*)));
+}
+
+PlayerPlugin::Private::~Private()
+{
+}
+
+void PlayerPlugin::Private::addPlayer(Player* player)
+{
+ connect(player, SIGNAL(cleanupPlayer()), m_mapper, SLOT(map()));
+ m_mapper->setMapping(player, player);
+}
+
+void PlayerPlugin::Private::cleanupPlayer(QObject* object)
+{
+ Player* player = qobject_cast<Player*>(object);
+ if (player)
+ {
+ q->cleanupPlayer(player);
+ --q->m_count;
+ }
+}
diff --git a/sigencore/plugins/PlayerPlugin.h b/sigencore/plugins/PlayerPlugin.h
new file mode 100644
index 00000000..0a9ca054
--- /dev/null
+++ b/sigencore/plugins/PlayerPlugin.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2009 Ben Boeckel <MathStuf@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SIGENCOREPLUGINS_PLAYERPLUGIN
+#define SIGENCOREPLUGINS_PLAYERPLUGIN
+
+// Plugin includes
+#include "PluginBase.h"
+
+// KDE includes
+#include <KPluginFactory>
+
+// Forward declarations
+namespace Sigscript
+{
+class Config;
+class GameWrapper;
+}
+
+namespace Sigencore
+{
+class Player;
+
+namespace Plugins
+{
+class SIGENCOREPLUGINS_EXPORT PlayerPlugin : public PluginBase
+{
+ Q_OBJECT
+
+ public:
+ PlayerPlugin(QObject* parent, const QVariantList& args);
+ virtual ~PlayerPlugin();
+
+ Player* getPlayer(const QString& name, Sigscript::GameWrapper* game, Sigscript::Config* parent);
+
+ virtual QStringList classList() const = 0;
+ virtual QString description(const QString& name) const = 0;
+ virtual QIcon icon(const QString& name) = 0;
+ protected:
+ virtual Player* createPlayer(const QString& name, Sigscript::GameWrapper* game, Sigscript::Config* parent) = 0;
+ protected slots:
+ virtual void cleanupPlayer(Sigencore::Player* player) = 0;
+ private:
+ class Private;
+ Private* const d;
+};
+}
+}
+
+#define SIGEN_PLAYER_PLUGIN(type, name) \
+ K_PLUGIN_FACTORY(PlayerFactory, registerPlugin<type>();) \
+ K_EXPORT_PLUGIN(PlayerFactory(name))
+#define SIGEN_PLAYER_PLUGIN_VERSION(type, name, version) \
+ SIGEN_PLAYER_PLUGIN(type, name) \
+ K_EXPORT_PLUGIN_VERSION(version)
+
+#endif
diff --git a/sigencore/plugins/PlayerPlugin_p.h b/sigencore/plugins/PlayerPlugin_p.h
new file mode 100644
index 00000000..33888984
--- /dev/null
+++ b/sigencore/plugins/PlayerPlugin_p.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2009 Ben Boeckel <MathStuf@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SIGENCOREPLUGINS_PLAYERPLUGIN_P
+#define SIGENCOREPLUGINS_PLAYERPLUGIN_P
+
+// Header include
+#include "PlayerPlugin.h"
+
+// Forward declarations
+class QSignalMapper;
+
+namespace Sigencore
+{
+namespace Plugins
+{
+class SIGENCOREPLUGINS_NO_EXPORT PlayerPlugin::Private : public QObject
+{
+ Q_OBJECT
+
+ public:
+ Private(PlayerPlugin* plugin, const QVariantList& args);
+ ~Private();
+
+ void addPlayer(Player* player);
+ private:
+ PlayerPlugin* const q;
+ QSignalMapper* m_mapper;
+ private slots:
+ void cleanupPlayer(QObject* object);
+};
+}
+}
+
+#endif