From 4874f75bc09db253b38cba526530bcce71025cbf Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Wed, 18 Sep 2024 20:38:11 +0800 Subject: [PATCH] Select previous layer after deletion --- src/game/editor/editor.cpp | 122 ++++++++++++++++-------------- src/game/editor/editor.h | 3 + src/game/editor/quick_actions.cpp | 2 + 3 files changed, 71 insertions(+), 56 deletions(-) diff --git a/src/game/editor/editor.cpp b/src/game/editor/editor.cpp index deac86abe..847846f5c 100644 --- a/src/game/editor/editor.cpp +++ b/src/game/editor/editor.cpp @@ -738,6 +738,70 @@ std::pair CEditor::EnvGetSelectedTimeAndValue() const return std::pair{CurrentTime, CurrentValue}; } +void CEditor::SelectNextLayer() +{ + if(Input()->ShiftIsPressed()) + { + if(m_vSelectedLayers[m_vSelectedLayers.size() - 1] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1) + AddSelectedLayer(m_vSelectedLayers[m_vSelectedLayers.size() - 1] + 1); + } + else + { + int CurrentLayer = 0; + for(const auto &Selected : m_vSelectedLayers) + CurrentLayer = maximum(Selected, CurrentLayer); + SelectLayer(CurrentLayer); + + if(m_vSelectedLayers[0] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1) + { + SelectLayer(m_vSelectedLayers[0] + 1); + } + else + { + for(size_t Group = m_SelectedGroup + 1; Group < m_Map.m_vpGroups.size(); Group++) + { + if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty()) + { + SelectLayer(0, Group); + break; + } + } + } + } +} + +void CEditor::SelectPreviousLayer() +{ + if(Input()->ShiftIsPressed()) + { + if(m_vSelectedLayers[m_vSelectedLayers.size() - 1] > 0) + AddSelectedLayer(m_vSelectedLayers[m_vSelectedLayers.size() - 1] - 1); + } + else + { + int CurrentLayer = std::numeric_limits::max(); + for(const auto &Selected : m_vSelectedLayers) + CurrentLayer = minimum(Selected, CurrentLayer); + SelectLayer(CurrentLayer); + + if(m_vSelectedLayers[0] > 0) + { + SelectLayer(m_vSelectedLayers[0] - 1); + } + else + { + for(int Group = m_SelectedGroup - 1; Group >= 0; Group--) + { + if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty()) + { + SelectLayer(m_Map.m_vpGroups[Group]->m_vpLayers.size() - 1, Group); + break; + } + } + } + } +} + bool CEditor::CallbackOpenMap(const char *pFileName, int StorageType, void *pUser) { CEditor *pEditor = (CEditor *)pUser; @@ -4204,66 +4268,12 @@ void CEditor::RenderLayers(CUIRect LayersBox) if(Input()->KeyPress(KEY_DOWN) && m_Dialog == DIALOG_NONE && !Ui()->IsPopupOpen() && CLineInput::GetActiveInput() == nullptr && s_Operation == OP_NONE) { - if(Input()->ShiftIsPressed()) - { - if(m_vSelectedLayers[m_vSelectedLayers.size() - 1] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1) - AddSelectedLayer(m_vSelectedLayers[m_vSelectedLayers.size() - 1] + 1); - } - else - { - int CurrentLayer = 0; - for(const auto &Selected : m_vSelectedLayers) - CurrentLayer = maximum(Selected, CurrentLayer); - SelectLayer(CurrentLayer); - - if(m_vSelectedLayers[0] < (int)m_Map.m_vpGroups[m_SelectedGroup]->m_vpLayers.size() - 1) - { - SelectLayer(m_vSelectedLayers[0] + 1); - } - else - { - for(size_t Group = m_SelectedGroup + 1; Group < m_Map.m_vpGroups.size(); Group++) - { - if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty()) - { - SelectLayer(0, Group); - break; - } - } - } - } + SelectNextLayer(); s_ScrollToSelectionNext = true; } if(Input()->KeyPress(KEY_UP) && m_Dialog == DIALOG_NONE && !Ui()->IsPopupOpen() && CLineInput::GetActiveInput() == nullptr && s_Operation == OP_NONE) { - if(Input()->ShiftIsPressed()) - { - if(m_vSelectedLayers[m_vSelectedLayers.size() - 1] > 0) - AddSelectedLayer(m_vSelectedLayers[m_vSelectedLayers.size() - 1] - 1); - } - else - { - int CurrentLayer = std::numeric_limits::max(); - for(const auto &Selected : m_vSelectedLayers) - CurrentLayer = minimum(Selected, CurrentLayer); - SelectLayer(CurrentLayer); - - if(m_vSelectedLayers[0] > 0) - { - SelectLayer(m_vSelectedLayers[0] - 1); - } - else - { - for(int Group = m_SelectedGroup - 1; Group >= 0; Group--) - { - if(!m_Map.m_vpGroups[Group]->m_vpLayers.empty()) - { - SelectLayer(m_Map.m_vpGroups[Group]->m_vpLayers.size() - 1, Group); - break; - } - } - } - } + SelectPreviousLayer(); s_ScrollToSelectionNext = true; } diff --git a/src/game/editor/editor.h b/src/game/editor/editor.h index a52c9d73c..d1d3e04f9 100644 --- a/src/game/editor/editor.h +++ b/src/game/editor/editor.h @@ -324,6 +324,9 @@ public: const CMapView *MapView() const { return &m_MapView; } CLayerSelector *LayerSelector() { return &m_LayerSelector; } + void SelectNextLayer(); + void SelectPreviousLayer(); + void FillGameTiles(EGameTileOp FillTile) const; bool CanFillGameTiles() const; void AddGroup(); diff --git a/src/game/editor/quick_actions.cpp b/src/game/editor/quick_actions.cpp index 59b1b48e9..5dcbfa279 100644 --- a/src/game/editor/quick_actions.cpp +++ b/src/game/editor/quick_actions.cpp @@ -120,4 +120,6 @@ void CEditor::DeleteSelectedLayer() if(pCurrentLayer == m_Map.m_pTuneLayer) m_Map.m_pTuneLayer = nullptr; m_Map.m_vpGroups[m_SelectedGroup]->DeleteLayer(m_vSelectedLayers[0]); + + SelectPreviousLayer(); }