summaryrefslogtreecommitdiffstats
path: root/sigmod/Game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmod/Game.cpp')
-rw-r--r--sigmod/Game.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/sigmod/Game.cpp b/sigmod/Game.cpp
index e66955a6..3ee95120 100644
--- a/sigmod/Game.cpp
+++ b/sigmod/Game.cpp
@@ -91,6 +91,7 @@ void Game::validate()
emit(error("Version is empty"));
if (m_description.isEmpty())
emit(warning("Description is empty"));
+ // TODO: check map positioning
if ((m_typechart.width() != typeCount()) || (m_typechart.height() != typeCount()))
emit(error("Type chart is invalid"));
TEST_CHILD(m_rules);
@@ -301,6 +302,7 @@ void Game::load(const QDomElement& xml)
LOAD_SUB(newTrainer, Trainer);
LOAD_SUB(newType, Type);
LOAD_SUB(newWeather, Weather);
+ LOAD_MAP(mapPosition, position);
LOAD_MATRIX(typechart);
m_typechart.resize(typeCount(), typeCount());
}
@@ -315,6 +317,7 @@ QDomElement Game::save() const
SAVE(singlePlayer);
SAVE(startScript);
SAVE_Rules(rules);
+ SAVE_MAP(mapPosition, position);
SAVE_MATRIX(typechart);
SAVE_SUB(Ability, abilities);
SAVE_SUB(Author, authors);
@@ -346,6 +349,26 @@ SETTER(Game, QString&, Version, version)
SETTER(Game, QString&, Description, description)
SETTER(Game, bool, SinglePlayer, singlePlayer)
SETTER(Game, Script&, StartScript, startScript)
+
+void Game::setMapPosition(const int map, const QPoint& position, const bool remove)
+{
+ if (remove)
+ {
+ if (m_mapPosition.contains(map))
+ {
+ m_mapPosition.remove(map);
+ emit(changed());
+ }
+ }
+ else if (!mapById(map))
+ EBOUNDS_IDX(map);
+ else if (!m_mapPosition.contains(map) || (position != m_mapPosition[map]))
+ {
+ m_mapPosition[map] = position;
+ emit(changed());
+ }
+}
+
SETTER_MATRIX(Game, Fraction&, Typechart, typechart, multiplier)
void Game::setRules(const Rules& rules)
@@ -379,6 +402,18 @@ Fraction Game::typechart(const int attack, const int defense) const
return m_typechart(attack, defense);
}
+QPoint Game::mapPosition(const int map) const
+{
+ if (m_mapPosition.contains(map))
+ return m_mapPosition[map];
+ return QPoint();
+}
+
+QMap<int, QPoint> Game::mapPosition() const
+{
+ return m_mapPosition;
+}
+
const Rules* Game::rules() const
{
return m_rules;
@@ -395,6 +430,7 @@ CHECK(Game, QString&, description)
CHECK(Game, bool, singlePlayer)
CHECK(Game, Script&, startScript)
CHECK_BOUNDS(Game, Fraction&, typechart, 0, INT_MAX)
+CHECK(Game, QPoint&, mapPosition)
SSUBCLASS(Game, Ability, ability, abilities)
SSUBCLASS(Game, Author, author, authors)
@@ -513,6 +549,7 @@ Game& Game::operator=(const Game& rhs)
COPY(description);
COPY(singlePlayer);
COPY(startScript);
+ COPY(mapPosition);
COPY(typechart);
COPY_Rules(rules);
COPY_SUB(Ability, abilities);