diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-08-21 05:37:12 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-08-21 05:37:12 +0000 |
| commit | c340fbb6635989fc24db6edd9d68544a376bca20 (patch) | |
| tree | 1f5921b70e2a085f11237d40a6b0f80679338fbd | |
| parent | b99070118a3cedc4fcc7514ba95fce2646d649c4 (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-- | Changelog | 8 | ||||
| -rw-r--r-- | pokebattle/ATBArena.cpp | 21 | ||||
| -rw-r--r-- | pokebattle/ATBArena.h | 2 | ||||
| -rw-r--r-- | pokebattle/Arena.cpp | 37 | ||||
| -rw-r--r-- | pokebattle/Arena.h | 6 | ||||
| -rw-r--r-- | pokebattle/Player.cpp | 5 | ||||
| -rw-r--r-- | pokebattle/Player.h | 2 | ||||
| -rw-r--r-- | pokebattle/TeamMember.cpp | 72 | ||||
| -rw-r--r-- | pokebattle/TeamMember.h | 20 |
9 files changed, 135 insertions, 38 deletions
@@ -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) |
