Skip to content

Commit d71fc85

Browse files
authored
Move editor envelope creation into action, select after adding (ddnet#11024)
2 parents 9329e0e + 3153b8b commit d71fc85

File tree

4 files changed

+31
-34
lines changed

4 files changed

+31
-34
lines changed

src/game/editor/editor.cpp

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5082,7 +5082,6 @@ void CEditor::RenderEnvelopeEditor(CUIRect View)
50825082
static int s_ActiveChannels = 0xf;
50835083
{
50845084
CUIRect Button;
5085-
std::shared_ptr<CEnvelope> pNewEnv = nullptr;
50865085

50875086
// redo button
50885087
ToolBar.VSplitRight(25.0f, &ToolBar, &Button);
@@ -5105,26 +5104,26 @@ void CEditor::RenderEnvelopeEditor(CUIRect View)
51055104
static int s_NewSoundButton = 0;
51065105
if(DoButton_Editor(&s_NewSoundButton, "Sound+", 0, &Button, BUTTONFLAG_LEFT, "Create a new sound envelope."))
51075106
{
5108-
m_Map.OnModify();
5109-
pNewEnv = m_Map.NewEnvelope(CEnvelope::EType::SOUND);
5107+
m_EnvelopeEditorHistory.Execute(std::make_shared<CEditorActionEnvelopeAdd>(this, CEnvelope::EType::SOUND));
5108+
pEnvelope = m_Map.m_vpEnvelopes[m_SelectedEnvelope];
51105109
}
51115110

51125111
ToolBar.VSplitRight(5.0f, &ToolBar, nullptr);
51135112
ToolBar.VSplitRight(50.0f, &ToolBar, &Button);
51145113
static int s_New4dButton = 0;
51155114
if(DoButton_Editor(&s_New4dButton, "Color+", 0, &Button, BUTTONFLAG_LEFT, "Create a new color envelope."))
51165115
{
5117-
m_Map.OnModify();
5118-
pNewEnv = m_Map.NewEnvelope(CEnvelope::EType::COLOR);
5116+
m_EnvelopeEditorHistory.Execute(std::make_shared<CEditorActionEnvelopeAdd>(this, CEnvelope::EType::COLOR));
5117+
pEnvelope = m_Map.m_vpEnvelopes[m_SelectedEnvelope];
51195118
}
51205119

51215120
ToolBar.VSplitRight(5.0f, &ToolBar, nullptr);
51225121
ToolBar.VSplitRight(50.0f, &ToolBar, &Button);
51235122
static int s_New2dButton = 0;
51245123
if(DoButton_Editor(&s_New2dButton, "Pos.+", 0, &Button, BUTTONFLAG_LEFT, "Create a new position envelope."))
51255124
{
5126-
m_Map.OnModify();
5127-
pNewEnv = m_Map.NewEnvelope(CEnvelope::EType::POSITION);
5125+
m_EnvelopeEditorHistory.Execute(std::make_shared<CEditorActionEnvelopeAdd>(this, CEnvelope::EType::POSITION));
5126+
pEnvelope = m_Map.m_vpEnvelopes[m_SelectedEnvelope];
51285127
}
51295128

51305129
if(m_SelectedEnvelope >= 0)
@@ -5213,22 +5212,6 @@ void CEditor::RenderEnvelopeEditor(CUIRect View)
52135212
ToolBar.VSplitRight(7.0f, &ToolBar, nullptr);
52145213
}
52155214

5216-
if(pNewEnv) // add the default points
5217-
{
5218-
if(pNewEnv->GetChannels() == 4)
5219-
{
5220-
pNewEnv->AddPoint(CFixedTime::FromSeconds(0.0f), {f2fx(1.0f), f2fx(1.0f), f2fx(1.0f), f2fx(1.0f)});
5221-
pNewEnv->AddPoint(CFixedTime::FromSeconds(1.0f), {f2fx(1.0f), f2fx(1.0f), f2fx(1.0f), f2fx(1.0f)});
5222-
}
5223-
else
5224-
{
5225-
pNewEnv->AddPoint(CFixedTime::FromSeconds(0.0f), {0, 0, 0, 0});
5226-
pNewEnv->AddPoint(CFixedTime::FromSeconds(1.0f), {0, 0, 0, 0});
5227-
}
5228-
5229-
m_EnvelopeEditorHistory.RecordAction(std::make_shared<CEditorActionEnvelopeAdd>(this, pNewEnv));
5230-
}
5231-
52325215
CUIRect Shifter, Inc, Dec;
52335216
ToolBar.VSplitLeft(60.0f, &Shifter, &ToolBar);
52345217
Shifter.VSplitRight(15.0f, &Shifter, &Inc);

src/game/editor/editor_actions.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,23 +1431,26 @@ void CEditorCommandAction::Redo()
14311431

14321432
// ------------------------------------------------
14331433

1434-
CEditorActionEnvelopeAdd::CEditorActionEnvelopeAdd(CEditor *pEditor, const std::shared_ptr<CEnvelope> &pEnv) :
1435-
IEditorAction(pEditor), m_pEnv(pEnv)
1434+
CEditorActionEnvelopeAdd::CEditorActionEnvelopeAdd(CEditor *pEditor, CEnvelope::EType EnvelopeType) :
1435+
IEditorAction(pEditor),
1436+
m_EnvelopeType(EnvelopeType)
14361437
{
1437-
str_format(m_aDisplayText, sizeof(m_aDisplayText), "Add new %s envelope", pEnv->Type() == CEnvelope::EType::COLOR ? "color" : (pEnv->Type() == CEnvelope::EType::POSITION ? "position" : "sound"));
1438+
str_format(m_aDisplayText, sizeof(m_aDisplayText), "Add new %s envelope", EnvelopeType == CEnvelope::EType::COLOR ? "color" : (EnvelopeType == CEnvelope::EType::POSITION ? "position" : "sound"));
1439+
m_PreviousSelectedEnvelope = m_pEditor->m_SelectedEnvelope;
14381440
}
14391441

14401442
void CEditorActionEnvelopeAdd::Undo()
14411443
{
14421444
// Undo is removing the envelope, which was added at the back of the list
14431445
m_pEditor->m_Map.m_vpEnvelopes.pop_back();
1444-
m_pEditor->m_SelectedEnvelope = m_pEditor->m_Map.m_vpEnvelopes.size() - 1;
1446+
m_pEditor->m_Map.OnModify();
1447+
m_pEditor->m_SelectedEnvelope = m_PreviousSelectedEnvelope;
14451448
}
14461449

14471450
void CEditorActionEnvelopeAdd::Redo()
14481451
{
1449-
// Redo is adding back at the back the saved envelope
1450-
m_pEditor->m_Map.m_vpEnvelopes.push_back(m_pEnv);
1452+
// Redo is adding a new envelope at the back of the list
1453+
m_pEditor->m_Map.NewEnvelope(m_EnvelopeType);
14511454
m_pEditor->m_SelectedEnvelope = m_pEditor->m_Map.m_vpEnvelopes.size() - 1;
14521455
}
14531456

src/game/editor/editor_actions.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,13 +377,14 @@ class CEditorCommandAction : public IEditorAction
377377
class CEditorActionEnvelopeAdd : public IEditorAction
378378
{
379379
public:
380-
CEditorActionEnvelopeAdd(CEditor *pEditor, const std::shared_ptr<CEnvelope> &pEnv);
380+
CEditorActionEnvelopeAdd(CEditor *pEditor, CEnvelope::EType EnvelopeType);
381381

382382
void Undo() override;
383383
void Redo() override;
384384

385385
private:
386-
std::shared_ptr<CEnvelope> m_pEnv;
386+
CEnvelope::EType m_EnvelopeType;
387+
int m_PreviousSelectedEnvelope;
387388
};
388389

389390
class CEditorActionEnvelopeDelete : public IEditorAction

src/game/editor/mapitems/map.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,19 @@ void CEditorMap::ResetModifiedState()
4646
std::shared_ptr<CEnvelope> CEditorMap::NewEnvelope(CEnvelope::EType Type)
4747
{
4848
OnModify();
49-
std::shared_ptr<CEnvelope> pEnv = std::make_shared<CEnvelope>(Type);
50-
m_vpEnvelopes.push_back(pEnv);
51-
return pEnv;
49+
std::shared_ptr<CEnvelope> pEnvelope = std::make_shared<CEnvelope>(Type);
50+
if(Type == CEnvelope::EType::COLOR)
51+
{
52+
pEnvelope->AddPoint(CFixedTime::FromSeconds(0.0f), {f2fx(1.0f), f2fx(1.0f), f2fx(1.0f), f2fx(1.0f)});
53+
pEnvelope->AddPoint(CFixedTime::FromSeconds(1.0f), {f2fx(1.0f), f2fx(1.0f), f2fx(1.0f), f2fx(1.0f)});
54+
}
55+
else
56+
{
57+
pEnvelope->AddPoint(CFixedTime::FromSeconds(0.0f), {0, 0, 0, 0});
58+
pEnvelope->AddPoint(CFixedTime::FromSeconds(1.0f), {0, 0, 0, 0});
59+
}
60+
m_vpEnvelopes.push_back(pEnvelope);
61+
return pEnvelope;
5262
}
5363

5464
void CEditorMap::InsertEnvelope(int Index, std::shared_ptr<CEnvelope> &pEnvelope)

0 commit comments

Comments
 (0)