summaryrefslogtreecommitdiffstats
path: root/sigbattle/ATBTimer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigbattle/ATBTimer.cpp')
-rw-r--r--sigbattle/ATBTimer.cpp19
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();
}