diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2009-02-12 00:30:56 -0500 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2009-02-12 00:30:56 -0500 |
| commit | e7a6eb6bf52579a12aa268926b87f66f7e2313d7 (patch) | |
| tree | edc230b98d6be72aa14a7c0b6fcebc8696a7d4bd | |
| parent | 4ad418699a23b744eec18606a501ec9593dfc47e (diff) | |
Added weather support to Arena
| -rw-r--r-- | sigencore/Arena.cpp | 30 | ||||
| -rw-r--r-- | sigencore/Arena.h | 9 |
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: |
