summaryrefslogtreecommitdiffstats
path: root/sigencore
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-05 11:30:35 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-03-05 11:30:35 -0500
commitca6b3a8905951e3d41e890b95671ab952315fa09 (patch)
tree2ee475605a02060b14fda802a792977ab6ba3037 /sigencore
parentf9fc33aba5ff9e1c8b9b393223c711516be0384e (diff)
downloadsigen-ca6b3a8905951e3d41e890b95671ab952315fa09.tar.gz
sigen-ca6b3a8905951e3d41e890b95671ab952315fa09.tar.xz
sigen-ca6b3a8905951e3d41e890b95671ab952315fa09.zip
Fix up some of TurnArena
Diffstat (limited to 'sigencore')
-rw-r--r--sigencore/plugins/arenas/standard/TurnArena.cpp123
-rw-r--r--sigencore/plugins/arenas/standard/TurnArena.h13
2 files changed, 94 insertions, 42 deletions
diff --git a/sigencore/plugins/arenas/standard/TurnArena.cpp b/sigencore/plugins/arenas/standard/TurnArena.cpp
index 749bfc41..6c6b7ef6 100644
--- a/sigencore/plugins/arenas/standard/TurnArena.cpp
+++ b/sigencore/plugins/arenas/standard/TurnArena.cpp
@@ -18,22 +18,17 @@
// Header include
#include "TurnArena.h"
-// Sigcore includes
-#include <sigcore/Fraction.h>
-
// Sigscript includes
-#include <sigscript/MoveWrapper.h>
#include <sigscript/GameWrapper.h>
-
-// KDE includes
-#include <kross/core/action.h>
-#include <kross/core/actioncollection.h>
+#include <sigscript/MoveWrapper.h>
// Qt includes
#include <QtAlgorithms>
#include <QtCore/QtConcurrentMap>
#include <QtCore/QFuture>
+#include <QtCore/QFutureWatcher>
#include <QtCore/QTimer>
+#include <QtGui/QIcon>
using namespace Sigcore;
using namespace Sigscript;
@@ -59,37 +54,85 @@ bool sortActions(const TeamMember::RequestedAction& reqAction1, const TeamMember
return false;
}
+TurnArena::TurnArena(GameWrapper* sigmod, Config* parent) :
+ Arena(sigmod, parent)
+{
+ setupBattle();
+}
+
QString TurnArena::name()
{
return "sigen_arena_name";
}
-TurnArena::TurnArena(GameWrapper* sigmod, Config* parent) :
- Arena(sigmod, parent),
- m_watcher(new QFutureWatcher<TeamMember::RequestedAction>(this)),
- m_timer(new QTimer(this))
+QString TurnArena::description()
{
- setupBattle();
- m_timer->setSingleShot(true);
- connect(m_timer, SIGNAL(timeout()), m_watcher, SLOT(cancel()));
+ return "An arena where creatures act in order of their speed (unless move priority takes precedence)";
+}
+
+QIcon TurnArena::icon()
+{
+ // TODO
+ return QIcon();
+}
+
+TeamMember::Action TurnArena::requestAction(TeamMember* teamMember) const
+{
+ // TODO
+}
+
+bool TurnArena::isTeamAllowed(Sigencore::Team* team)
+{
+ Q_UNUSED(team)
+ // TODO: Use rules format here?
+ return true;
+}
+
+void TurnArena::handleAction(TeamMember* teamMember, TeamMember::Action action)
+{
+ Arena::handleAction(teamMember, action);
}
-/*
void TurnArena::setupBattle()
{
- // TODO: setup everything for the arena to do with the turns
+ connect(this, SIGNAL(battleStarted()), SLOT(processRound()));
Arena::setupBattle();
}
+void TurnArena::distributeWinnings()
+{
+ Arena::distributeWinnings();
+}
+
+void TurnArena::checkForLosers()
+{
+ Arena::checkForLosers();
+}
+
+void TurnArena::registerScript(const Script& script)
+{
+ Arena::registerScript(script);
+}
+
+void TurnArena::cleanUp()
+{
+ Arena::cleanUp();
+}
+
void TurnArena::processRound()
{
emit(roundAboutToStart());
- emit(roundStart());
- QFuture<TeamMember::RequestedAction> reqActions = QtConcurrent::mapped(active(), &requestDecision);
- m_watcher->setFuture(reqActions);
- m_timer->start(120000);
+ emit(roundStarted());
+ QFutureWatcher<TeamMember::RequestedAction>* watcher = new QFutureWatcher<TeamMember::RequestedAction>;
+ QTimer* timer = new QTimer;
+ int timeout = 120000;
+ valueOfType("round-timeout", &timeout);
+ connect(timer, SIGNAL(timeout()), watcher, SLOT(cancel()));
+ QFuture<TeamMember::RequestedAction> reqActions = QtConcurrent::mapped(active(Fighters), &requestDecision);
+ watcher->setFuture(reqActions);
+ timer->start(timeout);
reqActions.waitForFinished();
- m_timer->stop();
+ timer->stop();
QList<TeamMember::RequestedAction> actions = reqActions.results();
qStableSort(actions.begin(), actions.end(), sortActions);
for (int i = 1; i < actions.size(); ++i)
@@ -97,19 +140,20 @@ void TurnArena::processRound()
TeamMember::Action action = actions[i].second;
if (action.first == TeamMember::Attack)
{
- MoveWrapper* move = sigmod()->move(action.second.first.toInt());
- const Sigcore::Script script = move->priorityScript();
- if (!script.script().isEmpty())
- {
- Kross::Action* kaction = new Kross::Action(m_actions, QUuid::createUuid().toString());
- kaction->setInterpreter(script.interpreter());
- kaction->setCode(script.script().toUtf8());
- kaction->addObject(this, "arena");
- kaction->addObject(actions[i].first, "user");
- for (int j = 0; j < i; ++j)
- kaction->addObject(actions[j].first, QString("fighter%1").arg(j));
- kaction->trigger();
- }
+ MoveWrapper* move = m_game->move(action.second.first.toInt());
+ const Script script = move->priorityScript();
+ // TODO
+// if (!script.script().isEmpty())
+// {
+// Kross::Action* kaction = new Kross::Action(m_actions, QUuid::createUuid().toString());
+// kaction->setInterpreter(script.interpreter());
+// kaction->setCode(script.script().toUtf8());
+// kaction->addObject(this, "arena");
+// kaction->addObject(actions[i].first, "user");
+// for (int j = 0; j < i; ++j)
+// kaction->addObject(actions[j].first, QString("fighter%1").arg(j));
+// kaction->trigger();
+// }
}
}
qStableSort(actions.begin(), actions.end(), sortActions);
@@ -119,8 +163,9 @@ void TurnArena::processRound()
handleAction(action.first, action.second);
}
emit(roundAboutToEnd());
- emit(roundEnd());
- if (!isOver())
- processRound();
+ emit(roundEnded());
+ delete watcher;
+ delete timer;
+ // TODO: Check if there is anyone left to fight
+ processRound();
}
-*/
diff --git a/sigencore/plugins/arenas/standard/TurnArena.h b/sigencore/plugins/arenas/standard/TurnArena.h
index 7d751d73..2c86d8bc 100644
--- a/sigencore/plugins/arenas/standard/TurnArena.h
+++ b/sigencore/plugins/arenas/standard/TurnArena.h
@@ -28,12 +28,17 @@ class TurnArena : public Sigencore::Arena
public:
TurnArena(Sigscript::GameWrapper* game, Sigscript::Config* parent);
- Q_SCRIPTABLE virtual Sigencore::TeamMember::Action requestAction(Sigencore::TeamMember* teamMember) const = 0;
- Q_SCRIPTABLE virtual bool isTeamAllowed(Sigencore::Team* team) = 0;
-
static QString name();
static QString description();
static QIcon icon();
+
+ Q_SCRIPTABLE virtual Sigencore::TeamMember::Action requestAction(Sigencore::TeamMember* teamMember) const;
+ Q_SCRIPTABLE virtual bool isTeamAllowed(Sigencore::Team* team);
+ signals:
+ void roundAboutToStart();
+ void roundStarted();
+ void roundEnded();
+ void roundAboutToEnd();
protected:
virtual void handleAction(Sigencore::TeamMember* teamMember, Sigencore::TeamMember::Action action);
@@ -42,6 +47,8 @@ class TurnArena : public Sigencore::Arena
virtual void distributeWinnings();
virtual void checkForLosers();
protected slots:
+ void processRound();
+
virtual void registerScript(const Sigcore::Script& script);
virtual void cleanUp();