diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-09-07 03:01:46 +0000 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-09-07 03:01:46 +0000 |
commit | 48f9e57b1638ba047ca2dcd6d3251ee90bf9ef69 (patch) | |
tree | 0c8e09eec981de47c5aa0f49601484bcaabbbbc7 /sigbattle | |
parent | fef5e045060aff28477751c4115d346a95425c0c (diff) | |
download | sigen-48f9e57b1638ba047ca2dcd6d3251ee90bf9ef69.tar.gz sigen-48f9e57b1638ba047ca2dcd6d3251ee90bf9ef69.tar.xz sigen-48f9e57b1638ba047ca2dcd6d3251ee90bf9ef69.zip |
[FIX] Spelling mistake in sigscript classes
[FIX] Fixed a bug in the Growth enum in Species
[FIX] Arena functionality is getting there
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@252 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'sigbattle')
-rw-r--r-- | sigbattle/ATBArena.cpp | 4 | ||||
-rw-r--r-- | sigbattle/ATBArena.h | 2 | ||||
-rw-r--r-- | sigbattle/Arena.cpp | 103 | ||||
-rw-r--r-- | sigbattle/Arena.h | 14 | ||||
-rw-r--r-- | sigbattle/Containment.cpp | 13 | ||||
-rw-r--r-- | sigbattle/Containment.h | 3 | ||||
-rw-r--r-- | sigbattle/Player.cpp | 8 | ||||
-rw-r--r-- | sigbattle/Player.h | 2 | ||||
-rw-r--r-- | sigbattle/TeamMember.cpp | 5 | ||||
-rw-r--r-- | sigbattle/TeamMember.h | 2 | ||||
-rw-r--r-- | sigbattle/TurnArena.cpp | 4 | ||||
-rw-r--r-- | sigbattle/TurnArena.h | 2 |
12 files changed, 144 insertions, 18 deletions
diff --git a/sigbattle/ATBArena.cpp b/sigbattle/ATBArena.cpp index 75c5c697..693ac4f3 100644 --- a/sigbattle/ATBArena.cpp +++ b/sigbattle/ATBArena.cpp @@ -24,8 +24,8 @@ // Qt includes #include <QtCore/QTimer> -Sigbattle::ATBArena::ATBArena(QList<Player*> players, QObject* parent) : - Arena(players, parent) +Sigbattle::ATBArena::ATBArena(QList<Player*> players, const bool isWild, QObject* parent) : + Arena(players, isWild, parent) { setupBattle(); } diff --git a/sigbattle/ATBArena.h b/sigbattle/ATBArena.h index 5fccf2ec..0736ea14 100644 --- a/sigbattle/ATBArena.h +++ b/sigbattle/ATBArena.h @@ -32,7 +32,7 @@ class SIGBATTLE_EXPORT ATBArena : public Arena Q_OBJECT public: - ATBArena(QList<Player*> players, QObject* parent); + ATBArena(QList<Player*> players, const bool isWild, QObject* parent); void handleAction(TeamMember* teamMember, TeamMember::Action action); signals: diff --git a/sigbattle/Arena.cpp b/sigbattle/Arena.cpp index d6a819a1..293619d0 100644 --- a/sigbattle/Arena.cpp +++ b/sigbattle/Arena.cpp @@ -21,11 +21,19 @@ // Sigbattle includes #include "Player.h" +// Sigscript includes +#include "../sigscript/ItemWrapper.h" +#include "../sigscript/MoveWrapper.h" +#include "../sigscript/SigmodWrapper.h" +#include "../sigscript/SpeciesWrapper.h" + // Sigmod includes +// #include "../sigmod/Fraction.h" #include "../sigmod/Script.h" // Qt includes #include <QtCore/QtConcurrentRun> +#include <QtCore/QUuid> // KDE includes #include <kross/core/action.h> @@ -42,8 +50,9 @@ Sigbattle::TeamMember::Action Sigbattle::decision(TeamMember* teamMember) return teamMember->requestAction(); } -Sigbattle::Arena::Arena(QList<Player*> players, QObject* parent) : +Sigbattle::Arena::Arena(QList<Player*> players, const bool isWild, QObject* parent) : Sigscript::Config(parent), + m_isWild(isWild), m_players(players), m_id(QUuid::createUuid()) { @@ -74,9 +83,14 @@ int Sigbattle::Arena::numActiveTeams() const return active; } -void Sigbattle::Arena::registerScript(const QString& name, const Sigmod::Script& script) +Sigscript::SigmodWrapper* Sigbattle::Arena::sigmod() const +{ + // TODO: return sigmod +} + +void Sigbattle::Arena::registerScript(const Sigmod::Script& script) { - Kross::Action* action = new Kross::Action(m_actions, name); + Kross::Action* action = new Kross::Action(m_actions, QUuid::createUuid().toString()); action->setInterpreter(script.interpreter()); action->setCode(script.script().toUtf8()); action->addObject(this, "arena"); @@ -85,25 +99,84 @@ void Sigbattle::Arena::registerScript(const QString& name, const Sigmod::Script& void Sigbattle::Arena::cleanUp() { - // TODO: clean up everything + QList<Kross::Action*> actions = m_actions->actions(); + foreach (Kross::Action* action, actions) + m_actions->removeAction(action); } void Sigbattle::Arena::handleAction(TeamMember* teamMember, TeamMember::Action action) { + TeamMember::ActionData data = action.second; switch (action.first) { case TeamMember::Attack: - // TODO: Start move script + { + Sigscript::MoveWrapper* move = sigmod()->move(data.first.toInt()); + if (move) + { + Sigmod::Script script = move->battleScript(); + Kross::Action* kaction = new Kross::Action(m_actions, QUuid::createUuid().toString()); + kaction->setInterpreter(script.interpreter()); + kaction->setCode(script.script().toUtf8()); + kaction->addObject(this, "arena"); + kaction->addObject(teamMember, "user"); + for (int i = 0; i < data.second.size(); ++i) + kaction->addObject(findMember(data.second[i]), QString("target%1").arg(i)); + kaction->trigger(); + } break; + } case TeamMember::Item: - // TODO: Start item script + { + Sigscript::ItemWrapper* item = sigmod()->item(data.first.toInt()); + if (item) + { + Sigmod::Script script = item->script(); + Kross::Action* kaction = new Kross::Action(m_actions, QUuid::createUuid().toString()); + kaction->setInterpreter(script.interpreter()); + kaction->setCode(script.script().toUtf8()); + kaction->addObject(this, "arena"); + kaction->addObject(findMember(data.second[0]), "target"); + kaction->trigger(); + } break; + } case TeamMember::Switch: - // TODO: Switch with the other member + { + Player* player = qobject_cast<Player*>(teamMember->containment()); + if (player) + player->switchOut(teamMember, player->findMember(data.second[0])); break; + } case TeamMember::Run: - // TODO: Run if possible, skip if fail + { + if (!m_isWild) + break; + Player* self = qobject_cast<Player*>(teamMember->containment()); + const int numFlee = self->active().size(); + bool canRun = true; + foreach (Player* player, m_players) + { + if (self == player) + continue; + foreach (TeamMember* active, player->active()) + { + for (int i = 0; (i < numFlee) && canRun; ++i) + { + if (!active->species()->fleeChance().poll()) + { + canRun = false; + break; + } + } + } + if (!canRun) + break; + } + if (canRun) + self->exitArena(); break; + } case TeamMember::Skip: case TeamMember::Timeout: case TeamMember::Invalid: @@ -113,5 +186,17 @@ void Sigbattle::Arena::handleAction(TeamMember* teamMember, TeamMember::Action a void Sigbattle::Arena::setupBattle() { - // TODO: setup all the battle stuff + foreach (Player* player, m_players) + player->enterArena(this); +} + +Sigbattle::TeamMember* Sigbattle::Arena::findMember(const QUuid& id) +{ + foreach (Player* player, m_players) + { + TeamMember* member = player->findMember(id); + if (member) + return member; + } + return NULL; } diff --git a/sigbattle/Arena.h b/sigbattle/Arena.h index b3c53c47..aac9c8ee 100644 --- a/sigbattle/Arena.h +++ b/sigbattle/Arena.h @@ -40,6 +40,10 @@ namespace Sigmod { class Script; } +namespace Sigscript +{ +class SigmodWrapper; +} namespace Sigbattle { @@ -50,18 +54,18 @@ class SIGBATTLE_EXPORT Arena : public Sigscript::Config Q_OBJECT public: - Arena(QList<Player*> players, QObject* parent); + Arena(QList<Player*> players, const bool isWild, QObject* parent); ~Arena(); QList<TeamMember*> active() const; int numActiveTeams() const; - Kross::Action* script(const QString& name); + Sigscript::SigmodWrapper* sigmod() const; signals: void battleStart(); void battleEnd(); public slots: - void registerScript(const QString& name, const Sigmod::Script& script); + void registerScript(const Sigmod::Script& script); protected slots: void cleanUp(); protected: @@ -69,6 +73,10 @@ class SIGBATTLE_EXPORT Arena : public Sigscript::Config virtual void setupBattle(); + TeamMember* findMember(const QUuid& id); + + const bool m_isWild; + Sigscript::SigmodWrapper* m_sigmod; QList<Player*> m_players; Kross::ActionCollection* m_actions; private: diff --git a/sigbattle/Containment.cpp b/sigbattle/Containment.cpp index efe59712..f9f64d11 100644 --- a/sigbattle/Containment.cpp +++ b/sigbattle/Containment.cpp @@ -18,6 +18,9 @@ // Header include #include "Containment.h" +// Sigbattle includes +#include "TeamMember.h" + Sigbattle::Containment::Containment(QObject* parent) : QObject(parent) { @@ -28,6 +31,16 @@ QList<Sigbattle::TeamMember*> Sigbattle::Containment::members() const return m_members; } +Sigbattle::TeamMember* Sigbattle::Containment::findMember(const QUuid& id) const +{ + foreach (TeamMember* member, m_members) + { + if (member->id() == id) + return member; + } + return NULL; +} + Sigscript::SigmodWrapper* Sigbattle::Containment::sigmod() const { // TODO: return SigmodWrapper diff --git a/sigbattle/Containment.h b/sigbattle/Containment.h index 52fbfbf2..4c683049 100644 --- a/sigbattle/Containment.h +++ b/sigbattle/Containment.h @@ -24,6 +24,7 @@ // Qt includes #include <QtCore/QMetaType> #include <QtCore/QObject> +#include <QtCore/QUuid> // Forward declarations namespace Sigscript @@ -46,6 +47,8 @@ class SIGBATTLE_EXPORT Containment : public QObject virtual bool isMutable() const = 0; + TeamMember* findMember(const QUuid& id) const; + Sigscript::SigmodWrapper* sigmod() const; signals: public slots: diff --git a/sigbattle/Player.cpp b/sigbattle/Player.cpp index 48ca5b24..b759e6d1 100644 --- a/sigbattle/Player.cpp +++ b/sigbattle/Player.cpp @@ -30,6 +30,7 @@ Sigbattle::Player::Player(QObject* parent) : void Sigbattle::Player::enterArena(Arena* arena) { + m_arena = arena; QList<TeamMember*> activeMembers = active(); foreach (TeamMember* member, activeMembers) member->makeActive(arena); @@ -47,9 +48,16 @@ QList<Sigbattle::TeamMember*> Sigbattle::Player::active() return activeMembers; } +void Sigbattle::Player::switchOut(TeamMember* oldActive, TeamMember* newActive) +{ + oldActive->makeActive(m_arena); + // TODO: Update active table +} + void Sigbattle::Player::exitArena() { QList<TeamMember*> activeMembers = active(); foreach (TeamMember* member, activeMembers) member->leaveArena(); + m_arena = NULL; } diff --git a/sigbattle/Player.h b/sigbattle/Player.h index 50f2842b..f46ea2ed 100644 --- a/sigbattle/Player.h +++ b/sigbattle/Player.h @@ -46,6 +46,8 @@ class SIGBATTLE_EXPORT Player : public Team void enterArena(Arena* arena); QList<TeamMember*> active(); + + void switchOut(TeamMember* oldActive, TeamMember* newActive); signals: public slots: void exitArena(); diff --git a/sigbattle/TeamMember.cpp b/sigbattle/TeamMember.cpp index ef26edca..2669dd6c 100644 --- a/sigbattle/TeamMember.cpp +++ b/sigbattle/TeamMember.cpp @@ -143,6 +143,11 @@ Sigbattle::TeamMember::TeamMember(Sigscript::MapTrainerTeamMemberWrapper* teamMe m_currentHp = statValue(Sigmod::ST_HP); } +Sigbattle::Containment* Sigbattle::TeamMember::containment() const +{ + return m_containment; +} + QUuid Sigbattle::TeamMember::id() const { return m_id; diff --git a/sigbattle/TeamMember.h b/sigbattle/TeamMember.h index b6455cbb..fdb172e9 100644 --- a/sigbattle/TeamMember.h +++ b/sigbattle/TeamMember.h @@ -90,6 +90,8 @@ class SIGBATTLE_EXPORT TeamMember : public Sigscript::Config TeamMember(const int speciesId, const QString& name, const int level, Containment* containment, const bool suppressItems = false); TeamMember(Sigscript::MapTrainerTeamMemberWrapper* teamMember, Containment* containment); + Containment* containment() const; + QUuid id() const; QString name() const; diff --git a/sigbattle/TurnArena.cpp b/sigbattle/TurnArena.cpp index a42af480..3d65f881 100644 --- a/sigbattle/TurnArena.cpp +++ b/sigbattle/TurnArena.cpp @@ -47,8 +47,8 @@ bool Sigbattle::sortActions(const TeamMember::RequestedAction& reqAction1, const return false; } -Sigbattle::TurnArena::TurnArena(QList<Player*> players, QObject* parent) : - Arena(players, parent), +Sigbattle::TurnArena::TurnArena(QList<Player*> players, const bool isWild, QObject* parent) : + Arena(players, isWild, parent), m_watcher(new QFutureWatcher<TeamMember::RequestedAction>(this)), m_timer(new QTimer(this)) { diff --git a/sigbattle/TurnArena.h b/sigbattle/TurnArena.h index 2a3b2864..2c81931d 100644 --- a/sigbattle/TurnArena.h +++ b/sigbattle/TurnArena.h @@ -35,7 +35,7 @@ class SIGBATTLE_EXPORT TurnArena : public Arena Q_OBJECT public: - TurnArena(QList<Player*> players, QObject* parent); + TurnArena(QList<Player*> players, const bool isWild, QObject* parent); signals: void roundAboutToStart(); void roundStart(); |