summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-02-12 00:30:56 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-02-12 00:30:56 -0500
commite7a6eb6bf52579a12aa268926b87f66f7e2313d7 (patch)
treeedc230b98d6be72aa14a7c0b6fcebc8696a7d4bd
parent4ad418699a23b744eec18606a501ec9593dfc47e (diff)
Added weather support to Arena
-rw-r--r--sigencore/Arena.cpp30
-rw-r--r--sigencore/Arena.h9
2 files changed, 39 insertions, 0 deletions
diff --git a/sigencore/Arena.cpp b/sigencore/Arena.cpp
index 357cbc30..7556d1d7 100644
--- a/sigencore/Arena.cpp
+++ b/sigencore/Arena.cpp
@@ -29,6 +29,7 @@
#include "../sigscript/RulesWrapper.h"
#include "../sigscript/SigmodWrapper.h"
#include "../sigscript/SpeciesWrapper.h"
+#include "../sigscript/WeatherWrapper.h"
// Sigcore includes
#include "../sigcore/Script.h"
@@ -131,6 +132,35 @@ Sigencore::Arena::State Sigencore::Arena::state() const
return m_state;
}
+QList<Sigscript::WeatherWrapper*> Sigencore::Arena::weathers() const
+{
+ return m_weathers.keys();
+}
+
+bool Sigencore::Arena::setWeather(TeamMember* teamMember, Sigscript::WeatherWrapper* weather)
+{
+ ObjectMap objects;
+ objects["arena"] = this;
+ objects["weather"] = weather;
+ objects["sigmod"] = m_sigmod;
+ objects["owner"] = teamMember;
+ objects["client"] = teamMember->client();
+ Kross::Action* action = runScript(QString("arena-weather-%1").arg(QUuid::createUuid().toString()), weather->script(), objects, m_actions);
+ m_weathers[weather] = action;
+ action->trigger();
+ emit(weatherStarted(teamMember, weather));
+}
+
+bool Sigencore::Arena::unsetWeather(Sigscript::WeatherWrapper* weather)
+{
+ if (m_weathers.contains(weather))
+ {
+ delete m_weathers[weather];
+ m_weathers.remove(weather);
+ emit(weatherEnded(weather));
+ }
+}
+
Sigscript::SigmodWrapper* Sigencore::Arena::sigmod() const
{
return m_sigmod;
diff --git a/sigencore/Arena.h b/sigencore/Arena.h
index b7466f89..c70c4c1e 100644
--- a/sigencore/Arena.h
+++ b/sigencore/Arena.h
@@ -43,6 +43,7 @@ class Script;
namespace Sigscript
{
class SigmodWrapper;
+class WeatherWrapper;
}
namespace Sigencore
@@ -75,6 +76,10 @@ class SIGENCORE_EXPORT Arena : public Sigscript::Config
Q_SCRIPTABLE State state() const;
+ Q_SCRIPTABLE QList<Sigscript::WeatherWrapper*> weathers() const;
+ Q_SCRIPTABLE bool setWeather(TeamMember* teamMember, Sigscript::WeatherWrapper* weather);
+ Q_SCRIPTABLE bool unsetWeather(Sigscript::WeatherWrapper* weather);
+
Q_SCRIPTABLE Sigscript::SigmodWrapper* sigmod() const;
public slots:
bool addClient(Client* client, const int team);
@@ -87,6 +92,9 @@ class SIGENCORE_EXPORT Arena : public Sigscript::Config
void aboutToClearActions();
+ void weatherStarted(TeamMember* teamMember, Sigscript::WeatherWrapper* weather);
+ void weatherEnded(Sigscript::WeatherWrapper* weather);
+
void clientAdded(Client* client, const int team);
void clientRemoved(Client* client, const int team);
protected:
@@ -106,6 +114,7 @@ class SIGENCORE_EXPORT Arena : public Sigscript::Config
const bool m_isWild;
QMap<Client*, int> m_teams;
Kross::ActionCollection* m_actions;
+ QMap<Sigscript::WeatherWrapper*, Kross::Action*> m_weathers;
QMap<Player*, Spoil> m_spoils;
QList<Player*> m_losers;
protected slots: