mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-19 21:10:12 +02:00
Fix compilation with latest develop
This commit is contained in:
parent
4cb31ea912
commit
6d92a66fea
@ -371,7 +371,7 @@ void MainWindow::on_actionSave_triggered()
|
||||
saveMap();
|
||||
}
|
||||
|
||||
void MainWindow::terrainButtonClicked(Terrain terrain)
|
||||
void MainWindow::terrainButtonClicked(TerrainId terrain)
|
||||
{
|
||||
controller.commitTerrainChange(mapLevel, terrain);
|
||||
}
|
||||
@ -484,11 +484,11 @@ void MainWindow::loadObjectsTree()
|
||||
{
|
||||
ui->terrainFilterCombo->addItem("");
|
||||
//adding terrains
|
||||
for(auto & terrain : Terrain::Manager::terrains())
|
||||
for(auto & terrain : VLC->terrainTypeHandler->terrains())
|
||||
{
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(terrain));
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(terrain.name));
|
||||
ui->terrainLayout->addWidget(b);
|
||||
connect(b, &QPushButton::clicked, this, [this, terrain]{ terrainButtonClicked(terrain); });
|
||||
connect(b, &QPushButton::clicked, this, [this, terrain]{ terrainButtonClicked(terrain.id); });
|
||||
|
||||
//filter
|
||||
ui->terrainFilterCombo->addItem(QString::fromStdString(terrain));
|
||||
@ -496,20 +496,20 @@ void MainWindow::loadObjectsTree()
|
||||
//add spacer to keep terrain button on the top
|
||||
ui->terrainLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
||||
//adding roads
|
||||
for(auto & road : ROAD_NAMES)
|
||||
for(auto & road : VLC->terrainTypeHandler->roads())
|
||||
{
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(road));
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(road.fileName));
|
||||
ui->roadLayout->addWidget(b);
|
||||
connect(b, &QPushButton::clicked, this, [this, road]{ roadOrRiverButtonClicked(road, true); });
|
||||
connect(b, &QPushButton::clicked, this, [this, road]{ roadOrRiverButtonClicked(road.code, true); });
|
||||
}
|
||||
//add spacer to keep terrain button on the top
|
||||
ui->roadLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
||||
//adding rivers
|
||||
for(auto & river : RIVER_NAMES)
|
||||
for(auto & river : VLC->terrainTypeHandler->rivers())
|
||||
{
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(river));
|
||||
QPushButton *b = new QPushButton(QString::fromStdString(river.fileName));
|
||||
ui->riverLayout->addWidget(b);
|
||||
connect(b, &QPushButton::clicked, this, [this, river]{ roadOrRiverButtonClicked(river, false); });
|
||||
connect(b, &QPushButton::clicked, this, [this, river]{ roadOrRiverButtonClicked(river.code, false); });
|
||||
}
|
||||
//add spacer to keep terrain button on the top
|
||||
ui->riverLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
||||
@ -875,7 +875,7 @@ void MainWindow::on_terrainFilterCombo_currentTextChanged(const QString &arg1)
|
||||
if(!objectBrowser)
|
||||
return;
|
||||
|
||||
objectBrowser->terrain = arg1.isEmpty() ? Terrain::ANY : Terrain(arg1.toStdString());
|
||||
objectBrowser->terrain = arg1.isEmpty() ? Terrain::ANY_TERRAIN : VLC->terrainTypeHandler->getInfoByName(arg1.toStdString())->id;
|
||||
objectBrowser->invalidate();
|
||||
objectBrowser->sort(0);
|
||||
}
|
||||
@ -1062,12 +1062,12 @@ void MainWindow::on_actionUpdate_appearance_triggered()
|
||||
continue;
|
||||
}
|
||||
|
||||
auto terrain = controller.map()->getTile(obj->visitablePos()).terType;
|
||||
auto * terrain = controller.map()->getTile(obj->visitablePos()).terType;
|
||||
|
||||
if(handler->isStaticObject())
|
||||
{
|
||||
staticObjects.insert(obj);
|
||||
if(obj->appearance->canBePlacedAt(terrain))
|
||||
if(obj->appearance->canBePlacedAt(terrain->id))
|
||||
{
|
||||
controller.scene(mapLevel)->selectionObjectsView.deselectObject(obj);
|
||||
continue;
|
||||
@ -1078,13 +1078,13 @@ void MainWindow::on_actionUpdate_appearance_triggered()
|
||||
}
|
||||
else
|
||||
{
|
||||
auto app = handler->getOverride(terrain, obj);
|
||||
auto app = handler->getOverride(terrain->id, obj);
|
||||
if(!app)
|
||||
{
|
||||
if(obj->appearance->canBePlacedAt(terrain))
|
||||
if(obj->appearance->canBePlacedAt(terrain->id))
|
||||
continue;
|
||||
|
||||
auto templates = handler->getTemplates(terrain);
|
||||
auto templates = handler->getTemplates(terrain->id);
|
||||
if(templates.empty())
|
||||
{
|
||||
++errors;
|
||||
|
@ -69,7 +69,7 @@ private slots:
|
||||
|
||||
void on_toolArea_clicked(bool checked);
|
||||
|
||||
void terrainButtonClicked(Terrain terrain);
|
||||
void terrainButtonClicked(TerrainId terrain);
|
||||
void roadOrRiverButtonClicked(std::string type, bool isRoad);
|
||||
|
||||
void on_toolErase_clicked();
|
||||
|
@ -236,7 +236,7 @@ void MapController::resetMapHandler()
|
||||
_miniscenes[1]->initialize(*this);
|
||||
}
|
||||
|
||||
void MapController::commitTerrainChange(int level, const Terrain & terrain)
|
||||
void MapController::commitTerrainChange(int level, const TerrainId & terrain)
|
||||
{
|
||||
std::vector<int3> v(_scenes[level]->selectionTerrainView.selection().begin(),
|
||||
_scenes[level]->selectionTerrainView.selection().end());
|
||||
@ -269,9 +269,9 @@ void MapController::commitRoadOrRiverChange(int level, const std::string & type,
|
||||
|
||||
_map->getEditManager()->getTerrainSelection().setSelection(v);
|
||||
if(isRoad)
|
||||
_map->getEditManager()->drawRoad(type, &CRandomGenerator::getDefault());
|
||||
_map->getEditManager()->drawRoad(VLC->terrainTypeHandler->getRoadByName(type)->id, &CRandomGenerator::getDefault());
|
||||
else
|
||||
_map->getEditManager()->drawRiver(type, &CRandomGenerator::getDefault());
|
||||
_map->getEditManager()->drawRiver(VLC->terrainTypeHandler->getRiverByName(type)->id, &CRandomGenerator::getDefault());
|
||||
|
||||
for(auto & t : v)
|
||||
_scenes[level]->terrainView.setDirty(t);
|
||||
@ -342,14 +342,14 @@ void MapController::commitObstacleFill(int level)
|
||||
return;
|
||||
|
||||
//split by zones
|
||||
std::map<Terrain, ObstacleProxy> terrainSelected;
|
||||
std::map<TerrainId, ObstacleProxy> terrainSelected;
|
||||
for(auto & t : selection)
|
||||
{
|
||||
auto tl = _map->getTile(t);
|
||||
if(tl.blocked || tl.visitable)
|
||||
continue;
|
||||
|
||||
terrainSelected[tl.terType].blockedArea.add(t);
|
||||
terrainSelected[tl.terType->id].blockedArea.add(t);
|
||||
}
|
||||
|
||||
for(auto & sel : terrainSelected)
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void sceneForceUpdate();
|
||||
void sceneForceUpdate(int level);
|
||||
|
||||
void commitTerrainChange(int level, const Terrain & terrain);
|
||||
void commitTerrainChange(int level, const TerrainId & terrain);
|
||||
void commitRoadOrRiverChange(int level, const std::string & type, bool isRoad);
|
||||
void commitObjectErase(const CGObjectInstance* obj);
|
||||
void commitObjectErase(int level);
|
||||
|
@ -50,22 +50,6 @@ void MapHandler::reset(const CMap * Map)
|
||||
|
||||
void MapHandler::initTerrainGraphics()
|
||||
{
|
||||
static const std::map<std::string, std::string> ROAD_FILES =
|
||||
{
|
||||
{ROAD_NAMES[1], "dirtrd"},
|
||||
{ROAD_NAMES[2], "gravrd"},
|
||||
{ROAD_NAMES[3], "cobbrd"}
|
||||
};
|
||||
|
||||
static const std::map<std::string, std::string> RIVER_FILES =
|
||||
{
|
||||
{RIVER_NAMES[1], "clrrvr"},
|
||||
{RIVER_NAMES[2], "icyrvr"},
|
||||
{RIVER_NAMES[3], "mudrvr"},
|
||||
{RIVER_NAMES[4], "lavrvr"}
|
||||
};
|
||||
|
||||
|
||||
auto loadFlipped = [](TFlippedAnimations & animation, TFlippedCache & cache, const std::map<std::string, std::string> & files)
|
||||
{
|
||||
for(auto & type : files)
|
||||
@ -81,14 +65,24 @@ void MapHandler::initTerrainGraphics()
|
||||
};
|
||||
|
||||
std::map<std::string, std::string> terrainFiles;
|
||||
for(auto & terrain : Terrain::Manager::terrains())
|
||||
std::map<std::string, std::string> roadFiles;
|
||||
std::map<std::string, std::string> riverFiles;
|
||||
for(const auto & terrain : VLC->terrainTypeHandler->terrains())
|
||||
{
|
||||
terrainFiles[terrain] = Terrain::Manager::getInfo(terrain).tilesFilename;
|
||||
terrainFiles[terrain.name] = terrain.tilesFilename;
|
||||
}
|
||||
for(const auto & river : VLC->terrainTypeHandler->rivers())
|
||||
{
|
||||
riverFiles[river.fileName] = river.fileName;
|
||||
}
|
||||
for(const auto & road : VLC->terrainTypeHandler->roads())
|
||||
{
|
||||
roadFiles[road.fileName] = road.fileName;
|
||||
}
|
||||
|
||||
loadFlipped(terrainAnimations, terrainImages, terrainFiles);
|
||||
loadFlipped(roadAnimations, roadImages, ROAD_FILES);
|
||||
loadFlipped(riverAnimations, riverImages, RIVER_FILES);
|
||||
loadFlipped(riverAnimations, riverImages, riverFiles);
|
||||
loadFlipped(roadAnimations, roadImages, roadFiles);
|
||||
}
|
||||
|
||||
void MapHandler::drawTerrainTile(QPainter & painter, int x, int y, int z)
|
||||
@ -96,37 +90,43 @@ void MapHandler::drawTerrainTile(QPainter & painter, int x, int y, int z)
|
||||
auto & tinfo = map->getTile(int3(x, y, z));
|
||||
ui8 rotation = tinfo.extTileFlags % 4;
|
||||
|
||||
if(terrainImages.at(tinfo.terType).size() <= tinfo.terView)
|
||||
//TODO: use ui8 instead of string key
|
||||
auto terrainName = tinfo.terType->name;
|
||||
|
||||
if(terrainImages.at(terrainName).size() <= tinfo.terView)
|
||||
return;
|
||||
|
||||
bool hflip = (rotation == 1 || rotation == 3), vflip = (rotation == 2 || rotation == 3);
|
||||
painter.drawImage(x * tileSize, y * tileSize, terrainImages.at(tinfo.terType)[tinfo.terView]->mirrored(hflip, vflip));
|
||||
painter.drawImage(x * tileSize, y * tileSize, terrainImages.at(terrainName)[tinfo.terView]->mirrored(hflip, vflip));
|
||||
}
|
||||
|
||||
void MapHandler::drawRoad(QPainter & painter, int x, int y, int z)
|
||||
{
|
||||
auto & tinfo = map->getTile(int3(x, y, z));
|
||||
auto * tinfoUpper = map->isInTheMap(int3(x, y - 1, z)) ? &map->getTile(int3(x, y - 1, z)) : nullptr;
|
||||
|
||||
if (tinfoUpper && tinfoUpper->roadType != ROAD_NAMES[0])
|
||||
|
||||
//TODO: use ui8 instead of string key
|
||||
auto roadName = tinfo.terType->name;
|
||||
|
||||
if (tinfoUpper && tinfoUpper->roadType->id != Road::NO_ROAD)
|
||||
{
|
||||
QRect source(0, tileSize / 2, tileSize, tileSize / 2);
|
||||
ui8 rotation = (tinfoUpper->extTileFlags >> 4) % 4;
|
||||
bool hflip = (rotation == 1 || rotation == 3), vflip = (rotation == 2 || rotation == 3);
|
||||
if(roadImages.at(tinfoUpper->roadType).size() > tinfoUpper->roadDir)
|
||||
if(roadImages.at(roadName).size() > tinfoUpper->roadDir)
|
||||
{
|
||||
painter.drawImage(QPoint(x * tileSize, y * tileSize), roadImages.at(tinfoUpper->roadType)[tinfoUpper->roadDir]->mirrored(hflip, vflip), source);
|
||||
painter.drawImage(QPoint(x * tileSize, y * tileSize), roadImages.at(roadName)[tinfoUpper->roadDir]->mirrored(hflip, vflip), source);
|
||||
}
|
||||
}
|
||||
|
||||
if(tinfo.roadType != ROAD_NAMES[0]) //print road from this tile
|
||||
if(tinfo.roadType->id != Road::NO_ROAD) //print road from this tile
|
||||
{
|
||||
QRect source(0, 0, tileSize, tileSize / 2);
|
||||
ui8 rotation = (tinfo.extTileFlags >> 4) % 4;
|
||||
bool hflip = (rotation == 1 || rotation == 3), vflip = (rotation == 2 || rotation == 3);
|
||||
if(roadImages.at(tinfo.roadType).size() > tinfo.roadDir)
|
||||
if(roadImages.at(roadName).size() > tinfo.roadDir)
|
||||
{
|
||||
painter.drawImage(QPoint(x * tileSize, y * tileSize + tileSize / 2), roadImages.at(tinfo.roadType)[tinfo.roadDir]->mirrored(hflip, vflip), source);
|
||||
painter.drawImage(QPoint(x * tileSize, y * tileSize + tileSize / 2), roadImages.at(roadName)[tinfo.roadDir]->mirrored(hflip, vflip), source);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -135,16 +135,19 @@ void MapHandler::drawRiver(QPainter & painter, int x, int y, int z)
|
||||
{
|
||||
auto & tinfo = map->getTile(int3(x, y, z));
|
||||
|
||||
if(tinfo.riverType == RIVER_NAMES[0])
|
||||
if(tinfo.riverType->id == River::NO_RIVER)
|
||||
return;
|
||||
|
||||
//TODO: use ui8 instead of string key
|
||||
auto riverName = tinfo.terType->name;
|
||||
|
||||
if(riverImages.at(tinfo.riverType).size() <= tinfo.riverDir)
|
||||
if(riverImages.at(riverName).size() <= tinfo.riverDir)
|
||||
return;
|
||||
|
||||
ui8 rotation = (tinfo.extTileFlags >> 2) % 4;
|
||||
bool hflip = (rotation == 1 || rotation == 3), vflip = (rotation == 2 || rotation == 3);
|
||||
|
||||
painter.drawImage(x * tileSize, y * tileSize, riverImages.at(tinfo.riverType)[tinfo.riverDir]->mirrored(hflip, vflip));
|
||||
painter.drawImage(x * tileSize, y * tileSize, riverImages.at(riverName)[tinfo.riverDir]->mirrored(hflip, vflip));
|
||||
}
|
||||
|
||||
void setPlayerColor(QImage * sur, PlayerColor player)
|
||||
@ -411,10 +414,12 @@ QRgb MapHandler::getTileColor(int x, int y, int z)
|
||||
}
|
||||
|
||||
// else - use terrain color (blocked version or normal)
|
||||
|
||||
auto & tile = map->getTile(int3(x, y, z));
|
||||
auto color = Terrain::Manager::getInfo(tile.terType).minimapUnblocked;
|
||||
|
||||
auto color = tile.terType->minimapUnblocked;
|
||||
if (tile.blocked && (!tile.visitable))
|
||||
color = Terrain::Manager::getInfo(tile.terType).minimapBlocked;
|
||||
color = tile.terType->minimapBlocked;
|
||||
|
||||
return qRgb(color[0], color[1], color[2]);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "../lib/mapObjects/CObjectClassesHandler.h"
|
||||
|
||||
ObjectBrowser::ObjectBrowser(QObject *parent)
|
||||
: QSortFilterProxyModel{parent}, terrain(Terrain::ANY)
|
||||
: QSortFilterProxyModel{parent}, terrain(Terrain::ANY_TERRAIN)
|
||||
{
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ bool ObjectBrowser::filterAcceptsRow(int source_row, const QModelIndex & source_
|
||||
if(!filterAcceptsRowText(source_row, source_parent))
|
||||
return false;
|
||||
|
||||
if(terrain == Terrain::ANY)
|
||||
if(terrain == Terrain::ANY_TERRAIN)
|
||||
return result;
|
||||
|
||||
auto data = item->data().toJsonObject();
|
||||
|
@ -8,7 +8,7 @@ class ObjectBrowser : public QSortFilterProxyModel
|
||||
public:
|
||||
explicit ObjectBrowser(QObject *parent = nullptr);
|
||||
|
||||
Terrain terrain;
|
||||
TerrainId terrain;
|
||||
QString filter;
|
||||
|
||||
protected:
|
||||
|
Loading…
x
Reference in New Issue
Block a user