diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-06 11:40:47 -0500 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-06 11:40:47 -0500 |
commit | 918afee39061db5e8c682036b7987bcad36762c6 (patch) | |
tree | 6dffcdcabcd8fbf6acf0e08aeffdd0a988a82a15 /sigencore/plugins | |
parent | 9b6f03727ac458b52a21d4a6a516c99c58189a76 (diff) | |
download | sigen-918afee39061db5e8c682036b7987bcad36762c6.tar.gz sigen-918afee39061db5e8c682036b7987bcad36762c6.tar.xz sigen-918afee39061db5e8c682036b7987bcad36762c6.zip |
Fix up ATBTimer to use ActionMap
Diffstat (limited to 'sigencore/plugins')
-rw-r--r-- | sigencore/plugins/arenas/atb/ATBTimer.cpp | 40 | ||||
-rw-r--r-- | sigencore/plugins/arenas/atb/ATBTimer.h | 26 |
2 files changed, 39 insertions, 27 deletions
diff --git a/sigencore/plugins/arenas/atb/ATBTimer.cpp b/sigencore/plugins/arenas/atb/ATBTimer.cpp index d43b1dd5..b816b6d0 100644 --- a/sigencore/plugins/arenas/atb/ATBTimer.cpp +++ b/sigencore/plugins/arenas/atb/ATBTimer.cpp @@ -19,7 +19,7 @@ #include "ATBTimer.h" // ATB includes -#include "ActionQueue.h" +#include "ActionMap.h" #include "ATBArena.h" // Sigscript includes @@ -28,27 +28,14 @@ // Qt includes #include <QtCore/QtAlgorithms> -#include <QtCore/QtConcurrentFilter> #include <QtCore/QtConcurrentMap> #include <QtCore/QFuture> -#include <QtCore/QMultiMap> +#include <QtCore/QSignalMapper> #include <QtCore/QTimerEvent> using namespace Sigencore; -void increaseMeter(TeamMember* teamMember) -{ - // TODO: Tweak this? -// teamMember->advanceTimer(teamMember->statValue(Sigmod::ST_Speed) / 10); -} - -bool isOverflowed(const TeamMember* teamMember) -{ - // TODO: Tweak threshold? -// return 1000. < teamMember->timer(); -} - -ATBTimer::ATBTimer(ATBArena* arena, ActionQueue& actions) : +ATBTimer::ATBTimer(ATBArena* arena, ActionMap& actions) : QThread(arena), m_arena(arena), m_actions(actions) @@ -89,3 +76,24 @@ void ATBTimer::timerEvent(QTimerEvent* event) // startTimer(50); // } } + +void ATBTimer::increaseMeter(TeamMember* teamMember) +{ + double factor = .1; + m_arena->valueOfType("meter-factor", &factor); + if (!m_actions.contains(teamMember)) + { + m_timers[teamMember] += teamMember->statValue(Sigmod::ST_Speed) * factor; + int threshold = 1000; + m_arena->valueOfType("meter-threshold", &threshold); + if (threshold <= m_timers[teamMember]) + { + QFutureWatcher<TeamMember::Action>* watcher = new QFutureWatcher<TeamMember::Action>(this); + TeamMember::RequestedAction action = requestDecision(teamMember); + watcher->setFuture(action.second); + connect(watcher, SIGNAL(finished()), m_signalMapper, SLOT(map())); + m_signalMapper->setMapping(watcher, teamMember); + m_actions[teamMember] = action; + } + } +} diff --git a/sigencore/plugins/arenas/atb/ATBTimer.h b/sigencore/plugins/arenas/atb/ATBTimer.h index 974688bb..c6bc30b0 100644 --- a/sigencore/plugins/arenas/atb/ATBTimer.h +++ b/sigencore/plugins/arenas/atb/ATBTimer.h @@ -18,15 +18,17 @@ #ifndef SIGENARENAS_ATBTIMER #define SIGENARENAS_ATBTIMER +// Sigencore includes +#include <sigencore/TeamMember.h> + // Qt includes +#include <QtCore/QFutureWatcher> +#include <QtCore/QMap> #include <QtCore/QThread> -namespace Sigencore -{ -class Player; -class TeamMember; -} -class ActionQueue; +// Forward declarations +class QSignalMapper; +class ActionMap; class ATBArena; class ATBTimer : public QThread @@ -34,18 +36,20 @@ class ATBTimer : public QThread Q_OBJECT public: - ATBTimer(ATBArena* arena, ActionQueue& actions); + ATBTimer(ATBArena* arena, ActionMap& actions); ~ATBTimer(); protected: void run(); void timerEvent(QTimerEvent* event); + protected slots: + void increaseMeter(Sigencore::TeamMember* teamMember); private: ATBArena* m_arena; - ActionQueue& m_actions; + QSignalMapper* m_signalMapper; + QMap<Sigencore::TeamMember*, int> m_timers; + QList<QFutureWatcher<TeamMember::Action> > m_watchers; + ActionMap& m_actions; }; -void increaseMeter(Sigencore::TeamMember* teamMember); -bool isOverflowed(const Sigencore::TeamMember* teamMember); - #endif |