|
4 | 4 | * @licence: MIT |
5 | 5 | */ |
6 | 6 |
|
7 | | -#include <OvUI/Widgets/Layout/Spacing.h> |
8 | | - |
9 | | -#include "OvEditor/Panels/Toolbar.h" |
10 | | -#include "OvEditor/Core/EditorActions.h" |
11 | | - |
12 | 7 | #include <OvCore/Global/ServiceLocator.h> |
13 | 8 | #include <OvCore/ResourceManagement/TextureManager.h> |
14 | 9 |
|
| 10 | +#include <OvEditor/Core/EditorActions.h> |
| 11 | +#include <OvEditor/Core/GizmoBehaviour.h> |
| 12 | +#include <OvEditor/Panels/Toolbar.h> |
| 13 | + |
| 14 | +#include <OvUI/Widgets/Layout/Spacing.h> |
| 15 | + |
| 16 | +namespace |
| 17 | +{ |
| 18 | + OvUI::Types::Color GetButtonTint(bool p_selected) |
| 19 | + { |
| 20 | + return p_selected ? |
| 21 | + OvUI::Types::Color::Yellow : |
| 22 | + OvUI::Types::Color::White; |
| 23 | + } |
| 24 | +} |
| 25 | + |
15 | 26 | OvEditor::Panels::Toolbar::Toolbar |
16 | 27 | ( |
17 | 28 | const std::string& p_title, |
18 | 29 | bool p_opened, |
19 | 30 | const OvUI::Settings::PanelWindowSettings& p_windowSettings |
20 | 31 | ) : PanelWindow(p_title, p_opened, p_windowSettings) |
21 | 32 | { |
22 | | - std::string iconFolder = ":Textures/Icons/"; |
| 33 | + using namespace OvUI::Widgets; |
| 34 | + using namespace OvUI::Widgets::Buttons; |
23 | 35 |
|
| 36 | + const auto iconSize = OvMaths::FVector2{ 20, 20 }; |
24 | 37 | auto& textureManager = OvCore::Global::ServiceLocator::Get<OvCore::ResourceManagement::TextureManager>(); |
| 38 | + auto& editorResources = EDITOR_CONTEXT(editorResources); |
25 | 39 |
|
26 | | - m_playButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Play")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 }); |
27 | | - m_pauseButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Pause")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 }); |
28 | | - m_stopButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Stop")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 }); |
29 | | - m_nextButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Next")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 }); |
| 40 | + auto& translate = CreateWidget<ButtonImage>(editorResources->GetTexture("Move")->GetTexture().GetID(), iconSize); |
| 41 | + translate.lineBreak = false; |
| 42 | + translate.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::TRANSLATE)); }; |
30 | 43 |
|
31 | | - CreateWidget<OvUI::Widgets::Layout::Spacing>(0).lineBreak = false; |
32 | | - auto& refreshButton = CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Refresh")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 }); |
| 44 | + auto& rotate = CreateWidget<ButtonImage>(editorResources->GetTexture("Rotate")->GetTexture().GetID(), iconSize); |
| 45 | + rotate.lineBreak = false; |
| 46 | + rotate.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::ROTATE)); }; |
33 | 47 |
|
34 | | - m_playButton->lineBreak = false; |
35 | | - m_pauseButton->lineBreak = false; |
36 | | - m_stopButton->lineBreak = false; |
37 | | - m_nextButton->lineBreak = false; |
38 | | - refreshButton.lineBreak = false; |
| 48 | + auto& scale = CreateWidget<ButtonImage>(editorResources->GetTexture("Scale")->GetTexture().GetID(), iconSize); |
| 49 | + scale.lineBreak = false; |
| 50 | + scale.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::SCALE)); }; |
39 | 51 |
|
40 | | - m_playButton->ClickedEvent += EDITOR_BIND(StartPlaying); |
41 | | - m_pauseButton->ClickedEvent += EDITOR_BIND(PauseGame); |
42 | | - m_stopButton->ClickedEvent += EDITOR_BIND(StopPlaying); |
43 | | - m_nextButton->ClickedEvent += EDITOR_BIND(NextFrame); |
44 | | - refreshButton.ClickedEvent += EDITOR_BIND(RefreshScripts); |
| 52 | + auto updateGizmoOperation = [&translate, &rotate, &scale](Core::EGizmoOperation p_operation) { |
| 53 | + using enum Core::EGizmoOperation; |
| 54 | + translate.tint = GetButtonTint(p_operation == TRANSLATE); |
| 55 | + rotate.tint = GetButtonTint(p_operation == ROTATE); |
| 56 | + scale.tint = GetButtonTint(p_operation == SCALE); |
| 57 | + }; |
45 | 58 |
|
46 | | - EDITOR_EVENT(EditorModeChangedEvent) += [this](OvEditor::Core::EditorActions::EEditorMode p_newMode) |
47 | | - { |
48 | | - auto enable = [](OvUI::Widgets::Buttons::ButtonImage* p_button, bool p_enable) |
49 | | - { |
50 | | - p_button->disabled = !p_enable; |
51 | | - p_button->tint = p_enable ? OvUI::Types::Color{ 1.0f, 1.0f, 1.0f, 1.0f} : OvUI::Types::Color{1.0f, 1.0f, 1.0f, 0.15f}; |
52 | | - }; |
53 | | - |
54 | | - switch (p_newMode) |
55 | | - { |
56 | | - case OvEditor::Core::EditorActions::EEditorMode::EDIT: |
57 | | - enable(m_playButton, true); |
58 | | - enable(m_pauseButton, false); |
59 | | - enable(m_stopButton, false); |
60 | | - enable(m_nextButton, false); |
61 | | - break; |
62 | | - case OvEditor::Core::EditorActions::EEditorMode::PLAY: |
63 | | - enable(m_playButton, false); |
64 | | - enable(m_pauseButton, true); |
65 | | - enable(m_stopButton, true); |
66 | | - enable(m_nextButton, true); |
67 | | - break; |
68 | | - case OvEditor::Core::EditorActions::EEditorMode::PAUSE: |
69 | | - enable(m_playButton, true); |
70 | | - enable(m_pauseButton, false); |
71 | | - enable(m_stopButton, true); |
72 | | - enable(m_nextButton, true); |
73 | | - break; |
74 | | - case OvEditor::Core::EditorActions::EEditorMode::FRAME_BY_FRAME: |
75 | | - enable(m_playButton, true); |
76 | | - enable(m_pauseButton, false); |
77 | | - enable(m_stopButton, true); |
78 | | - enable(m_nextButton, true); |
79 | | - break; |
80 | | - } |
| 59 | + updateGizmoOperation(EDITOR_EXEC(GetGizmoOperation())); |
| 60 | + |
| 61 | + EDITOR_EVENT(EditorOperationChanged) += updateGizmoOperation; |
| 62 | + |
| 63 | + CreateWidget<Layout::Spacing>().lineBreak = false; |
| 64 | + |
| 65 | + m_playButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Play")->GetTexture().GetID(), iconSize); |
| 66 | + m_pauseButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Pause")->GetTexture().GetID(), iconSize); |
| 67 | + m_stopButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Stop")->GetTexture().GetID(), iconSize); |
| 68 | + m_nextButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Next")->GetTexture().GetID(), iconSize); |
| 69 | + |
| 70 | + CreateWidget<Layout::Spacing>(0).lineBreak = false; |
| 71 | + auto& refreshButton = CreateWidget<ButtonImage>(editorResources->GetTexture("Refresh")->GetTexture().GetID(), iconSize); |
| 72 | + |
| 73 | + m_playButton->lineBreak = false; |
| 74 | + m_pauseButton->lineBreak = false; |
| 75 | + m_stopButton->lineBreak = false; |
| 76 | + m_nextButton->lineBreak = false; |
| 77 | + refreshButton.lineBreak = false; |
| 78 | + |
| 79 | + m_playButton->ClickedEvent += EDITOR_BIND(StartPlaying); |
| 80 | + m_pauseButton->ClickedEvent += EDITOR_BIND(PauseGame); |
| 81 | + m_stopButton->ClickedEvent += EDITOR_BIND(StopPlaying); |
| 82 | + m_nextButton->ClickedEvent += EDITOR_BIND(NextFrame); |
| 83 | + refreshButton.ClickedEvent += EDITOR_BIND(RefreshScripts); |
| 84 | + |
| 85 | + EDITOR_EVENT(EditorModeChangedEvent) += [this](Core::EditorActions::EEditorMode p_mode) { |
| 86 | + using enum Core::EditorActions::EEditorMode; |
| 87 | + m_playButton->disabled = !(p_mode == EDIT || p_mode == FRAME_BY_FRAME || p_mode == PAUSE); |
| 88 | + m_pauseButton->disabled = !(p_mode == PLAY); |
| 89 | + m_stopButton->disabled = !(p_mode == PLAY || p_mode == FRAME_BY_FRAME || p_mode == PAUSE); |
| 90 | + m_nextButton->disabled = !(p_mode == PLAY || p_mode == FRAME_BY_FRAME || p_mode == PAUSE); |
81 | 91 | }; |
82 | 92 |
|
83 | 93 | EDITOR_EXEC(SetEditorMode(OvEditor::Core::EditorActions::EEditorMode::EDIT)); |
|
0 commit comments