summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-08-21 05:37:12 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-08-21 05:37:12 +0000
commitc340fbb6635989fc24db6edd9d68544a376bca20 (patch)
tree1f5921b70e2a085f11237d40a6b0f80679338fbd
parentb99070118a3cedc4fcc7514ba95fce2646d649c4 (diff)
[FIX] Cleaned up some TODO tags (fine tuning)
[FIX] Now using QUuid for unique action names in Kross git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@242 6ecfd1a5-f3ed-3746-8530-beee90d26b22
-rw-r--r--Changelog8
-rw-r--r--pokebattle/ATBArena.cpp21
-rw-r--r--pokebattle/ATBArena.h2
-rw-r--r--pokebattle/Arena.cpp37
-rw-r--r--pokebattle/Arena.h6
-rw-r--r--pokebattle/Player.cpp5
-rw-r--r--pokebattle/Player.h2
-rw-r--r--pokebattle/TeamMember.cpp72
-rw-r--r--pokebattle/TeamMember.h20
9 files changed, 135 insertions, 38 deletions
diff --git a/Changelog b/Changelog
index 533d7b7d..e7ad905d 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,12 @@
-----------------
+Rev: 242
+Date: 21 August 2008
+User: MathStuf
+-----------------
+[FIX] Cleaned up some TODO tags (fine tuning)
+[FIX] Now using QUuid for unique action names in Kross
+
+-----------------
Rev: 241
Date: 18 August 2008
User: MathStuf
diff --git a/pokebattle/ATBArena.cpp b/pokebattle/ATBArena.cpp
index d397ea25..92a1b71e 100644
--- a/pokebattle/ATBArena.cpp
+++ b/pokebattle/ATBArena.cpp
@@ -30,6 +30,16 @@ Pokebattle::ATBArena::ATBArena(QList<Player*> players, QObject* parent) :
setupBattle();
}
+void Pokebattle::ATBArena::handleAction(TeamMember* teamMember, TeamMember::Action action)
+{
+ if (action.first == TeamMember::Skip)
+ {
+ m_decisions.enqueue(requestDecision(teamMember));
+ return;
+ }
+ Arena::handleAction(teamMember, action);
+}
+
void Pokebattle::ATBArena::processActions()
{
if (!m_decisions.isEmpty())
@@ -37,16 +47,7 @@ void Pokebattle::ATBArena::processActions()
while (m_decisions.head().second.isFinished())
{
TeamMember::RequestedAction action = m_decisions.dequeue();
- switch (action.second.result().first)
- {
- case TeamMember::Skip:
- m_decisions.enqueue(requestDecision(action.first));
- case TeamMember::Timeout:
- break;
- default:
- handleAction(action.first, action.second.result());
- break;
- }
+ handleAction(action.first, action.second.result());
}
}
}
diff --git a/pokebattle/ATBArena.h b/pokebattle/ATBArena.h
index d4329cff..7cb095ec 100644
--- a/pokebattle/ATBArena.h
+++ b/pokebattle/ATBArena.h
@@ -33,6 +33,8 @@ class POKEBATTLE_EXPORT ATBArena : public Arena
public:
ATBArena(QList<Player*> players, QObject* parent);
+
+ void handleAction(TeamMember* teamMember, TeamMember::Action action);
signals:
public slots:
protected slots:
diff --git a/pokebattle/Arena.cpp b/pokebattle/Arena.cpp
index 6ab004c2..1ba34a00 100644
--- a/pokebattle/Arena.cpp
+++ b/pokebattle/Arena.cpp
@@ -42,31 +42,28 @@ Pokebattle::TeamMember::Action Pokebattle::decision(TeamMember* teamMember)
return teamMember->requestAction();
}
-QSet<int> Pokebattle::Arena::m_arenaIds;
-
Pokebattle::Arena::Arena(QList<Player*> players, QObject* parent) :
Pokescripting::Config(parent),
m_players(players),
- m_id(0)
+ m_id(QUuid::createUuid())
{
connect(this, SIGNAL(battleEnd()), SLOT(cleanUp()));
- for (; (m_id < m_arenaIds.size()) && m_arenaIds.contains(m_id); ++m_id)
- ;
- m_arenaIds.insert(m_id);
- m_actions = new Kross::ActionCollection(QString("arena-%1").arg(m_id), Kross::Manager::self().actionCollection());
+ m_actions = new Kross::ActionCollection(QString("arena-%1").arg(m_id.toString()), Kross::Manager::self().actionCollection());
foreach (Player* player, m_players)
player->enterArena(this);
}
Pokebattle::Arena::~Arena()
{
- m_arenaIds.remove(m_id);
delete m_actions;
}
QList<Pokebattle::TeamMember*> Pokebattle::Arena::active() const
{
- // TODO: return all active team members
+ QList<Pokebattle::TeamMember*> active;
+ foreach (Player* player, m_players)
+ active += player->active();
+ return active;
}
void Pokebattle::Arena::registerScript(const QString& name, const Pokemod::Script& script)
@@ -74,7 +71,7 @@ void Pokebattle::Arena::registerScript(const QString& name, const Pokemod::Scrip
Kross::Action* action = new Kross::Action(m_actions, name);
action->setInterpreter(script.interpreter());
action->setCode(script.script().toUtf8());
- action->addObject(this, "arena", Kross::ChildrenInterface::AutoConnectSignals);
+ action->addObject(this, "arena");
action->trigger();
}
@@ -85,7 +82,25 @@ void Pokebattle::Arena::cleanUp()
void Pokebattle::Arena::handleAction(TeamMember* teamMember, TeamMember::Action action)
{
- // TODO: do whatever action is needed
+ switch (action.first)
+ {
+ case TeamMember::Attack:
+ // TODO: Start move script
+ break;
+ case TeamMember::Item:
+ // TODO: Start item script
+ break;
+ case TeamMember::Switch:
+ // TODO: Switch with the other member
+ break;
+ case TeamMember::Run:
+ // TODO: Run if possible, skip if fail
+ break;
+ case TeamMember::Skip:
+ case TeamMember::Timeout:
+ // TODO: Can't do anything...
+ break;
+ }
}
void Pokebattle::Arena::setupBattle()
diff --git a/pokebattle/Arena.h b/pokebattle/Arena.h
index 2d20aab2..d3a2d590 100644
--- a/pokebattle/Arena.h
+++ b/pokebattle/Arena.h
@@ -28,6 +28,7 @@
#include <QtCore/QObject>
#include <QtCore/QPair>
#include <QtCore/QSet>
+#include <QtCore/QUuid>
// Forward declarations
namespace Kross
@@ -63,15 +64,14 @@ class POKEBATTLE_EXPORT Arena : public Pokescripting::Config
protected slots:
void cleanUp();
protected:
- void handleAction(TeamMember* teamMember, TeamMember::Action action);
+ virtual void handleAction(TeamMember* teamMember, TeamMember::Action action);
virtual void setupBattle();
QList<Player*> m_players;
Kross::ActionCollection* m_actions;
private:
- int m_id;
- static QSet<int> m_arenaIds;
+ const QUuid m_id;
};
TeamMember::RequestedAction requestDecision(TeamMember* teamMember);
diff --git a/pokebattle/Player.cpp b/pokebattle/Player.cpp
index 39185046..a5e89ae9 100644
--- a/pokebattle/Player.cpp
+++ b/pokebattle/Player.cpp
@@ -30,6 +30,11 @@ void Pokebattle::Player::enterArena(Arena* arena)
// TODO: Let them know that they are active
}
+QList<Pokebattle::TeamMember*> Pokebattle::Player::active()
+{
+ // TODO: return active members
+}
+
void Pokebattle::Player::exitArena()
{
// TODO: Tell all active members that they can leave now
diff --git a/pokebattle/Player.h b/pokebattle/Player.h
index 0bd5fff5..8e556627 100644
--- a/pokebattle/Player.h
+++ b/pokebattle/Player.h
@@ -45,6 +45,8 @@ class POKEBATTLE_EXPORT Player : public Containment
void enterArena(Arena* arena);
+ QList<TeamMember*> active();
+
const Pokemod::Pokemod* pokemod() const;
signals:
public slots:
diff --git a/pokebattle/TeamMember.cpp b/pokebattle/TeamMember.cpp
index cc5dc42c..02e266bc 100644
--- a/pokebattle/TeamMember.cpp
+++ b/pokebattle/TeamMember.cpp
@@ -50,7 +50,8 @@
Pokebattle::TeamMember::TeamMember(const int speciesId, const QString& name, const int level, Containment* containment, const bool suppressItems) :
Pokescripting::Config(containment),
- m_containment(containment)
+ m_containment(containment),
+ m_id(QUuid::createUuid())
{
makeConnections();
setSpecies(pokemod()->species(speciesId));
@@ -84,7 +85,8 @@ Pokebattle::TeamMember::TeamMember(const int speciesId, const QString& name, con
Pokebattle::TeamMember::TeamMember(Pokescripting::MapTrainerTeamMemberWrapper* teamMember, Containment* containment) :
Pokescripting::Config(containment),
- m_containment(containment)
+ m_containment(containment),
+ m_id(QUuid::createUuid())
{
makeConnections();
setSpecies(teamMember->species());
@@ -106,6 +108,11 @@ Pokebattle::TeamMember::TeamMember(Pokescripting::MapTrainerTeamMemberWrapper* t
m_statExp[i] = 0;
}
+QUuid Pokebattle::TeamMember::id() const
+{
+ return m_id;
+}
+
QString Pokebattle::TeamMember::name() const
{
if (value("name").canConvert<QString>())
@@ -148,16 +155,18 @@ int Pokebattle::TeamMember::baseStat(const Pokemod::Stat stat) const
int Pokebattle::TeamMember::statExperience(const Pokemod::Stat stat) const
{
- if (value(QString("statExperience-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat])).canConvert<int>())
- return value(QString("statExperience-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat])).toInt();
+ const QString valueName = QString("statExperience-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat]);
+ if (value(valueName).canConvert<int>())
+ return value(valueName).toInt();
return m_statExp[stat];
}
int Pokebattle::TeamMember::dv(const Pokemod::Stat stat) const
{
- if (value(QString("dv-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat])).canConvert<int>())
+ const QString valueName = QString("dv-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat]);
+ if (value(valueName).canConvert<int>())
{
- const int dv = value(QString("dv-%1").arg((pokemod()->rules()->specialSplit() ? Pokemod::StatGSCStr : Pokemod::StatRBYStr)[stat])).toInt();
+ const int dv = value(valueName).toInt();
if (dv < (pokemod()->rules()->specialDVSplit() ? 32 : 16))
return dv;
}
@@ -269,9 +278,47 @@ void Pokebattle::TeamMember::boostLevels(const int levels)
void Pokebattle::TeamMember::evolveInto(Pokescripting::SpeciesWrapper* newSpecies)
{
emit(evolveStart());
- // TODO: calculate current stats
+ int oldStats[Pokemod::ST_End_GSC] = {};
+ int newStats[Pokemod::ST_End_GSC] = {};
+ oldStats[Pokemod::ST_Attack] = statValue(Pokemod::ST_Attack);
+ oldStats[Pokemod::ST_Defense] = statValue(Pokemod::ST_Defense);
+ oldStats[Pokemod::ST_Speed] = statValue(Pokemod::ST_Speed);
+ if (pokemod()->rules()->specialSplit())
+ {
+ oldStats[Pokemod::ST_SpecialAttack] = statValue(Pokemod::ST_SpecialAttack);
+ oldStats[Pokemod::ST_SpecialDefense] = statValue(Pokemod::ST_SpecialDefense);
+ }
+ else
+ oldStats[Pokemod::ST_Special] = statValue(Pokemod::ST_Special);
setSpecies(newSpecies);
- // TODO: recalculate stats and emit signals as needed
+ newStats[Pokemod::ST_Attack] = statValue(Pokemod::ST_Attack);
+ newStats[Pokemod::ST_Defense] = statValue(Pokemod::ST_Defense);
+ newStats[Pokemod::ST_Speed] = statValue(Pokemod::ST_Speed);
+ if (pokemod()->rules()->specialSplit())
+ {
+ newStats[Pokemod::ST_SpecialAttack] = statValue(Pokemod::ST_SpecialAttack);
+ newStats[Pokemod::ST_SpecialDefense] = statValue(Pokemod::ST_SpecialDefense);
+ }
+ else
+ newStats[Pokemod::ST_Special] = statValue(Pokemod::ST_Special);
+ if (oldStats[Pokemod::ST_Attack] != newStats[Pokemod::ST_Attack])
+ emit(statChanged(Pokemod::ST_Attack, newStats[Pokemod::ST_Attack]));
+ if (oldStats[Pokemod::ST_Defense] != newStats[Pokemod::ST_Defense])
+ emit(statChanged(Pokemod::ST_Defense, newStats[Pokemod::ST_Defense]));
+ if (oldStats[Pokemod::ST_Speed] != newStats[Pokemod::ST_Speed])
+ emit(statChanged(Pokemod::ST_Speed, newStats[Pokemod::ST_Speed]));
+ if (pokemod()->rules()->specialSplit())
+ {
+ if (oldStats[Pokemod::ST_SpecialAttack] != newStats[Pokemod::ST_SpecialAttack])
+ emit(statChanged(Pokemod::ST_SpecialAttack, newStats[Pokemod::ST_SpecialAttack]));
+ if (oldStats[Pokemod::ST_SpecialDefense] != newStats[Pokemod::ST_SpecialDefense])
+ emit(statChanged(Pokemod::ST_SpecialDefense, newStats[Pokemod::ST_SpecialDefense]));
+ }
+ else
+ {
+ if (oldStats[Pokemod::ST_Special] != newStats[Pokemod::ST_Special])
+ emit(statChanged(Pokemod::ST_Special, newStats[Pokemod::ST_Special]));
+ }
emit(evolveEnd());
}
@@ -390,9 +437,9 @@ void Pokebattle::TeamMember::teachMove(Pokescripting::MoveWrapper* move)
m_moves.append(move);
emit(moveLearned(move));
}
- // TODO: Handle when the move list is full
+ emit(movesFull(move));
}
- // TODO: signal that the move is unlearnable
+ emit(unlearnableMove(move));
}
Pokebattle::TeamMember::Action Pokebattle::TeamMember::requestAction() const
@@ -402,12 +449,13 @@ Pokebattle::TeamMember::Action Pokebattle::TeamMember::requestAction() const
void Pokebattle::TeamMember::makeActive(Arena* arena)
{
- // TODO: start up any scripts that may be needed
+ // TODO: initialize status scripts
+ // TODO: initialize ability scripts
}
void Pokebattle::TeamMember::writeBack()
{
- // TODO: write back all differences between config and local storage
+ // TODO: write back all (applicable) differences between config and local storage
}
Pokescripting::PokemodWrapper* Pokebattle::TeamMember::pokemod() const
diff --git a/pokebattle/TeamMember.h b/pokebattle/TeamMember.h
index 504fe0e0..8248d233 100644
--- a/pokebattle/TeamMember.h
+++ b/pokebattle/TeamMember.h
@@ -33,6 +33,7 @@
#include <QtCore/QObject>
#include <QtCore/QPair>
#include <QtCore/QString>
+#include <QtCore/QUuid>
// Forward declarations
namespace Pokescripting
@@ -74,12 +75,16 @@ class POKEBATTLE_EXPORT TeamMember : public Pokescripting::Config
Timeout = 5
};
- typedef QPair<ActionType, QVariant> Action;
+ typedef QList<QUuid> Targets;
+ typedef QPair<QVariant, Targets> ActionData;
+ typedef QPair<ActionType, ActionData> Action;
typedef QPair<TeamMember*, QFuture<TeamMember::Action> > RequestedAction;
TeamMember(const int speciesId, const QString& name, const int level, Containment* containment, const bool suppressItems = false);
TeamMember(Pokescripting::MapTrainerTeamMemberWrapper* teamMember, Containment* containment);
+ QUuid id() const;
+
QString name() const;
Pokescripting::SpeciesWrapper* species() const;
int level() const;
@@ -99,18 +104,25 @@ class POKEBATTLE_EXPORT TeamMember : public Pokescripting::Config
void evolveEnd();
void nameChanged(const QString& oldName, const QString& newName);
- void expGained(const int exp);
+
void statusCured(Pokescripting::StatusWrapper* status);
void statusInflicted(Pokescripting::StatusWrapper* status);
+
+ void expGained(const int exp);
void levelAboutToGrow();
void levelGrown(const int newLevel);
+
void statChanged(const Pokemod::Stat stat, const int value);
void effortFull(const int stat);
void totalEffortFull();
+
void itemTaken(Pokescripting::ItemWrapper* item);
void itemGiven(Pokescripting::ItemWrapper* item);
+
void moveForgotten(Pokescripting::MoveWrapper* move);
void moveLearned(Pokescripting::MoveWrapper* move);
+ void movesFull(Pokescripting::MoveWrapper* move);
+ void unlearnableMove(Pokescripting::MoveWrapper* move);
void knockedOut();
public slots:
@@ -143,6 +155,8 @@ class POKEBATTLE_EXPORT TeamMember : public Pokescripting::Config
Containment* m_containment;
+ const QUuid m_id;
+
QString m_name;
Pokescripting::SpeciesWrapper* m_species;
Gender m_gender;
@@ -168,6 +182,8 @@ class POKEBATTLE_EXPORT TeamMember : public Pokescripting::Config
Q_DECLARE_METATYPE(Pokebattle::TeamMember*)
Q_DECLARE_METATYPE(Pokebattle::TeamMember::Gender)
Q_DECLARE_METATYPE(Pokebattle::TeamMember::ActionType)
+Q_DECLARE_METATYPE(Pokebattle::TeamMember::Targets)
+Q_DECLARE_METATYPE(Pokebattle::TeamMember::ActionData)
Q_DECLARE_METATYPE(Pokebattle::TeamMember::Action)
Q_DECLARE_METATYPE(Pokebattle::TeamMember::RequestedAction)