From fef5e045060aff28477751c4115d346a95425c0c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 7 Sep 2008 00:43:01 +0000 Subject: [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 --- sigbattle/ATBTimer.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'sigbattle/ATBTimer.cpp') 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 #include #include #include @@ -31,6 +32,11 @@ // STL includes #include +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 active = m_timeStates.keys(); + const QList active = m_arena->active(); QtConcurrent::blockingMap(active, std::bind1st(std::mem_fun(&Sigbattle::ATBTimer::increaseMeter), this)); // TODO: adjust max time if needed QList overflow = QtConcurrent::blockingFiltered(active, std::bind1st(std::mem_fun(&Sigbattle::ATBTimer::isOverflowed), this)); - QMultiMap 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->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)]; + return m_threshold < teamMember->timer(); } -- cgit