diff options
Diffstat (limited to 'sigbattle/ATBTimer.cpp')
| -rw-r--r-- | sigbattle/ATBTimer.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/sigbattle/ATBTimer.cpp b/sigbattle/ATBTimer.cpp index 874c6fb8..ad00e2d3 100644 --- a/sigbattle/ATBTimer.cpp +++ b/sigbattle/ATBTimer.cpp @@ -22,6 +22,7 @@ #include "ATBArena.h" // Qt includes +#include <QtCore/QtAlgorithms> #include <QtCore/QtConcurrentFilter> #include <QtCore/QtConcurrentMap> #include <QtCore/QFuture> @@ -31,6 +32,11 @@ // STL includes #include <functional> +bool Sigbattle::compareTimers(TeamMember* const & member1, TeamMember* const & member2) +{ + return member1->timer() < member2->timer(); +} + Sigbattle::ATBTimer::ATBTimer(ATBArena* arena, ActionQueue& actions) : QThread(arena), m_arena(arena), @@ -42,14 +48,11 @@ Sigbattle::ATBTimer::ATBTimer(ATBArena* arena, ActionQueue& actions) : void Sigbattle::ATBTimer::update() { - const QList<TeamMember*> active = m_timeStates.keys(); + const QList<TeamMember*> active = m_arena->active(); QtConcurrent::blockingMap(active, std::bind1st(std::mem_fun(&Sigbattle::ATBTimer::increaseMeter), this)); // TODO: adjust max time if needed QList<TeamMember*> overflow = QtConcurrent::blockingFiltered(active, std::bind1st(std::mem_fun(&Sigbattle::ATBTimer::isOverflowed), this)); - QMultiMap<double, TeamMember*> sorter; - foreach (TeamMember* teamMember, overflow) - sorter.insert(m_timeStates[teamMember], teamMember); - overflow = sorter.values(); + qSort(overflow.begin(), overflow.end(), compareTimers); foreach(TeamMember* teamMember, overflow) m_actions.enqueue(requestDecision(teamMember)); } @@ -60,13 +63,13 @@ void Sigbattle::ATBTimer::run() exec(); } -void Sigbattle::ATBTimer::increaseMeter(const TeamMember* teamMember) +void Sigbattle::ATBTimer::increaseMeter(TeamMember* teamMember) { // TODO: tweak this(?) - m_timeStates[const_cast<TeamMember*>(teamMember)] += teamMember->statValue(Sigmod::ST_Speed) / 10; + teamMember->advanceTimer(teamMember->statValue(Sigmod::ST_Speed) / 10); } bool Sigbattle::ATBTimer::isOverflowed(const TeamMember* teamMember) const { - return m_threshold < m_timeStates[const_cast<TeamMember*>(teamMember)]; + return m_threshold < teamMember->timer(); } |
