From a9c71e39a494e9fa3b111abd7c1933c48873e8b3 Mon Sep 17 00:00:00 2001 From: sanderd17 Date: Sat, 17 Aug 2013 14:02:18 +0000 Subject: [PATCH] make new elevation tool more drastic + add RMB action This was SVN commit r13684. --- .../Sections/Terrain/Terrain.cpp | 2 +- .../ScenarioEditor/Tools/PikeElevation.cpp | 31 ++++++++++++++++--- .../Handlers/ElevationHandlers.cpp | 3 +- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Terrain/Terrain.cpp b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Terrain/Terrain.cpp index 8de1673eb7..f89ad9f3c4 100644 --- a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Terrain/Terrain.cpp +++ b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Terrain/Terrain.cpp @@ -181,7 +181,7 @@ TerrainSidebar::TerrainSidebar(ScenarioEditor& scenarioEditor, wxWindow* sidebar wxSizer* gridSizer = new wxGridSizer(4); gridSizer->Add(Tooltipped(new ToolButton(scenarioEditor.GetToolManager(), this, _("Modify"), _T("AlterElevation")), _("Brush with left mouse buttons to raise terrain,\nright mouse button to lower it")), wxSizerFlags().Expand()); - gridSizer->Add(Tooltipped(new ToolButton(scenarioEditor.GetToolManager(), this, _("Pike"), _T("PikeElevation")), + gridSizer->Add(Tooltipped(new ToolButton(scenarioEditor.GetToolManager(), this, _("Ridge"), _T("PikeElevation")), _("Brush with left mouse buttons to raise terrain,\nright mouse button to lower it")), wxSizerFlags().Expand()); gridSizer->Add(Tooltipped(new ToolButton(scenarioEditor.GetToolManager(), this, _("Smooth"), _T("SmoothElevation")), _("Brush with left mouse button to smooth terrain,\nright mouse button to roughen it")), wxSizerFlags().Expand()); diff --git a/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/PikeElevation.cpp b/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/PikeElevation.cpp index 72b0378164..2aee186c47 100644 --- a/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/PikeElevation.cpp +++ b/source/tools/atlas/AtlasUI/ScenarioEditor/Tools/PikeElevation.cpp @@ -28,6 +28,7 @@ class PikeElevation : public StateDrivenTool { DECLARE_DYNAMIC_CLASS(PikeElevation); + int m_Direction; // +1 = raise, -1 = lower Position m_Pos; public: @@ -55,7 +56,13 @@ public: if (evt.LeftDown()) { obj->m_Pos = Position(evt.GetPosition()); - SET_STATE(Piking); + SET_STATE(PikeRaising); + return true; + } + else if (evt.RightDown()) + { + obj->m_Pos = Position(evt.GetPosition()); + SET_STATE(PikeLowering); return true; } else if (evt.Moving()) @@ -86,7 +93,7 @@ public: bool OnMouse(PikeElevation* obj, wxMouseEvent& evt) { - if (evt.LeftUp()) + if (IsMouseUp(evt)) { SET_STATE(Waiting); return true; @@ -106,11 +113,27 @@ public: void OnTick(PikeElevation* obj, float dt) { - POST_COMMAND(PikeElevation, (obj->m_Pos, dt*4096.f*g_Brush_Elevation.GetStrength())); + POST_COMMAND(PikeElevation, (obj->m_Pos, dt*4096.f*GetDirection()*g_Brush_Elevation.GetStrength())); obj->m_Pos = Position::Unchanged(); } + + virtual bool IsMouseUp(wxMouseEvent& evt) = 0; + virtual int GetDirection() = 0; + }; + + struct sPikeRaising : public sPiking + { + bool IsMouseUp(wxMouseEvent& evt) { return evt.LeftUp(); } + int GetDirection() { return +1; } } - Piking; + PikeRaising; + + struct sPikeLowering : public sPiking + { + bool IsMouseUp(wxMouseEvent& evt) { return evt.RightUp(); } + int GetDirection() { return -1; } + } + PikeLowering; }; IMPLEMENT_DYNAMIC_CLASS(PikeElevation, StateDrivenTool); diff --git a/source/tools/atlas/GameInterface/Handlers/ElevationHandlers.cpp b/source/tools/atlas/GameInterface/Handlers/ElevationHandlers.cpp index a4ffcd5566..9272450cfa 100644 --- a/source/tools/atlas/GameInterface/Handlers/ElevationHandlers.cpp +++ b/source/tools/atlas/GameInterface/Handlers/ElevationHandlers.cpp @@ -415,7 +415,8 @@ BEGIN_COMMAND(PikeElevation) { float x = (float)dx - ((float)g_CurrentBrush.m_H - 1) / 2.f; float y = (float)dy - ((float)g_CurrentBrush.m_W - 1) / 2.f; - float distance = clamp(1 - (float)sqrt(x * x + y * y) / h, 0.f, 1.f); + float distance = clamp(1 - (float)sqrt(x * x + y * y) / h, 0.01f, 1.0f); + distance *= distance; m_TerrainDelta.RaiseVertex(x0 + dx, y0 + dy, (int)(amount * distance)); } }