summaryrefslogtreecommitdiffstats
path: root/sigbattle/ATBTimer.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-09-07 00:43:01 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-09-07 00:43:01 +0000
commitfef5e045060aff28477751c4115d346a95425c0c (patch)
treebd17a801439274c13f3afbd50cbe7cf83b73ccc2 /sigbattle/ATBTimer.cpp
parent0b4b89cf8efdc15e5a8d4b6cb24a5c8a025227d9 (diff)
downloadsigen-fef5e045060aff28477751c4115d346a95425c0c.tar.gz
sigen-fef5e045060aff28477751c4115d346a95425c0c.tar.xz
sigen-fef5e045060aff28477751c4115d346a95425c0c.zip
[FIX] Fixed some things in the ATBTimer
[FIX] Fleshed out some methods git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@251 6ecfd1a5-f3ed-3746-8530-beee90d26b22
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();
}