From 5b55d13ead7e352ee1feaae72009e8abf5bd071a Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 21 Sep 2007 15:36:22 +0000 Subject: [FIX] Neural Network methods complete [FIX] Wrapped Node up into the layer [FIX] Wrapped NatureEffect into Nature [FIX] Getting around to fixing up the design of the PokéMod stuff [FIX] Creating new subclasses now returns pointer to new subclass [FIX] Simplified interfaces [FIX] Minor style issues [FIX] Renamed CoinItem to CoinListObject [FIX] Renamed MapTrainerTeam to MapTrainerPokemon [FIX] Renamed MapWildPokemon to MapWildListPokemon [FIX] Moved global enums to relevant classes [FIX] Removed general logging features [DEL] pokemod/Debug.{h, cpp} [DEL] pokemod/Path.{h, cpp} [FIX] Using QFile rather than custom Path class for checking for files [FIX] Set* methods now return a bool to let the caller know if anything actually changed (if it can fail, otherwise it is void) [ADD] Compliation without errors is required for pokemod from now on before commits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@24 6ecfd1a5-f3ed-3746-8530-beee90d26b22 --- pokemod/Map.cpp | 1214 ++++++++++++++++++++++++------------------------------- 1 file changed, 538 insertions(+), 676 deletions(-) (limited to 'pokemod/Map.cpp') diff --git a/pokemod/Map.cpp b/pokemod/Map.cpp index 1765f4a5..d3c23879 100644 --- a/pokemod/Map.cpp +++ b/pokemod/Map.cpp @@ -1,676 +1,538 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: pokemod/Map.cpp -// Purpose: Define a map for the game -// Author: Ben Boeckel -// Modified by: Ben Boeckel -// Created: Mon May 28 21:45:48 2007 -// Copyright: ©2007 Nerdy Productions -// Licence: -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTMap or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program. If not, see . -///////////////////////////////////////////////////////////////////////////// - -#include "Map.h" - -PokeGen::PokeMod::Map::Map(const Pokemod *par, const unsigned _id) : - name(""), - flyWarp(UINT_MAX), - type(UINT_MAX) -{ - LogCtor("Map", id); - id = _id; - pokemod = par; -} - -PokeGen::PokeMod::Map::Map(const Pokemod *par, Ini &ini, const unsigned _id) -{ - LogCtorIni("Map", id); - pokemod = par; - ImportIni(ini, _id); - if (id == UINT_MAX) - LogIdError("Map"); -} - -PokeGen::PokeMod::Map::~Map() -{ - LogDtor("Map", id, name); -} - -void PokeGen::PokeMod::Map::Validate() -{ - LogValidateStart("Map", id, name); - if (name == "") - { - LogVarNotSet("Map", id, "name"); - isValid = false; - } - if (!GetMapWarp(flyWarp)) - { - LogVarNotValid("Map", id, "flyWarp", name); - isValid = false; - } - if (type < MTY_END) - { - LogVarNotValid("Map", id, "type", name); - isValid = false; - } - QMap idChecker; - QMap nameChecker; - if (GetMapEffectCount()) - { - for (QList::Iterator i = effects.begin(); i != effects.end(); ++i) - { - LogSubmoduleIterate("Map", id, "effect", i->GetId(), name); - if (!i->IsValid()) - isValid = false; - if (GetWidth() <= i->GetCoordinateX()) - { - LogVarNotValid("MapEffect", i->GetId(), "x", i->GetName()); - isValid = false; - } - if (GetHeight() <= i->GetCoordinateY()) - { - LogVarNotValid("MapEffect", i->GetId(), "y", i->GetName()); - isValid = false; - } - ++idChecker[i->GetId()]; - ++nameChecker[i->GetName()]; - } - for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateId("Map", id, "effect", i.key(), name); - isValid = false; - } - } - for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateSubmodule("Map", id, "effect", i.key(), name); - isValid = false; - } - } - idChecker.clear(); - nameChecker.clear(); - } - else - LogSubmoduleEmpty("Map", id, "effect", name); - if (GetMapTrainerCount()) - { - for (QList::Iterator i = trainers.begin(); i != trainers.end(); ++i) - { - LogSubmoduleIterate("Map", id, "trainer", i->GetId(), name); - if (!i->IsValid()) - isValid = false; - if (GetWidth() <= i->GetCoordinateX()) - { - LogVarNotValid("MapTrainer", i->GetId(), "x", i->GetName()); - isValid = false; - } - if (GetHeight() <= i->GetCoordinateY()) - { - LogVarNotValid("MapTrainer", i->GetId(), "y", i->GetName()); - isValid = false; - } - ++idChecker[i->GetId()]; - ++nameChecker[i->GetName()]; - } - for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateId("Map", id, "trainer", i.key(), name); - isValid = false; - } - } - for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateSubmodule("Map", id, "trainer", i.key(), name); - isValid = false; - } - } - idChecker.clear(); - nameChecker.clear(); - } - else - LogSubmoduleEmpty("Map", id, "trainer", name); - if (GetMapWarpCount()) - { - for (QList::Iterator i = warps.begin(); i != warps.end(); ++i) - { - LogSubmoduleIterate("Map", id, "warp", i->GetId(), name); - if (!i->IsValid()) - isValid = false; - if (GetWidth() <= i->GetCoordinateX()) - { - LogVarNotValid("MapWarp", i->GetId(), "x", i->GetName()); - isValid = false; - } - if (GetHeight() <= i->GetCoordinateY()) - { - LogVarNotValid("MapWarp", i->GetId(), "y", i->GetName()); - isValid = false; - } - ++idChecker[i->GetId()]; - ++nameChecker[i->GetName()]; - } - for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateId("Map", id, "warp", i.key(), name); - isValid = false; - } - } - for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateSubmodule("Map", id, "warp", i.key(), name); - isValid = false; - } - } - idChecker.clear(); - nameChecker.clear(); - } - else - { - LogSubmoduleEmpty("Map", id, "warp", name); - isValid = false; - } - if (GetMapWildListCount()) - { - for (QList::Iterator i = wildLists.begin(); i != wildLists.end(); ++i) - { - LogSubmoduleIterate("Map", id, "wild list", i->GetId(), name); - if (!i->IsValid()) - isValid = false; - ++idChecker[i->GetId()]; - } - for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) - { - if (1 < i.value()) - { - LogDuplicateId("Map", id, "effect", i.key(), name); - isValid = false; - } - } - idChecker.clear(); - } - else - LogSubmoduleEmpty("Map", id, "effect", name); - for (unsigned i = 0; i < GetWidth(); ++i) - { - for (unsigned j = 0; j < GetHeight(); ++j) - { - if (!pokemod->GetTile(tiles[i][j])) - { - LogVarNotValid("Map", id, QString("tiles[%u][%u]", i, j), name); - isValid = false; - } - } - } - LogValidateOver("Map", id, isValid, name); -} - -void PokeGen::PokeMod::Map::ImportIni(Ini &ini, const unsigned _id) -{ - LogImportStart("Map"); - if (_id == UINT_MAX) - { - ini.GetValue("id", id); - if (id == UINT_MAX) - LogIdNotFound("Map"); - } - else - id = _id; - unsigned i; - unsigned j; - ini.GetValue("name", name); - ini.GetValue("flyWarp", flyWarp); - ini.GetValue("type", type); - ini.GetValue("width", i, 0); - ini.GetValue("height", j, 0); - tiles.Resize(i, j, Frac(1, 1)); - for (unsigned i = 0; i < GetWidth(); ++i) - { - for (unsigned j = 0; j < GetHeight(); ++j) - ini.GetValue(QString("tiles-%u-%u", i, j), tiles[i][j]); - } - effects.clear(); - trainers.clear(); - warps.clear(); - wildLists.clear(); - LogImportOver("Map", id, name); -} - -void PokeGen::PokeMod::Map::ExportIni(QFile &fout) const -{ - LogExportStart("Map", id, name); - Ini exMap("Map"); - exMap.AddField("id", id); - exMap.AddField("name", name); - exMap.AddField("flyWarp", flyWarp); - exMap.AddField("type", type); - exMap.AddField("width", GetWidth()); - exMap.AddField("height", GetHeight()); - for (unsigned i = 0; i < GetWidth(); ++i) - { - for (unsigned j = 0; j < GetWidth(); ++j) - exMap.AddField(QString("tiles-%u-%u", i, j), tiles[i][j]); - } - exMap.Export(fout); - for (QList::ConstIterator i = effects.begin(); i != effects.end(); ++i) - i->ExportIni(fout, name); - for (QList::ConstIterator j = trainers.begin(); j != trainers.end(); ++j) - j->ExportIni(fout, name); - for (QList::ConstIterator k = warps.begin(); k != warps.end(); ++k) - k->ExportIni(fout, name); - for (QList::ConstIterator l = wildLists.begin(); l != wildLists.end(); ++l) - l->ExportIni(fout, name); - LogExportOver("Map", id, name); -} - -void PokeGen::PokeMod::Map::SetName(const QString &n) -{ - LogSetVar("Map", id, "name", n); - name = n; -} - -void PokeGen::PokeMod::Map::SetFlyWarp(const unsigned f) -{ - LogSetVar("Map", id, "flyWarp", f, name); - if (GetMapWarp(f)) - flyWarp = f; -} - -void PokeGen::PokeMod::Map::SetFlyWarp(const QString &f) -{ - LogSetVar("Map", id, "flyWarp string", f, name); - if (const MapWarp *m = GetMapWarp(f)) - flyWarp = m->GetId(); -} - -void PokeGen::PokeMod::Map::SetType(const unsigned t) -{ - LogSetVar("Map", id, "type", t, name); - if (t < MTY_END) - type = t; -} - -void PokeGen::PokeMod::Map::SetType(const QString &t) -{ - LogSetVar("Map", id, "type string", t, name); - type = FindIn(MTY_END, t, MapTypeStr); -} - -QString PokeGen::PokeMod::Map::GetName() const -{ - LogFetchVar("Map", id, "name", name); - return name; -} - -unsigned PokeGen::PokeMod::Map::GetFlyWarp() const -{ - LogFetchVar("Map", id, "flyWarp", flyWarp, name); - return flyWarp; -} - -QString PokeGen::PokeMod::Map::GetFlyWarpString() const -{ - LogFetchVar("Map", id, "flyWarp string", flyWarp, name); - if (const MapWarp *m = GetMapWarp(flyWarp)) - return m->GetName(); - return ""; -} - -unsigned PokeGen::PokeMod::Map::GetType() const -{ - LogFetchVar("Map", id, "type", type, name); - return type; -} - -QString PokeGen::PokeMod::Map::GetTypeString() const -{ - LogFetchVar("Map", id, "type string", type, name); - if (type < MTY_END) - return MapTypeStr[type]; - return ""; -} - -void PokeGen::PokeMod::Map::SetTile(unsigned x, unsigned y, unsigned _id) -{ - if (pokemod->GetTile(_id)) - tiles[x][y] = _id; -} - -void PokeGen::PokeMod::Map::SetTile(unsigned x, unsigned y, const QString &n) -{ - if (const Tile *t = pokemod->GetTile(n)) - tiles[x][y] = t->GetId(); -} - -void PokeGen::PokeMod::Map::InsertColumn(unsigned x) -{ - tiles.InsertCol(x, 0); -} - -void PokeGen::PokeMod::Map::InsertRow(unsigned y) -{ - tiles.InsertRow(y, 0); -} - -void PokeGen::PokeMod::Map::AddColumn() -{ - tiles.AddCol(0); -} - -void PokeGen::PokeMod::Map::AddRow() -{ - tiles.AddRow(0); -} - -void PokeGen::PokeMod::Map::DeleteColumn(unsigned x) -{ - tiles.DeleteCol(x); -} - -void PokeGen::PokeMod::Map::DeleteRow(unsigned y) -{ - tiles.DeleteRow(y); -} - -unsigned PokeGen::PokeMod::Map::GetTile(unsigned x, unsigned y) const -{ - return tiles[x][y]; -} - -unsigned PokeGen::PokeMod::Map::GetWidth() const -{ - return tiles.GetWidth(); -} - -unsigned PokeGen::PokeMod::Map::GetHeight() const -{ - return tiles.GetHeight(); -} - -const PokeGen::PokeMod::MapEffect *PokeGen::PokeMod::Map::GetMapEffect(const unsigned _id) const -{ - LogSubmoduleFetch("Map", id, "effect", _id, name); - for (unsigned i = 0; i < GetMapEffectCount(); ++i) - { - if (effects[i].GetId() == _id) - return &effects[i]; - } - LogSubmoduleFetchFail("Map", id, "effect", _id, name); - return NULL; -} - -const PokeGen::PokeMod::MapEffect *PokeGen::PokeMod::Map::GetMapEffect(const QString &n) const -{ - LogSubmoduleFetch("Map", id, "effect", n, name); - for (unsigned i = 0; i < GetMapEffectCount(); ++i) - { - if (effects[i].GetName() == n) - return &effects[i]; - } - LogSubmoduleFetchFail("Map", id, "effect", n, name); - return NULL; -} - -unsigned PokeGen::PokeMod::Map::GetMapEffectCount() const -{ - LogSubmoduleCount("Map", id, "effects", name); - return effects.size(); -} - -void PokeGen::PokeMod::Map::NewMapEffect(Ini *const ini) -{ - unsigned i = 0; - for (; i < GetMapEffectCount(); ++i) - { - if (!GetMapEffect(i)) - break; - } - MapEffect newMapEffect(pokemod, i); - if (ini) - newMapEffect.ImportIni(*ini); - LogSubmoduleNew("Map", id, "effect", i, name); - effects.append(newMapEffect); -} - -void PokeGen::PokeMod::Map::DeleteMapEffect(const unsigned _id) -{ - LogSubmoduleRemoveStart("Map", id, "effect", _id, name); - for (QList::Iterator i = effects.begin(); i != effects.end(); ++i) - { - if (i->GetId() == _id) - { - LogSubmoduleRemoved("Map", id, "effect", _id, name); - effects.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "effect", _id, name); -} - -void PokeGen::PokeMod::Map::DeleteMapEffect(const QString &n) -{ - LogSubmoduleRemoveStart("Map", id, "effect", n, name); - for (QList::Iterator i = effects.begin(); i != effects.end(); ++i) - { - if (i->GetName() == n) - { - LogSubmoduleRemoved("Map", id, "effect", n, name); - effects.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "effect", n, name); -} - -const PokeGen::PokeMod::MapTrainer *PokeGen::PokeMod::Map::GetMapTrainer(const unsigned _id) const -{ - LogSubmoduleFetch("Map", id, "trainer", _id, name); - for (unsigned i = 0; i < GetMapTrainerCount(); ++i) - { - if (trainers[i].GetId() == _id) - return &trainers[i]; - } - LogSubmoduleFetchFail("Map", id, "trainer", _id, name); - return NULL; -} - -const PokeGen::PokeMod::MapTrainer *PokeGen::PokeMod::Map::GetMapTrainer(const QString &n) const -{ - LogSubmoduleFetch("Map", id, "trainer", n, name); - for (unsigned i = 0; i < GetMapTrainerCount(); ++i) - { - if (trainers[i].GetName() == n) - return &trainers[i]; - } - LogSubmoduleFetchFail("Map", id, "trainer", n, name); - return NULL; -} - -unsigned PokeGen::PokeMod::Map::GetMapTrainerCount() const -{ - LogSubmoduleCount("Map", id, "trainer", name); - return trainers.size(); -} - -void PokeGen::PokeMod::Map::NewMapTrainer(Ini *const ini) -{ - unsigned i = 0; - for (; i < GetMapTrainerCount(); ++i) - { - if (!GetMapTrainer(i)) - break; - } - MapTrainer newMapTrainer(pokemod, i); - if (ini) - newMapTrainer.ImportIni(*ini); - LogSubmoduleNew("Map", id, "trainer", i, name); - trainers.append(newMapTrainer); -} - -void PokeGen::PokeMod::Map::DeleteMapTrainer(const unsigned _id) -{ - LogSubmoduleRemoveStart("Map", id, "trainer", _id, name); - for (QList::Iterator i = trainers.begin(); i != trainers.end(); ++i) - { - if (i->GetId() == _id) - { - LogSubmoduleRemoved("Map", id, "trainer", _id, name); - trainers.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "trainer", _id, name); -} - -void PokeGen::PokeMod::Map::DeleteMapTrainer(const QString &n) -{ - LogSubmoduleRemoveStart("Map", id, "trainer", n, name); - for (QList::Iterator i = trainers.begin(); i != trainers.end(); ++i) - { - if (i->GetName() == n) - { - LogSubmoduleRemoved("Map", id, "trainer", n, name); - trainers.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "trainer", n, name); -} - -const PokeGen::PokeMod::MapWarp *PokeGen::PokeMod::Map::GetMapWarp(const unsigned _id) const -{ - LogSubmoduleFetch("Map", id, "warp", _id, name); - for (unsigned i = 0; i < GetMapWarpCount(); ++i) - { - if (warps[i].GetId() == _id) - return &warps[i]; - } - LogSubmoduleFetchFail("Map", id, "warp", _id, name); - return NULL; -} - -const PokeGen::PokeMod::MapWarp *PokeGen::PokeMod::Map::GetMapWarp(const QString &n) const -{ - LogSubmoduleFetch("Map", id, "warp", n, name); - for (unsigned i = 0; i < GetMapWarpCount(); ++i) - { - if (warps[i].GetName() == n) - return &warps[i]; - } - LogSubmoduleFetchFail("Map", id, "warp", n, name); - return NULL; -} - -unsigned PokeGen::PokeMod::Map::GetMapWarpCount() const -{ - LogSubmoduleCount("Map", id, "warp", name); - return warps.size(); -} - -void PokeGen::PokeMod::Map::NewMapWarp(Ini *const ini) -{ - unsigned i = 0; - for (; i < GetMapWarpCount(); ++i) - { - if (!GetMapWarp(i)) - break; - } - MapWarp newMapWarp(pokemod, i); - if (ini) - newMapWarp.ImportIni(*ini); - LogSubmoduleNew("Map", id, "warp", i, name); - warps.append(newMapWarp); -} - -void PokeGen::PokeMod::Map::DeleteMapWarp(const unsigned _id) -{ - LogSubmoduleRemoveStart("Map", id, "warp", _id, name); - for (QList::Iterator i = warps.begin(); i != warps.end(); ++i) - { - if (i->GetId() == _id) - { - LogSubmoduleRemoved("Map", id, "warp", _id, name); - warps.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "warp", _id, name); -} - -void PokeGen::PokeMod::Map::DeleteMapWarp(const QString &n) -{ - LogSubmoduleRemoveStart("Map", id, "warp", n, name); - for (QList::Iterator i = warps.begin(); i != warps.end(); ++i) - { - if (i->GetName() == n) - { - LogSubmoduleRemoved("Map", id, "warp", n, name); - warps.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "warp", n, name); -} - -const PokeGen::PokeMod::MapWildList *PokeGen::PokeMod::Map::GetMapWildList(const unsigned _id) const -{ - LogSubmoduleFetch("Map", id, "wild list", _id, name); - for (unsigned i = 0; i < GetMapWildListCount(); ++i) - { - if (wildLists[i].GetId() == _id) - return &wildLists[i]; - } - LogSubmoduleFetchFail("Map", id, "wild list", _id, name); - return NULL; -} - -unsigned PokeGen::PokeMod::Map::GetMapWildListCount() const -{ - LogSubmoduleCount("Map", id, "wild list", name); - return wildLists.size(); -} - -void PokeGen::PokeMod::Map::NewMapWildList(Ini *const ini) -{ - unsigned i = 0; - for (; i < GetMapWildListCount(); ++i) - { - if (!GetMapWildList(i)) - break; - } - MapWildList newMapWildList(pokemod, i); - if (ini) - newMapWildList.ImportIni(*ini); - LogSubmoduleNew("Map", id, "wild list", i, name); - wildLists.append(newMapWildList); -} - -void PokeGen::PokeMod::Map::DeleteMapWildList(const unsigned _id) -{ - LogSubmoduleRemoveStart("Map", id, "wild list", _id, name); - for (QList::Iterator i = wildLists.begin(); i != wildLists.end(); ++i) - { - if (i->GetId() == _id) - { - LogSubmoduleRemoved("Map", id, "wild list", _id, name); - wildLists.erase(i); - } - } - LogSubmoduleRemoveFail("Map", id, "wild list", _id, name); -} +///////////////////////////////////////////////////////////////////////////// +// Name: pokemod/Map.cpp +// Purpose: Define a map for the game +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Mon May 28 21:45:48 2007 +// Copyright: ©2007 Nerdy Productions +// Licence: +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTMap or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see . +///////////////////////////////////////////////////////////////////////////// + +#include "Map.h" + +PokeGen::PokeMod::Map::Map(const Pokemod* par, const unsigned _id) : + Object(_id, par), + name(""), + flyWarp(UINT_MAX), + type(UINT_MAX) +{ +} + +PokeGen::PokeMod::Map::Map(const Pokemod* par, Ini& ini, const unsigned _id) : + Object(_id, par) +{ + ImportIni(ini, _id); +} + +bool PokeGen::PokeMod::Map::Validate() +{ + pokemod->ValidationMsg(QString("---Map \"%1\" with id %2---").arg(name).arg(id), Pokemod::V_Msg); + if (name == "") + { + pokemod->ValidationMsg("name is not defined"); + isValid = false; + } + if ((flyWarp != UINT_MAX) && (GetWarpByID(flyWarp) == UINT_MAX)) + { + pokemod->ValidationMsg("Invalid fly destination warp"); + isValid = false; + } + if (type < End) + { + pokemod->ValidationMsg("Invalid type"); + isValid = false; + } + QMap idChecker; + QMap nameChecker; + if (GetEffectCount()) + { + for (QList::Iterator i = effects.begin(); i != effects.end(); ++i) + { + if (!i->IsValid()) + isValid = false; + if (GetWidth() <= i->GetCoordinateX()) + { + pokemod->ValidationMsg("Invalid x coordinate"); + isValid = false; + } + if (GetHeight() <= i->GetCoordinateY()) + { + pokemod->ValidationMsg("Invalid y coordinate"); + isValid = false; + } + ++idChecker[i->GetId()]; + ++nameChecker[i->GetName()]; + } + for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 effects with id %2").arg(i.value()).arg(i.key())); + isValid = false; + } + } + for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 effects with the name \"%2\"").arg(i.value()).arg(i.key())); + isValid = false; + } + } + idChecker.clear(); + nameChecker.clear(); + } + else + pokemod->ValidationMsg("There are no effects", Pokemod::V_Warn); + if (GetTrainerCount()) + { + for (QList::Iterator i = trainers.begin(); i != trainers.end(); ++i) + { + if (!i->IsValid()) + isValid = false; + if (GetWidth() <= i->GetCoordinateX()) + { + pokemod->ValidationMsg("Invalid x coordinate"); + isValid = false; + } + if (GetHeight() <= i->GetCoordinateY()) + { + pokemod->ValidationMsg("Invalid y coordinate"); + isValid = false; + } + ++idChecker[i->GetId()]; + ++nameChecker[i->GetName()]; + } + for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 trainers with id %2").arg(i.value()).arg(i.key())); + isValid = false; + } + } + for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 trainers with the name \"%2\"").arg(i.value()).arg(i.key())); + isValid = false; + } + } + idChecker.clear(); + nameChecker.clear(); + } + else + pokemod->ValidationMsg("There are no trainers", Pokemod::V_Warn); + if (GetWarpCount()) + { + for (QList::Iterator i = warps.begin(); i != warps.end(); ++i) + { + if (!i->IsValid()) + isValid = false; + if (GetWidth() <= i->GetCoordinateX()) + { + pokemod->ValidationMsg("Invalid x coordinate"); + isValid = false; + } + if (GetHeight() <= i->GetCoordinateY()) + { + pokemod->ValidationMsg("Invalid y coordinate"); + isValid = false; + } + ++idChecker[i->GetId()]; + ++nameChecker[i->GetName()]; + } + for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 warps with id %2").arg(i.value()).arg(i.key())); + isValid = false; + } + } + for (QMap::ConstIterator i = nameChecker.begin(); i != nameChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 warps with the name \"%2\"").arg(i.value()).arg(i.key())); + isValid = false; + } + } + idChecker.clear(); + nameChecker.clear(); + } + else + { + pokemod->ValidationMsg("There are no warps"); + isValid = false; + } + if (GetWildListCount()) + { + for (QList::Iterator i = wildLists.begin(); i != wildLists.end(); ++i) + { + if (!i->IsValid()) + isValid = false; + ++idChecker[i->GetId()]; + } + for (QMap::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 wild lists with id %2").arg(i.value()).arg(i.key())); + isValid = false; + } + } + idChecker.clear(); + } + else + pokemod->ValidationMsg("There are no effects", Pokemod::V_Warn); + for (unsigned i = 0; i < GetWidth(); ++i) + { + for (unsigned j = 0; j < GetHeight(); ++j) + { + if (!pokemod->GetTile(tiles(i, j))) + { + pokemod->ValidationMsg(QString("Invalid tile at (%1, %2)").arg(i).arg(j)); + isValid = false; + } + } + } + return isValid; +} + +void PokeGen::PokeMod::Map::ImportIni(Ini& ini, const unsigned _id) +{ + if (_id == UINT_MAX) + ini.GetValue("id", id); + else + id = _id; + unsigned i; + unsigned j; + ini.GetValue("name", name); + ini.GetValue("flyWarp", flyWarp); + ini.GetValue("type", type); + ini.GetValue("width", i, 0); + ini.GetValue("height", j, 0); + tiles.Resize(i, j, Frac(1, 1)); + for (unsigned i = 0; i < GetWidth(); ++i) + { + for (unsigned j = 0; j < GetHeight(); ++j) + ini.GetValue(QString("tiles-%1-%2").arg(i).arg(j), tiles(i, j)); + } + effects.clear(); + trainers.clear(); + warps.clear(); + wildLists.clear(); +} + +void PokeGen::PokeMod::Map::ExportIni(QFile& fout) const +{ + Ini exMap("Map"); + exMap.AddField("id", id); + exMap.AddField("name", name); + exMap.AddField("flyWarp", flyWarp); + exMap.AddField("type", type); + exMap.AddField("width", GetWidth()); + exMap.AddField("height", GetHeight()); + for (unsigned i = 0; i < GetWidth(); ++i) + { + for (unsigned j = 0; j < GetWidth(); ++j) + exMap.AddField(QString("tiles-%1-%2").arg(i).arg(j), tiles(i, j)); + } + exMap.Export(fout); + for (QList::ConstIterator i = effects.begin(); i != effects.end(); ++i) + i->ExportIni(fout, name); + for (QList::ConstIterator j = trainers.begin(); j != trainers.end(); ++j) + j->ExportIni(fout, name); + for (QList::ConstIterator k = warps.begin(); k != warps.end(); ++k) + k->ExportIni(fout, name); + for (QList::ConstIterator l = wildLists.begin(); l != wildLists.end(); ++l) + l->ExportIni(fout, name); +} + +void PokeGen::PokeMod::Map::SetName(const QString& n) +{ + name = n; +} + +bool PokeGen::PokeMod::Map::SetFlyWarp(const unsigned f) +{ + if (GetWarpByID(f) != UINT_MAX) + flyWarp = f; + return (flyWarp == f); +} + +bool PokeGen::PokeMod::Map::SetType(const unsigned t) +{ + if (t < End) + type = t; + return (type == t); +} + +QString PokeGen::PokeMod::Map::GetName() const +{ + return name; +} + +unsigned PokeGen::PokeMod::Map::GetFlyWarp() const +{ + return flyWarp; +} + +unsigned PokeGen::PokeMod::Map::GetType() const +{ + return type; +} + +bool PokeGen::PokeMod::Map::SetTile(unsigned x, unsigned y, unsigned _id) +{ + if (pokemod->GetTileByID(_id) != UINT_MAX) + tiles(x, y) = _id; + return (tiles(x, y) == _id); +} + +bool PokeGen::PokeMod::Map::InsertColumn(unsigned x) +{ + return tiles.InsertCol(x, 0); +} + +bool PokeGen::PokeMod::Map::InsertRow(unsigned y) +{ + return tiles.InsertRow(y, 0); +} + +void PokeGen::PokeMod::Map::AddColumn() +{ + tiles.AddCol(0); +} + +void PokeGen::PokeMod::Map::AddRow() +{ + tiles.AddRow(0); +} + +bool PokeGen::PokeMod::Map::DeleteColumn(unsigned x) +{ + return tiles.DeleteCol(x); +} + +bool PokeGen::PokeMod::Map::DeleteRow(unsigned y) +{ + return tiles.DeleteRow(y); +} + +unsigned PokeGen::PokeMod::Map::GetTile(unsigned x, unsigned y) const +{ + return tiles(x, y); +} + +unsigned PokeGen::PokeMod::Map::GetWidth() const +{ + return tiles.GetWidth(); +} + +unsigned PokeGen::PokeMod::Map::GetHeight() const +{ + return tiles.GetHeight(); +} + +const PokeGen::PokeMod::MapEffect* PokeGen::PokeMod::Map::GetEffect(const unsigned i) const +{ + if (i < GetEffectCount()) + return &effects[i]; + return NULL; +} + +unsigned PokeGen::PokeMod::Map::GetEffectByID(const unsigned _id) const +{ + for (unsigned i = 0; i < GetEffectCount(); ++i) + { + if (effects[i].GetId() == _id) + return i; + } + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::Map::GetEffectCount() const +{ + return effects.size(); +} + +const PokeGen::PokeMod::MapEffect* PokeGen::PokeMod::Map::NewEffect(Ini* const ini) +{ + unsigned i = 0; + for (; i < GetEffectCount(); ++i) + { + if (GetEffectByID(i) == UINT_MAX) + break; + } + MapEffect newEffect(pokemod, i); + if (ini) + newEffect.ImportIni(*ini); + effects.append(newEffect); + return &effects[GetEffectCount() - 1]; +} + +bool PokeGen::PokeMod::Map::DeleteEffect(const unsigned i) +{ + if (i < GetEffectCount()) + { + effects.erase(effects.begin() + i); + return true; + } + return false; +} + +const PokeGen::PokeMod::MapTrainer* PokeGen::PokeMod::Map::GetTrainer(const unsigned i) const +{ + if (i < GetTrainerCount()) + return &trainers[i]; + return NULL; +} + +unsigned PokeGen::PokeMod::Map::GetTrainerByID(const unsigned _id) const +{ + for (unsigned i = 0; i < GetTrainerCount(); ++i) + { + if (trainers[i].GetId() == _id) + return i; + } + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::Map::GetTrainerCount() const +{ + return trainers.size(); +} + +const PokeGen::PokeMod::MapTrainer* PokeGen::PokeMod::Map::NewTrainer(Ini* const ini) +{ + unsigned i = 0; + for (; i < GetTrainerCount(); ++i) + { + if (GetTrainerByID(i) == UINT_MAX) + break; + } + MapTrainer newTrainer(pokemod, i); + if (ini) + newTrainer.ImportIni(*ini); + trainers.append(newTrainer); + return &trainers[GetTrainerCount() - 1]; +} + +bool PokeGen::PokeMod::Map::DeleteTrainer(const unsigned i) +{ + if (i < GetTrainerCount()) + { + trainers.erase(trainers.begin() + i); + return true; + } + return false; +} + +const PokeGen::PokeMod::MapWarp* PokeGen::PokeMod::Map::GetWarp(const unsigned i) const +{ + if (i < GetWarpCount()) + return &warps[i]; + return NULL; +} + +unsigned PokeGen::PokeMod::Map::GetWarpByID(const unsigned _id) const +{ + for (unsigned i = 0; i < GetWarpCount(); ++i) + { + if (warps[i].GetId() == _id) + return i; + } + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::Map::GetWarpCount() const +{ + return warps.size(); +} + +const PokeGen::PokeMod::MapWarp* PokeGen::PokeMod::Map::NewWarp(Ini* const ini) +{ + unsigned i = 0; + for (; i < GetWarpCount(); ++i) + { + if (GetWarpByID(i) == UINT_MAX) + break; + } + MapWarp newWarp(pokemod, i); + if (ini) + newWarp.ImportIni(*ini); + warps.append(newWarp); + return &warps[GetWarpCount() - 1]; +} + +bool PokeGen::PokeMod::Map::DeleteWarp(const unsigned i) +{ + if (i < GetWarpCount()) + { + warps.erase(warps.begin() + i); + return true; + } + return false; +} + +const PokeGen::PokeMod::MapWildList* PokeGen::PokeMod::Map::GetWildList(const unsigned i) const +{ + if (i < GetWildListCount()) + return &wildLists[i]; + return NULL; +} + +unsigned PokeGen::PokeMod::Map::GetWildListByID(const unsigned _id) const +{ + for (unsigned i = 0; i < GetWildListCount(); ++i) + { + if (wildLists[i].GetId() == _id) + return i; + } + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::Map::GetWildListCount() const +{ + return wildLists.size(); +} + +const PokeGen::PokeMod::MapWildList* PokeGen::PokeMod::Map::NewWildList(Ini* const ini) +{ + unsigned i = 0; + for (; i < GetWildListCount(); ++i) + { + if (GetWildListByID(i) == UINT_MAX) + break; + } + MapWildList newWildList(pokemod, i); + if (ini) + newWildList.ImportIni(*ini); + wildLists.append(newWildList); + return &wildLists[GetWildListCount() - 1]; +} + +bool PokeGen::PokeMod::Map::DeleteWildList(const unsigned i) +{ + if (i < GetWildListCount()) + { + wildLists.erase(wildLists.begin() + i); + return true; + } + return false; +} -- cgit