summaryrefslogtreecommitdiffstats
path: root/sigbattle
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-09-07 03:01:46 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-09-07 03:01:46 +0000
commit48f9e57b1638ba047ca2dcd6d3251ee90bf9ef69 (patch)
tree0c8e09eec981de47c5aa0f49601484bcaabbbbc7 /sigbattle
parentfef5e045060aff28477751c4115d346a95425c0c (diff)
downloadsigen-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.cpp4
-rw-r--r--sigbattle/ATBArena.h2
-rw-r--r--sigbattle/Arena.cpp103
-rw-r--r--sigbattle/Arena.h14
-rw-r--r--sigbattle/Containment.cpp13
-rw-r--r--sigbattle/Containment.h3
-rw-r--r--sigbattle/Player.cpp8
-rw-r--r--sigbattle/Player.h2
-rw-r--r--sigbattle/TeamMember.cpp5
-rw-r--r--sigbattle/TeamMember.h2
-rw-r--r--sigbattle/TurnArena.cpp4
-rw-r--r--sigbattle/TurnArena.h2
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();