summaryrefslogtreecommitdiffstats
path: root/sigencore
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-06 11:40:47 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-03-06 11:40:47 -0500
commit918afee39061db5e8c682036b7987bcad36762c6 (patch)
tree6dffcdcabcd8fbf6acf0e08aeffdd0a988a82a15 /sigencore
parent9b6f03727ac458b52a21d4a6a516c99c58189a76 (diff)
downloadsigen-918afee39061db5e8c682036b7987bcad36762c6.tar.gz
sigen-918afee39061db5e8c682036b7987bcad36762c6.tar.xz
sigen-918afee39061db5e8c682036b7987bcad36762c6.zip
Fix up ATBTimer to use ActionMap
Diffstat (limited to 'sigencore')
-rw-r--r--sigencore/plugins/arenas/atb/ATBTimer.cpp40
-rw-r--r--sigencore/plugins/arenas/atb/ATBTimer.h26
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