diff options
Diffstat (limited to 'sigmod/Game.cpp')
| -rw-r--r-- | sigmod/Game.cpp | 37 |
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); |
