mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-30 00:36:39 +00:00
Only iterate through temporary selection when using toggle
This commit is contained in:
parent
46960825ef
commit
55456a19fc
3 changed files with 26 additions and 18 deletions
|
@ -64,7 +64,6 @@ void CSVRender::TerrainSelection::toggleSelect(const std::vector<std::pair<int,
|
|||
void CSVRender::TerrainSelection::clearTemporarySelection()
|
||||
{
|
||||
mTemporarySelection.clear();
|
||||
update();
|
||||
}
|
||||
|
||||
void CSVRender::TerrainSelection::activate()
|
||||
|
@ -211,45 +210,50 @@ void CSVRender::TerrainSelection::handleSelection(const std::vector<std::pair<in
|
|||
{
|
||||
for (auto const& localPos : localPositions)
|
||||
{
|
||||
auto iterTemp = std::find(mTemporarySelection.begin(), mTemporarySelection.end(), localPos);
|
||||
const auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
|
||||
if (iterTemp == mTemporarySelection.end())
|
||||
switch (selectionMethod)
|
||||
{
|
||||
const auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
case SelectionMethod::OnlySelect:
|
||||
break;
|
||||
|
||||
switch (selectionMethod)
|
||||
{
|
||||
case SelectionMethod::AddSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SelectionMethod::RemoveSelect:
|
||||
if (iter != mSelection.end())
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SelectionMethod::ToggleSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
const auto iterTemp = std::find(mTemporarySelection.begin(), mTemporarySelection.end(), localPos);
|
||||
if (iterTemp == mTemporarySelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
mTemporarySelection.emplace_back(localPos);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
mTemporarySelection.emplace_back(localPos);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ void CSVRender::TerrainShapeMode::primarySelectPressed(const WorldspaceHitResult
|
|||
if(hit.hit && hit.tag == nullptr)
|
||||
{
|
||||
selectTerrainShapes(CSMWorld::CellCoordinates::toVertexCoords(hit.worldPos), 0);
|
||||
mTerrainShapeSelection->clearTemporarySelection();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,6 +124,7 @@ void CSVRender::TerrainShapeMode::secondarySelectPressed(const WorldspaceHitResu
|
|||
if(hit.hit && hit.tag == nullptr)
|
||||
{
|
||||
selectTerrainShapes(CSMWorld::CellCoordinates::toVertexCoords(hit.worldPos), 1);
|
||||
mTerrainShapeSelection->clearTemporarySelection();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -130,6 +130,7 @@ void CSVRender::TerrainTextureMode::primarySelectPressed(const WorldspaceHitResu
|
|||
if(hit.hit && hit.tag == nullptr)
|
||||
{
|
||||
selectTerrainTextures(CSMWorld::CellCoordinates::toTextureCoords(hit.worldPos), 0);
|
||||
mTerrainTextureSelection->clearTemporarySelection();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,6 +139,7 @@ void CSVRender::TerrainTextureMode::secondarySelectPressed(const WorldspaceHitRe
|
|||
if(hit.hit && hit.tag == nullptr)
|
||||
{
|
||||
selectTerrainTextures(CSMWorld::CellCoordinates::toTextureCoords(hit.worldPos), 1);
|
||||
mTerrainTextureSelection->clearTemporarySelection();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue