Skip to content

Commit 8eb8a33

Browse files
committed
Refactor tools to allow for the terrain editor to be a proper tool.
1 parent 90d45de commit 8eb8a33

File tree

15 files changed

+124
-45
lines changed

15 files changed

+124
-45
lines changed

toolkit/editor/editor/tools/rotatetool.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace Tools
3434
/**
3535
*/
3636
void
37-
RotateTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
37+
RotateTool::Update(Presentation::Modules::Viewport* viewport)
3838
{
3939
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
4040
Ptr<Input::Keyboard> keyboard = Input::InputServer::Instance()->GetDefaultKeyboard();
@@ -47,15 +47,15 @@ RotateTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPor
4747

4848
if (mouse->ButtonUp(Input::MouseButton::Code::LeftButton))
4949
{
50-
Tools::SelectionContext::PerformPicking(viewPortPosition, viewPortSize, camera);
50+
Tools::SelectionContext::PerformPicking(viewport->lastViewportImagePosition, viewport->lastViewportImageSize, &viewport->camera);
5151
}
5252
}
5353

5454
//------------------------------------------------------------------------------
5555
/**
5656
*/
5757
void
58-
RotateTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
58+
RotateTool::Render(Presentation::Modules::Viewport* viewport)
5959
{
6060
SelectionContext::ValidateSelection();
6161

@@ -66,7 +66,7 @@ RotateTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPor
6666

6767
Game::World* defaultWorld = Game::GetWorld(WORLD_DEFAULT);
6868
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
69-
Im3d::Im3dContext::SetViewportRect(viewPortPosition, viewPortSize);
69+
Im3d::Im3dContext::SetViewportRect(viewport->lastViewportImagePosition, viewport->lastViewportImageSize);
7070

7171
if (!this->translation.isDirty)
7272
{

toolkit/editor/editor/tools/rotatetool.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ class RotateTool : public ToolInterface
2727
{
2828
public:
2929
/// Call before Update
30-
void Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
30+
void Render(Presentation::Modules::Viewport* viewport) override;
3131
/// Call after render
32-
void Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
32+
void Update(Presentation::Modules::Viewport* viewport) override;
3333

3434
bool IsModifying() const override;
3535

toolkit/editor/editor/tools/scaletool.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace Tools
3434
/**
3535
*/
3636
void
37-
ScaleTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
37+
ScaleTool::Update(Presentation::Modules::Viewport* viewport)
3838
{
3939
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
4040
Ptr<Input::Keyboard> keyboard = Input::InputServer::Instance()->GetDefaultKeyboard();
@@ -47,15 +47,15 @@ ScaleTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPort
4747

4848
if (mouse->ButtonUp(Input::MouseButton::Code::LeftButton))
4949
{
50-
Tools::SelectionContext::PerformPicking(viewPortPosition, viewPortSize, camera);
50+
Tools::SelectionContext::PerformPicking(viewport->lastViewportImagePosition, viewport->lastViewportImageSize, &viewport->camera);
5151
}
5252
}
5353

5454
//------------------------------------------------------------------------------
5555
/**
5656
*/
5757
void
58-
ScaleTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
58+
ScaleTool::Render(Presentation::Modules::Viewport* viewport)
5959
{
6060
SelectionContext::ValidateSelection();
6161

@@ -66,7 +66,7 @@ ScaleTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPort
6666

6767
Game::World* defaultWorld = Game::GetWorld(WORLD_DEFAULT);
6868
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
69-
Im3d::Im3dContext::SetViewportRect(viewPortPosition, viewPortSize);
69+
Im3d::Im3dContext::SetViewportRect(viewport->lastViewportImagePosition, viewport->lastViewportImageSize);
7070

7171
if (!this->translation.isDirty)
7272
{

toolkit/editor/editor/tools/scaletool.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ class ScaleTool : public ToolInterface
2727
{
2828
public:
2929
/// Call before Update
30-
void Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
30+
void Render(Presentation::Modules::Viewport* viewport) override;
3131
/// Call after render
32-
void Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
32+
void Update(Presentation::Modules::Viewport* viewport) override;
3333

3434
bool IsModifying() const override;
3535

toolkit/editor/editor/tools/selectiontool.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace Tools
3232
/**
3333
*/
3434
void
35-
SelectionTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
35+
SelectionTool::Update(Presentation::Modules::Viewport* viewport)
3636
{
3737
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
3838
Ptr<Input::Keyboard> keyboard = Input::InputServer::Instance()->GetDefaultKeyboard();
@@ -45,15 +45,15 @@ SelectionTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& view
4545

4646
if (mouse->ButtonUp(Input::MouseButton::Code::LeftButton))
4747
{
48-
Tools::SelectionContext::PerformPicking(viewPortPosition, viewPortSize, camera);
48+
Tools::SelectionContext::PerformPicking(viewport->lastViewportImagePosition, viewport->lastViewportImageSize, &viewport->camera);
4949
}
5050
}
5151

5252
//------------------------------------------------------------------------------
5353
/**
5454
*/
5555
void
56-
SelectionTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
56+
SelectionTool::Render(Presentation::Modules::Viewport* viewport)
5757
{
5858
SelectionContext::ValidateSelection();
5959

@@ -64,7 +64,7 @@ SelectionTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& view
6464

6565
Game::World* defaultWorld = Game::GetWorld(WORLD_DEFAULT);
6666
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
67-
Im3d::Im3dContext::SetViewportRect(viewPortPosition, viewPortSize);
67+
Im3d::Im3dContext::SetViewportRect(viewport->lastViewportImagePosition, viewport->lastViewportImageSize);
6868

6969
Ptr<Input::Keyboard> keyboard = Input::InputServer::Instance()->GetDefaultKeyboard();
7070

@@ -93,17 +93,17 @@ SelectionTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& view
9393
}
9494

9595
Math::vec2 mousePos = mouse->GetScreenPosition();
96-
mousePos -= viewPortPosition;
97-
mousePos = { mousePos.x / viewPortSize.x, mousePos.y / viewPortSize.y };
96+
mousePos -= viewport->lastViewportImagePosition;
97+
mousePos = { mousePos.x / viewport->lastViewportImageSize.x, mousePos.y / viewport->lastViewportImageSize.y };
9898

99-
Math::mat4 const camTransform = Math::inverse(camera->GetViewTransform());
100-
Math::mat4 const invProj = Math::inverse(camera->GetProjectionTransform());
99+
Math::mat4 const camTransform = Math::inverse(viewport->camera.GetViewTransform());
100+
Math::mat4 const invProj = Math::inverse(viewport->camera.GetProjectionTransform());
101101

102102
Math::line ray = RenderUtil::MouseRayUtil::ComputeWorldMouseRay(mousePos, 10000, camTransform, invProj, 0.01f);
103103

104104
if (this->translation.dragTimer.Running() && !this->translation.isDirty)
105105
{
106-
this->translation.originEntity = SelectionContext::GetSelectedEntityUnderMouse(viewPortPosition, viewPortSize, camera);
106+
this->translation.originEntity = SelectionContext::GetSelectedEntityUnderMouse(viewport->lastViewportImagePosition, viewport->lastViewportImageSize, &viewport->camera);
107107
if (this->translation.originEntity == Editor::Entity::Invalid())
108108
{
109109
// failed to find entity. Cancel translation attempt

toolkit/editor/editor/tools/selectiontool.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class SelectionTool : public ToolInterface
2121
{
2222
public:
2323
/// Call before Update
24-
void Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
24+
void Render(Presentation::Modules::Viewport* viewport) override;
2525
/// Call after render
26-
void Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
26+
void Update(Presentation::Modules::Viewport* viewport) override;
2727

2828
bool IsModifying() const override;
2929

toolkit/editor/editor/tools/toolinterface.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
*/
99
//------------------------------------------------------------------------------
1010
#include "editor/editor.h"
11+
#include "editor/ui/modules/viewport.h"
12+
1113

1214
namespace Editor
1315
{
@@ -21,9 +23,9 @@ class ToolInterface
2123
{
2224
public:
2325
/// Call before Update
24-
virtual void Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) = 0;
26+
virtual void Render(Presentation::Modules::Viewport* viewport) = 0;
2527
/// Call after render.
26-
virtual void Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) = 0;
28+
virtual void Update(Presentation::Modules::Viewport* viewport) = 0;
2729
/// Override to return true if the tool is currently modifying something (transforming, etc.)
2830
virtual bool IsModifying() const = 0;
2931
/// Override to abort any active actions

toolkit/editor/editor/tools/translatetool.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace Tools
3434
/**
3535
*/
3636
void
37-
TranslateTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
37+
TranslateTool::Update(Presentation::Modules::Viewport* viewport)
3838
{
3939
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
4040
Ptr<Input::Keyboard> keyboard = Input::InputServer::Instance()->GetDefaultKeyboard();
@@ -47,15 +47,15 @@ TranslateTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& view
4747

4848
if (mouse->ButtonUp(Input::MouseButton::Code::LeftButton))
4949
{
50-
Tools::SelectionContext::PerformPicking(viewPortPosition, viewPortSize, camera);
50+
Tools::SelectionContext::PerformPicking(viewport->lastViewportImagePosition, viewport->lastViewportImageSize, &viewport->camera);
5151
}
5252
}
5353

5454
//------------------------------------------------------------------------------
5555
/**
5656
*/
5757
void
58-
TranslateTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera)
58+
TranslateTool::Render(Presentation::Modules::Viewport* viewport)
5959
{
6060
SelectionContext::ValidateSelection();
6161

@@ -66,7 +66,7 @@ TranslateTool::Render(Math::vec2 const& viewPortPosition, Math::vec2 const& view
6666

6767
Game::World* defaultWorld = Game::GetWorld(WORLD_DEFAULT);
6868
Ptr<Input::Mouse> mouse = Input::InputServer::Instance()->GetDefaultMouse();
69-
Im3d::Im3dContext::SetViewportRect(viewPortPosition, viewPortSize);
69+
Im3d::Im3dContext::SetViewportRect(viewport->lastViewportImagePosition, viewport->lastViewportImageSize);
7070

7171
if (!this->translation.isDirty)
7272
{

toolkit/editor/editor/tools/translatetool.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ class TranslateTool : public ToolInterface
2727
{
2828
public:
2929
/// Call before Update
30-
void Render(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
30+
void Render(Presentation::Modules::Viewport* viewport) override;
3131
/// Call after render
32-
void Update(Math::vec2 const& viewPortPosition, Math::vec2 const& viewPortSize, Editor::Camera const* camera) override;
33-
32+
void Update(Presentation::Modules::Viewport* viewport) override;
33+
3434
bool IsModifying() const override;
3535

3636
void Abort() override;

toolkit/editor/editor/ui/modules/viewport.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ Viewport::Render()
221221

222222
ImVec2 imagePosition = { cursorPos.x + windowPos.x, cursorPos.y + windowPos.y };
223223

224+
this->lastViewportImagePositionAbsolute = { imagePosition.x, imagePosition.y };
225+
this->lastViewportImageSizeAbsolute = { imageSize.x, imageSize.y };
224226
this->lastViewportImagePosition = { imagePosition.x / dims.width, imagePosition.y / dims.height };
225227
this->lastViewportImageSize = { imageSize.x / dims.width, imageSize.y / dims.height };
226228

0 commit comments

Comments
 (0)