diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-05 11:30:35 -0500 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-05 11:30:35 -0500 |
commit | ca6b3a8905951e3d41e890b95671ab952315fa09 (patch) | |
tree | 2ee475605a02060b14fda802a792977ab6ba3037 /sigencore | |
parent | f9fc33aba5ff9e1c8b9b393223c711516be0384e (diff) | |
download | sigen-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.cpp | 123 | ||||
-rw-r--r-- | sigencore/plugins/arenas/standard/TurnArena.h | 13 |
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(); |