diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-05 10:32:27 -0500 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-05 10:32:27 -0500 |
| commit | 1be72ce76f243027dafcd7eefe60c6ff14cd9464 (patch) | |
| tree | fffd47287cdd1ce69197f2eb557d8ec538b2aa68 /sigbattle | |
| parent | b6277d85e51d1e1e20bbd35579ec41031ef1f491 (diff) | |
| download | sigen-1be72ce76f243027dafcd7eefe60c6ff14cd9464.tar.gz sigen-1be72ce76f243027dafcd7eefe60c6ff14cd9464.tar.xz sigen-1be72ce76f243027dafcd7eefe60c6ff14cd9464.zip | |
Move TurnArena to plugin for default arenas
Diffstat (limited to 'sigbattle')
| -rw-r--r-- | sigbattle/TurnArena.cpp | 115 | ||||
| -rw-r--r-- | sigbattle/TurnArena.h | 59 |
2 files changed, 0 insertions, 174 deletions
diff --git a/sigbattle/TurnArena.cpp b/sigbattle/TurnArena.cpp deleted file mode 100644 index 2d006011..00000000 --- a/sigbattle/TurnArena.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2008 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 "TurnArena.h" - -// Sigcore includes -#include "../sigcore/Fraction.h" - -// Sigscript includes -#include "../sigscript/MoveWrapper.h" -#include "../sigscript/SigmodWrapper.h" - -// KDE includes -#include <kross/core/action.h> -#include <kross/core/actioncollection.h> - -// Qt includes -#include <QtAlgorithms> -#include <QtCore/QtConcurrentMap> -#include <QtCore/QFuture> -#include <QtCore/QTimer> - -bool Sigbattle::sortActions(const TeamMember::RequestedAction& reqAction1, const TeamMember::RequestedAction& reqAction2) -{ - TeamMember::Action action1 = reqAction1.second.isFinished() ? reqAction1.second : TeamMember::Action(TeamMember::Timeout, TeamMember::ActionData()); - TeamMember::Action action2 = reqAction2.second.isFinished() ? reqAction2.second : TeamMember::Action(TeamMember::Timeout, TeamMember::ActionData()); - const int priority1 = actionPriority(reqAction1.first, action1); - const int priority2 = actionPriority(reqAction1.first, action2); - if (priority1 < priority2) - return true; - else if (priority1 == priority2) - { - const int speed1 = reqAction1.first->statValue(Sigmod::ST_Speed); - const int speed2 = reqAction2.first->statValue(Sigmod::ST_Speed); - if (speed1 < speed2) - return true; - else if (speed1 == speed2) - return Sigcore::Fraction::poll(1, 2); - } - return false; -} - -Sigbattle::TurnArena::TurnArena(Sigscript::SigmodWrapper* sigmod, QSet<Player*> players, const bool isWild, Sigscript::Config* parent) : - Arena(sigmod, players, isWild, parent), - m_watcher(new QFutureWatcher<TeamMember::RequestedAction>(this)), - m_timer(new QTimer(this)) -{ - setupBattle(); - m_timer->setSingleShot(true); - connect(m_timer, SIGNAL(timeout()), m_watcher, SLOT(cancel())); -} - -void Sigbattle::TurnArena::setupBattle() -{ - // TODO: setup everything for the arena to do with the turns - Arena::setupBattle(); -} - -void Sigbattle::TurnArena::processRound() -{ - emit(roundAboutToStart()); - emit(roundStart()); - QFuture<TeamMember::RequestedAction> reqActions = QtConcurrent::mapped(active(), &Sigbattle::requestDecision); - m_watcher->setFuture(reqActions); - m_timer->start(120000); - reqActions.waitForFinished(); - m_timer->stop(); - QList<TeamMember::RequestedAction> actions = reqActions.results(); - qStableSort(actions.begin(), actions.end(), sortActions); - for (int i = 1; i < actions.size(); ++i) - { - TeamMember::Action action = actions[i].second; - if (action.first == TeamMember::Attack) - { - Sigscript::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(); - } - } - } - qStableSort(actions.begin(), actions.end(), sortActions); - foreach (const TeamMember::RequestedAction& action, actions) - { - if (action.first->currentHp()) - handleAction(action.first, action.second); - } - emit(roundAboutToEnd()); - emit(roundEnd()); - if (!isOver()) - processRound(); -} diff --git a/sigbattle/TurnArena.h b/sigbattle/TurnArena.h deleted file mode 100644 index 91222d27..00000000 --- a/sigbattle/TurnArena.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2008 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 SIGBATTLE_TURNARENA -#define SIGBATTLE_TURNARENA - -// Sigbattle includes -#include "Arena.h" -#include "TeamMember.h" - -// Qt includes -#include <QtCore/QFutureWatcher> - -// Forward declarations -class QTimer; - -namespace Sigbattle -{ -class SIGBATTLE_EXPORT TurnArena : public Arena -{ - Q_OBJECT - - public: - TurnArena(Sigscript::SigmodWrapper* sigmod, QSet<Player*> players, const bool isWild, Sigscript::Config* parent); - public slots: - signals: - void roundAboutToStart(); - void roundStart(); - void roundAboutToEnd(); - void roundEnd(); - protected: - void setupBattle(); - protected slots: - void processRound(); - private: - QFutureWatcher<TeamMember::RequestedAction>* m_watcher; - QTimer* m_timer; -}; - -bool sortActions(const TeamMember::RequestedAction& reqAction1, const TeamMember::RequestedAction& reqAction2); - -} -Q_DECLARE_METATYPE(Sigbattle::TurnArena*) - -#endif |
