mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-25 22:42:04 +02:00
Improve editor performance
This commit is contained in:
@@ -229,7 +229,7 @@ void MapController::setMap(std::unique_ptr<CMap> cmap)
|
||||
_miniscenes[i].reset(new MinimapScene(i));
|
||||
}
|
||||
resetMapHandler();
|
||||
sceneForceUpdate();
|
||||
initializeMap();
|
||||
|
||||
connectScenes();
|
||||
|
||||
@@ -256,21 +256,24 @@ void MapController::initObstaclePainters(CMap * map)
|
||||
}
|
||||
}
|
||||
|
||||
void MapController::initializeMap()
|
||||
{
|
||||
for(int i = 0; i < _map->mapLevels; i++)
|
||||
{
|
||||
_scenes[i]->createMap();
|
||||
_miniscenes[i]->createMap();
|
||||
}
|
||||
}
|
||||
|
||||
void MapController::sceneForceUpdate()
|
||||
{
|
||||
for(int i = 0; i < _map->mapLevels; i++)
|
||||
{
|
||||
_scenes[i]->updateViews();
|
||||
_miniscenes[i]->updateViews();
|
||||
_scenes[i]->updateMap();
|
||||
_miniscenes[i]->updateMap();
|
||||
}
|
||||
}
|
||||
|
||||
void MapController::sceneForceUpdate(int level)
|
||||
{
|
||||
_scenes[level]->updateViews();
|
||||
_miniscenes[level]->updateViews();
|
||||
}
|
||||
|
||||
void MapController::resetMapHandler()
|
||||
{
|
||||
if(!_mapHandler)
|
||||
@@ -293,16 +296,13 @@ void MapController::commitTerrainChange(int level, const TerrainId & terrain)
|
||||
return;
|
||||
|
||||
_scenes[level]->selectionTerrainView.clear();
|
||||
_scenes[level]->selectionTerrainView.draw();
|
||||
|
||||
_map->getEditManager()->getTerrainSelection().setSelection(v);
|
||||
_map->getEditManager()->drawTerrain(terrain, terrainDecorationPercentageLevel, &CRandomGenerator::getDefault());
|
||||
|
||||
for(auto & t : v)
|
||||
_scenes[level]->terrainView.setDirty(t);
|
||||
_scenes[level]->terrainView.draw();
|
||||
_scenes[level]->terrainView.redrawTerrain(v);
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
@@ -314,19 +314,16 @@ void MapController::commitRoadOrRiverChange(int level, ui8 type, bool isRoad)
|
||||
return;
|
||||
|
||||
_scenes[level]->selectionTerrainView.clear();
|
||||
_scenes[level]->selectionTerrainView.draw();
|
||||
|
||||
_map->getEditManager()->getTerrainSelection().setSelection(v);
|
||||
if(isRoad)
|
||||
_map->getEditManager()->drawRoad(RoadId(type), &CRandomGenerator::getDefault());
|
||||
else
|
||||
_map->getEditManager()->drawRiver(RiverId(type), &CRandomGenerator::getDefault());
|
||||
|
||||
_scenes[level]->terrainView.redrawTerrain(v);
|
||||
|
||||
for(auto & t : v)
|
||||
_scenes[level]->terrainView.setDirty(t);
|
||||
_scenes[level]->terrainView.draw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
@@ -351,15 +348,13 @@ void MapController::commitObjectErase(int level)
|
||||
{
|
||||
//invalidate tiles under objects
|
||||
_mapHandler->removeObject(obj);
|
||||
_scenes[level]->objectsView.setDirty(obj);
|
||||
}
|
||||
_scenes[level]->objectsView.redrawObjects(selectedObjects);
|
||||
|
||||
_scenes[level]->selectionObjectsView.clear();
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->passabilityView.update();
|
||||
_scenes[level]->passabilityView.redraw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
@@ -407,11 +402,11 @@ void MapController::pasteFromClipboard(int level)
|
||||
if(!errors.isEmpty())
|
||||
QMessageBox::warning(main, QObject::tr("Can't place object"), errors.join('\n'));
|
||||
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->passabilityView.update();
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->objectsView.redraw();
|
||||
_scenes[level]->passabilityView.redraw();
|
||||
_scenes[level]->selectionObjectsView.redraw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
@@ -421,9 +416,8 @@ bool MapController::discardObject(int level) const
|
||||
if(_scenes[level]->selectionObjectsView.newObject)
|
||||
{
|
||||
_scenes[level]->selectionObjectsView.newObject.reset();
|
||||
_scenes[level]->selectionObjectsView.shift = QPoint(0, 0);
|
||||
_scenes[level]->selectionObjectsView.setShift(0, 0);
|
||||
_scenes[level]->selectionObjectsView.selectionMode = SelectionObjectsLayer::NOTHING;
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -433,7 +427,7 @@ void MapController::createObject(int level, std::shared_ptr<CGObjectInstance> ob
|
||||
{
|
||||
_scenes[level]->selectionObjectsView.newObject = obj;
|
||||
_scenes[level]->selectionObjectsView.selectionMode = SelectionObjectsLayer::MOVEMENT;
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->selectionObjectsView.redraw();
|
||||
}
|
||||
|
||||
void MapController::commitObstacleFill(int level)
|
||||
@@ -463,29 +457,26 @@ void MapController::commitObstacleFill(int level)
|
||||
for(auto o : sel.second->placeObstacles(CRandomGenerator::getDefault()))
|
||||
{
|
||||
_mapHandler->invalidate(o.get());
|
||||
_scenes[level]->objectsView.setDirty(o.get());
|
||||
_scenes[level]->objectsView.redrawObjects({o.get()});
|
||||
}
|
||||
}
|
||||
|
||||
_scenes[level]->selectionTerrainView.clear();
|
||||
_scenes[level]->selectionTerrainView.draw();
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->objectsView.update();
|
||||
_scenes[level]->passabilityView.update();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
void MapController::commitObjectChange(int level)
|
||||
{
|
||||
for( auto * o : _scenes[level]->selectionObjectsView.getSelection())
|
||||
_scenes[level]->objectsView.setDirty(o);
|
||||
_scenes[level]->objectsView.redrawObjects(_scenes[level]->selectionObjectsView.getSelection());
|
||||
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->passabilityView.update();
|
||||
_scenes[level]->selectionObjectsView.redraw();
|
||||
_scenes[level]->passabilityView.redraw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
@@ -502,29 +493,30 @@ void MapController::commitObjectShift(int level)
|
||||
bool makeShift = !shift.isNull();
|
||||
if(makeShift)
|
||||
{
|
||||
for(auto * obj : _scenes[level]->selectionObjectsView.getSelection())
|
||||
std::set<CGObjectInstance*> movedObjects = _scenes[level]->selectionObjectsView.getSelection();
|
||||
for(auto * obj : movedObjects)
|
||||
{
|
||||
int3 pos = obj->pos;
|
||||
pos.z = level;
|
||||
pos.x += shift.x(); pos.y += shift.y();
|
||||
|
||||
_scenes[level]->objectsView.setDirty(obj); //set dirty before movement
|
||||
_map->getEditManager()->moveObject(obj, pos);
|
||||
_mapHandler->invalidate(obj);
|
||||
}
|
||||
_scenes[level]->objectsView.redrawObjects(movedObjects);
|
||||
}
|
||||
|
||||
_scenes[level]->selectionObjectsView.newObject = nullptr;
|
||||
_scenes[level]->selectionObjectsView.shift = QPoint(0, 0);
|
||||
_scenes[level]->selectionObjectsView.setShift(0, 0);
|
||||
_scenes[level]->selectionObjectsView.selectionMode = SelectionObjectsLayer::NOTHING;
|
||||
|
||||
if(makeShift)
|
||||
{
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->passabilityView.update();
|
||||
_scenes[level]->objectsView.redraw();
|
||||
_scenes[level]->passabilityView.redraw();
|
||||
_scenes[level]->selectionObjectsView.redraw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
}
|
||||
@@ -547,16 +539,14 @@ void MapController::commitObjectCreate(int level)
|
||||
|
||||
_map->getEditManager()->insertObject(newObj);
|
||||
_mapHandler->invalidate(newObj.get());
|
||||
_scenes[level]->objectsView.setDirty(newObj.get());
|
||||
_scenes[level]->objectsView.redrawObjects({newObj.get()});
|
||||
|
||||
_scenes[level]->selectionObjectsView.newObject = nullptr;
|
||||
_scenes[level]->selectionObjectsView.shift = QPoint(0, 0);
|
||||
_scenes[level]->selectionObjectsView.setShift(0, 0);
|
||||
_scenes[level]->selectionObjectsView.selectionMode = SelectionObjectsLayer::NOTHING;
|
||||
_scenes[level]->objectsView.draw();
|
||||
_scenes[level]->selectionObjectsView.draw();
|
||||
_scenes[level]->passabilityView.update();
|
||||
_scenes[level]->passabilityView.redraw();
|
||||
|
||||
_miniscenes[level]->updateViews();
|
||||
_miniscenes[level]->updateMap();
|
||||
main->mapChanged();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user