mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-15 01:24:45 +02:00
Fix flips for terrains
This commit is contained in:
@ -95,7 +95,7 @@ MainWindow::~MainWindow()
|
|||||||
|
|
||||||
void MainWindow::on_actionOpen_triggered()
|
void MainWindow::on_actionOpen_triggered()
|
||||||
{
|
{
|
||||||
/*auto filename = QFileDialog::getOpenFileName(this, tr("Open Image"), QString::fromStdString(VCMIDirs::get().userCachePath().native()), tr("Homm3 Files (*.vmap *.h3m)"));
|
auto filename = QFileDialog::getOpenFileName(this, tr("Open Image"), QString::fromStdString(VCMIDirs::get().userCachePath().native()), tr("Homm3 Files (*.vmap *.h3m)"));
|
||||||
|
|
||||||
if(filename.isNull())
|
if(filename.isNull())
|
||||||
return;
|
return;
|
||||||
@ -103,8 +103,8 @@ void MainWindow::on_actionOpen_triggered()
|
|||||||
QFileInfo fi(filename);
|
QFileInfo fi(filename);
|
||||||
std::string fname = fi.fileName().toStdString();
|
std::string fname = fi.fileName().toStdString();
|
||||||
std::string fdir = fi.dir().path().toStdString();
|
std::string fdir = fi.dir().path().toStdString();
|
||||||
ResourceID resId("MAPS/" + fname, EResType::MAP);*/
|
ResourceID resId("MAPS/" + fname, EResType::MAP);
|
||||||
ResourceID resId("MAPS/SomeMap.vmap", EResType::MAP);
|
//ResourceID resId("MAPS/SomeMap.vmap", EResType::MAP);
|
||||||
|
|
||||||
if(!CResourceHandler::get()->existsResource(resId))
|
if(!CResourceHandler::get()->existsResource(resId))
|
||||||
{
|
{
|
||||||
|
@ -43,38 +43,15 @@ void MapHandler::initTerrainGraphics()
|
|||||||
|
|
||||||
auto loadFlipped = [](TFlippedAnimations & animation, TFlippedCache & cache, const std::map<std::string, std::string> & files)
|
auto loadFlipped = [](TFlippedAnimations & animation, TFlippedCache & cache, const std::map<std::string, std::string> & files)
|
||||||
{
|
{
|
||||||
//no rotation and basic setup
|
|
||||||
for(auto & type : files)
|
for(auto & type : files)
|
||||||
{
|
{
|
||||||
animation[type.first][0] = make_unique<Animation>(type.second);
|
animation[type.first] = make_unique<Animation>(type.second);
|
||||||
animation[type.first][0]->preload();
|
animation[type.first]->preload();
|
||||||
const size_t views = animation[type.first][0]->size(0);
|
const size_t views = animation[type.first]->size(0);
|
||||||
cache[type.first].resize(views);
|
cache[type.first].resize(views);
|
||||||
|
|
||||||
for(int j = 0; j < views; j++)
|
for(int j = 0; j < views; j++)
|
||||||
cache[type.first][j][0] = animation[type.first][0]->getImage(j);
|
cache[type.first][j] = animation[type.first]->getImage(j);
|
||||||
}
|
|
||||||
|
|
||||||
for(int rotation = 1; rotation < 4; rotation++)
|
|
||||||
{
|
|
||||||
for(auto & type : files)
|
|
||||||
{
|
|
||||||
animation[type.first][rotation] = make_unique<Animation>(type.second);
|
|
||||||
animation[type.first][rotation]->preload();
|
|
||||||
const size_t views = animation[type.first][rotation]->size(0);
|
|
||||||
|
|
||||||
for(int j = 0; j < views; j++)
|
|
||||||
{
|
|
||||||
auto image = animation[type.first][rotation]->getImage(j);
|
|
||||||
|
|
||||||
//if(rotation == 2 || rotation == 3)
|
|
||||||
//image->horizontalFlip();
|
|
||||||
//if(rotation == 1 || rotation == 3)
|
|
||||||
//image->verticalFlip();
|
|
||||||
|
|
||||||
cache[type.first][j][rotation] = image;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -98,7 +75,9 @@ void MapHandler::drawTerrainTile(int x, int y, const TerrainTile & tinfo)
|
|||||||
if(terrainImages.at(tinfo.terType).size() <= tinfo.terView)
|
if(terrainImages.at(tinfo.terType).size() <= tinfo.terView)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
painter.drawImage(x * tileSize, y * tileSize, *terrainImages.at(tinfo.terType)[tinfo.terView][rotation]);
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapHandler::initObjectRects()
|
void MapHandler::initObjectRects()
|
||||||
|
@ -27,8 +27,8 @@ public:
|
|||||||
//terrain graphics
|
//terrain graphics
|
||||||
|
|
||||||
//FIXME: unique_ptr should be enough, but fails to compile in MSVS 2013
|
//FIXME: unique_ptr should be enough, but fails to compile in MSVS 2013
|
||||||
typedef std::map<std::string, std::array<std::shared_ptr<Animation>, 4>> TFlippedAnimations; //[type, rotation]
|
typedef std::map<std::string, std::shared_ptr<Animation>> TFlippedAnimations; //[type, rotation]
|
||||||
typedef std::map<std::string, std::vector<std::array<std::shared_ptr<QImage>, 4>>> TFlippedCache;//[type, view type, rotation]
|
typedef std::map<std::string, std::vector<std::shared_ptr<QImage>>> TFlippedCache;//[type, view type, rotation]
|
||||||
|
|
||||||
TFlippedAnimations terrainAnimations;//[terrain type, rotation]
|
TFlippedAnimations terrainAnimations;//[terrain type, rotation]
|
||||||
TFlippedCache terrainImages;//[terrain type, view type, rotation]
|
TFlippedCache terrainImages;//[terrain type, view type, rotation]
|
||||||
|
Reference in New Issue
Block a user