diff options
Diffstat (limited to 'src/game/editor/ed_editor.cpp')
| -rw-r--r-- | src/game/editor/ed_editor.cpp | 68 |
1 files changed, 54 insertions, 14 deletions
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp index 015b9946..c75ff238 100644 --- a/src/game/editor/ed_editor.cpp +++ b/src/game/editor/ed_editor.cpp @@ -2286,31 +2286,18 @@ void CEditor::RenderStatusbar(CUIRect View) void CEditor::RenderEnvelopeEditor(CUIRect View) { if(m_SelectedEnvelope < 0) m_SelectedEnvelope = 0; - if(m_SelectedEnvelope >= m_Map.m_lEnvelopes.size()) m_SelectedEnvelope--; + if(m_SelectedEnvelope >= m_Map.m_lEnvelopes.size()) m_SelectedEnvelope = m_Map.m_lEnvelopes.size()-1; CEnvelope *pEnvelope = 0; if(m_SelectedEnvelope >= 0 && m_SelectedEnvelope < m_Map.m_lEnvelopes.size()) pEnvelope = m_Map.m_lEnvelopes[m_SelectedEnvelope]; - bool ShowColorBar = false; - if(pEnvelope && pEnvelope->m_Channels == 4) - ShowColorBar = true; - CUIRect ToolBar, CurveBar, ColorBar; View.HSplitTop(15.0f, &ToolBar, &View); View.HSplitTop(15.0f, &CurveBar, &View); ToolBar.Margin(2.0f, &ToolBar); CurveBar.Margin(2.0f, &CurveBar); - if(ShowColorBar) - { - View.HSplitTop(20.0f, &ColorBar, &View); - ColorBar.Margin(2.0f, &ColorBar); - RenderBackground(ColorBar, ms_CheckerTexture, 16.0f, 1.0f); - } - - RenderBackground(View, ms_CheckerTexture, 32.0f, 0.1f); - // do the toolbar { CUIRect Button; @@ -2327,6 +2314,21 @@ void CEditor::RenderEnvelopeEditor(CUIRect View) if(DoButton_Editor(&s_New2dButton, Localize("Pos.+"), 0, &Button, 0, Localize("Creates a new pos envelope"))) pNewEnv = m_Map.NewEnvelope(3); + // Delete button + if(m_SelectedEnvelope >= 0) + { + ToolBar.VSplitRight(10.0f, &ToolBar, &Button); + ToolBar.VSplitRight(50.0f, &ToolBar, &Button); + static int s_DelButton = 0; + if(DoButton_Editor(&s_DelButton, Localize("Delete"), 0, &Button, 0, Localize("Delete this envelope"))) + { + m_Map.DeleteEnvelope(m_SelectedEnvelope); + if(m_SelectedEnvelope >= m_Map.m_lEnvelopes.size()) + m_SelectedEnvelope = m_Map.m_lEnvelopes.size()-1; + pEnvelope = m_SelectedEnvelope >= 0 ? m_Map.m_lEnvelopes[m_SelectedEnvelope] : 0; + } + } + if(pNewEnv) // add the default points { if(pNewEnv->m_Channels == 4) @@ -2371,6 +2373,17 @@ void CEditor::RenderEnvelopeEditor(CUIRect View) } } + bool ShowColorBar = false; + if(pEnvelope && pEnvelope->m_Channels == 4) + { + ShowColorBar = true; + View.HSplitTop(20.0f, &ColorBar, &View); + ColorBar.Margin(2.0f, &ColorBar); + RenderBackground(ColorBar, ms_CheckerTexture, 16.0f, 1.0f); + } + + RenderBackground(View, ms_CheckerTexture, 32.0f, 0.1f); + if(pEnvelope) { static array<int> Selection; @@ -2900,6 +2913,33 @@ void CEditor::Reset(bool CreateDefault) m_MouseDeltaWy = 0; } +void CEditorMap::DeleteEnvelope(int Index) +{ + if(Index < 0 || Index >= m_lEnvelopes.size()) + return; + + // fix links between envelopes and quads + for(int i = 0; i < m_lGroups.size(); ++i) + for(int j = 0; j < m_lGroups[i]->m_lLayers.size(); ++j) + if(m_lGroups[i]->m_lLayers[j]->m_Type == LAYERTYPE_QUADS) + { + CLayerQuads *Layer = static_cast<CLayerQuads *>(m_lGroups[i]->m_lLayers[j]); + for(int k = 0; k < Layer->m_lQuads.size(); ++k) + { + if(Layer->m_lQuads[k].m_PosEnv == Index) + Layer->m_lQuads[k].m_PosEnv = -1; + else if(Layer->m_lQuads[k].m_PosEnv > Index) + Layer->m_lQuads[k].m_PosEnv--; + if(Layer->m_lQuads[k].m_ColorEnv == Index) + Layer->m_lQuads[k].m_ColorEnv = -1; + else if(Layer->m_lQuads[k].m_ColorEnv > Index) + Layer->m_lQuads[k].m_ColorEnv--; + } + } + + m_lEnvelopes.remove_index(Index); +} + void CEditorMap::MakeGameLayer(CLayer *pLayer) { m_pGameLayer = (CLayerGame *)pLayer; |