Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Resources/Editor/Textures/Move.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Editor/Textures/Rotate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Editor/Textures/Scale.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions Sources/Overload/OvEditor/include/OvEditor/Core/EditorActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ namespace tinyxml2

namespace OvEditor::Core
{
enum class EGizmoOperation;

/**
* A set of editor actions
*/
Expand Down Expand Up @@ -149,6 +151,19 @@ namespace OvEditor::Core
void NextFrame();
#pragma endregion

#pragma region SCENE_VIEW
/**
* Sets the gizmo operation to use
* @param p_operation
*/
void SetGizmoOperation(EGizmoOperation p_operation);

/**
* Returns the current gizmo operation
*/
EGizmoOperation GetGizmoOperation() const;
#pragma endregion

#pragma region ACTOR_CREATION_DESTRUCTION
/**
* Create an actor with the given component type
Expand Down Expand Up @@ -394,6 +409,7 @@ namespace OvEditor::Core
OvTools::Eventing::Event<OvCore::ECS::Actor&> ActorSelectedEvent;
OvTools::Eventing::Event<OvCore::ECS::Actor&> ActorUnselectedEvent;
OvTools::Eventing::Event<EEditorMode> EditorModeChangedEvent;
OvTools::Eventing::Event<EGizmoOperation> EditorOperationChanged;
OvTools::Eventing::Event<> PlayEvent;

private:
Expand Down
12 changes: 12 additions & 0 deletions Sources/Overload/OvEditor/include/OvEditor/Panels/SceneView.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <OvEditor/Core/GizmoBehaviour.h>
#include <OvEditor/Panels/AViewControllable.h>
#include <OvEditor/Rendering/PickingRenderPass.h>
#include <OvTools/Eventing/Event.h>

namespace OvEditor::Panels
{
Expand Down Expand Up @@ -42,6 +43,17 @@ namespace OvEditor::Panels
*/
virtual OvCore::SceneSystem::Scene* GetScene();

/**
* Set the gizmo operation
* @param p_operation
*/
void SetGizmoOperation(Core::EGizmoOperation p_operation);

/**
* Returns the current gizmo operation
*/
Core::EGizmoOperation GetGizmoOperation() const;

protected:
virtual OvCore::Rendering::SceneRenderer::SceneDescriptor CreateSceneDescriptor() override;

Expand Down
13 changes: 13 additions & 0 deletions Sources/Overload/OvEditor/src/OvEditor/Core/EditorActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <OvCore/ECS/Components/CPhysicalSphere.h>

#include <OvEditor/Core/EditorActions.h>
#include <OvEditor/Core/GizmoBehaviour.h>
#include <OvEditor/Panels/AssetView.h>
#include <OvEditor/Panels/GameView.h>
#include <OvEditor/Panels/Inspector.h>
Expand Down Expand Up @@ -493,6 +494,18 @@ void OvEditor::Core::EditorActions::NextFrame()
SetEditorMode(EEditorMode::FRAME_BY_FRAME);
}

void OvEditor::Core::EditorActions::SetGizmoOperation(OvEditor::Core::EGizmoOperation p_operation)
{
auto& sceneView = m_panelsManager.GetPanelAs<OvEditor::Panels::SceneView>("Scene View");
sceneView.SetGizmoOperation(p_operation);
}

OvEditor::Core::EGizmoOperation OvEditor::Core::EditorActions::GetGizmoOperation() const
{
auto& sceneView = m_panelsManager.GetPanelAs<OvEditor::Panels::SceneView>("Scene View");
return sceneView.GetGizmoOperation();
}

OvMaths::FVector3 OvEditor::Core::EditorActions::CalculateActorSpawnPoint(float p_distanceToCamera)
{
auto& sceneView = m_panelsManager.GetPanelAs<OvEditor::Panels::SceneView>("Scene View");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ OvEditor::Core::EditorResources::EditorResources(const std::string& p_editorAsse
{"Stop", CreateTexture<LINEAR>(texturesFolder / "Stop.png")},
{"Next", CreateTexture<LINEAR>(texturesFolder / "Next.png")},
{"Refresh", CreateTexture<LINEAR>(texturesFolder / "Refresh.png")},
{"Move", CreateTexture<LINEAR>(texturesFolder / "Move.png")},
{"Rotate", CreateTexture<LINEAR>(texturesFolder / "Rotate.png")},
{"Scale", CreateTexture<LINEAR>(texturesFolder / "Scale.png")},
{"File", CreateTexture<LINEAR>(texturesFolder / "File.png")},
{"Folder", CreateTexture<LINEAR>(texturesFolder / "Folder.png")},
{"Texture", CreateTexture<LINEAR>(texturesFolder / "Texture.png")},
Expand Down
17 changes: 14 additions & 3 deletions Sources/Overload/OvEditor/src/OvEditor/Panels/SceneView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,17 @@ void OvEditor::Panels::SceneView::Update(float p_deltaTime)
{
if (EDITOR_CONTEXT(inputManager)->IsKeyPressed(EKey::KEY_W))
{
m_currentOperation = OvEditor::Core::EGizmoOperation::TRANSLATE;
SetGizmoOperation(Core::EGizmoOperation::TRANSLATE);
}

if (EDITOR_CONTEXT(inputManager)->IsKeyPressed(EKey::KEY_E))
{
m_currentOperation = OvEditor::Core::EGizmoOperation::ROTATE;
SetGizmoOperation(Core::EGizmoOperation::ROTATE);
}

if (EDITOR_CONTEXT(inputManager)->IsKeyPressed(EKey::KEY_R))
{
m_currentOperation = OvEditor::Core::EGizmoOperation::SCALE;
SetGizmoOperation(Core::EGizmoOperation::SCALE);
}
}
}
Expand Down Expand Up @@ -122,6 +122,17 @@ OvCore::SceneSystem::Scene* OvEditor::Panels::SceneView::GetScene()
return m_sceneManager.GetCurrentScene();
}

void OvEditor::Panels::SceneView::SetGizmoOperation(OvEditor::Core::EGizmoOperation p_operation)
{
m_currentOperation = p_operation;
EDITOR_EVENT(EditorOperationChanged).Invoke(m_currentOperation);
}

OvEditor::Core::EGizmoOperation OvEditor::Panels::SceneView::GetGizmoOperation() const
{
return m_currentOperation;
}

OvCore::Rendering::SceneRenderer::SceneDescriptor OvEditor::Panels::SceneView::CreateSceneDescriptor()
{
auto descriptor = AViewControllable::CreateSceneDescriptor();
Expand Down
124 changes: 67 additions & 57 deletions Sources/Overload/OvEditor/src/OvEditor/Panels/Toolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,80 +4,90 @@
* @licence: MIT
*/

#include <OvUI/Widgets/Layout/Spacing.h>

#include "OvEditor/Panels/Toolbar.h"
#include "OvEditor/Core/EditorActions.h"

#include <OvCore/Global/ServiceLocator.h>
#include <OvCore/ResourceManagement/TextureManager.h>

#include <OvEditor/Core/EditorActions.h>
#include <OvEditor/Core/GizmoBehaviour.h>
#include <OvEditor/Panels/Toolbar.h>

#include <OvUI/Widgets/Layout/Spacing.h>

namespace
{
OvUI::Types::Color GetButtonTint(bool p_selected)
{
return p_selected ?
OvUI::Types::Color::Yellow :
OvUI::Types::Color::White;
}
}

OvEditor::Panels::Toolbar::Toolbar
(
const std::string& p_title,
bool p_opened,
const OvUI::Settings::PanelWindowSettings& p_windowSettings
) : PanelWindow(p_title, p_opened, p_windowSettings)
{
std::string iconFolder = ":Textures/Icons/";
using namespace OvUI::Widgets;
using namespace OvUI::Widgets::Buttons;

const auto iconSize = OvMaths::FVector2{ 20, 20 };
auto& textureManager = OvCore::Global::ServiceLocator::Get<OvCore::ResourceManagement::TextureManager>();
auto& editorResources = EDITOR_CONTEXT(editorResources);

m_playButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Play")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 });
m_pauseButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Pause")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 });
m_stopButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Stop")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 });
m_nextButton = &CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Next")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 });
auto& translate = CreateWidget<ButtonImage>(editorResources->GetTexture("Move")->GetTexture().GetID(), iconSize);
translate.lineBreak = false;
translate.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::TRANSLATE)); };

CreateWidget<OvUI::Widgets::Layout::Spacing>(0).lineBreak = false;
auto& refreshButton = CreateWidget<OvUI::Widgets::Buttons::ButtonImage>(EDITOR_CONTEXT(editorResources)->GetTexture("Refresh")->GetTexture().GetID(), OvMaths::FVector2{ 20, 20 });
auto& rotate = CreateWidget<ButtonImage>(editorResources->GetTexture("Rotate")->GetTexture().GetID(), iconSize);
rotate.lineBreak = false;
rotate.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::ROTATE)); };

m_playButton->lineBreak = false;
m_pauseButton->lineBreak = false;
m_stopButton->lineBreak = false;
m_nextButton->lineBreak = false;
refreshButton.lineBreak = false;
auto& scale = CreateWidget<ButtonImage>(editorResources->GetTexture("Scale")->GetTexture().GetID(), iconSize);
scale.lineBreak = false;
scale.ClickedEvent += []() { EDITOR_EXEC(SetGizmoOperation(OvEditor::Core::EGizmoOperation::SCALE)); };

m_playButton->ClickedEvent += EDITOR_BIND(StartPlaying);
m_pauseButton->ClickedEvent += EDITOR_BIND(PauseGame);
m_stopButton->ClickedEvent += EDITOR_BIND(StopPlaying);
m_nextButton->ClickedEvent += EDITOR_BIND(NextFrame);
refreshButton.ClickedEvent += EDITOR_BIND(RefreshScripts);
auto updateGizmoOperation = [&translate, &rotate, &scale](Core::EGizmoOperation p_operation) {
using enum Core::EGizmoOperation;
translate.tint = GetButtonTint(p_operation == TRANSLATE);
rotate.tint = GetButtonTint(p_operation == ROTATE);
scale.tint = GetButtonTint(p_operation == SCALE);
};

EDITOR_EVENT(EditorModeChangedEvent) += [this](OvEditor::Core::EditorActions::EEditorMode p_newMode)
{
auto enable = [](OvUI::Widgets::Buttons::ButtonImage* p_button, bool p_enable)
{
p_button->disabled = !p_enable;
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};
};

switch (p_newMode)
{
case OvEditor::Core::EditorActions::EEditorMode::EDIT:
enable(m_playButton, true);
enable(m_pauseButton, false);
enable(m_stopButton, false);
enable(m_nextButton, false);
break;
case OvEditor::Core::EditorActions::EEditorMode::PLAY:
enable(m_playButton, false);
enable(m_pauseButton, true);
enable(m_stopButton, true);
enable(m_nextButton, true);
break;
case OvEditor::Core::EditorActions::EEditorMode::PAUSE:
enable(m_playButton, true);
enable(m_pauseButton, false);
enable(m_stopButton, true);
enable(m_nextButton, true);
break;
case OvEditor::Core::EditorActions::EEditorMode::FRAME_BY_FRAME:
enable(m_playButton, true);
enable(m_pauseButton, false);
enable(m_stopButton, true);
enable(m_nextButton, true);
break;
}
updateGizmoOperation(EDITOR_EXEC(GetGizmoOperation()));

EDITOR_EVENT(EditorOperationChanged) += updateGizmoOperation;

CreateWidget<Layout::Spacing>().lineBreak = false;

m_playButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Play")->GetTexture().GetID(), iconSize);
m_pauseButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Pause")->GetTexture().GetID(), iconSize);
m_stopButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Stop")->GetTexture().GetID(), iconSize);
m_nextButton = &CreateWidget<ButtonImage>(editorResources->GetTexture("Next")->GetTexture().GetID(), iconSize);

CreateWidget<Layout::Spacing>(0).lineBreak = false;
auto& refreshButton = CreateWidget<ButtonImage>(editorResources->GetTexture("Refresh")->GetTexture().GetID(), iconSize);

m_playButton->lineBreak = false;
m_pauseButton->lineBreak = false;
m_stopButton->lineBreak = false;
m_nextButton->lineBreak = false;
refreshButton.lineBreak = false;

m_playButton->ClickedEvent += EDITOR_BIND(StartPlaying);
m_pauseButton->ClickedEvent += EDITOR_BIND(PauseGame);
m_stopButton->ClickedEvent += EDITOR_BIND(StopPlaying);
m_nextButton->ClickedEvent += EDITOR_BIND(NextFrame);
refreshButton.ClickedEvent += EDITOR_BIND(RefreshScripts);

EDITOR_EVENT(EditorModeChangedEvent) += [this](Core::EditorActions::EEditorMode p_mode) {
using enum Core::EditorActions::EEditorMode;
m_playButton->disabled = !(p_mode == EDIT || p_mode == FRAME_BY_FRAME || p_mode == PAUSE);
m_pauseButton->disabled = !(p_mode == PLAY);
m_stopButton->disabled = !(p_mode == PLAY || p_mode == FRAME_BY_FRAME || p_mode == PAUSE);
m_nextButton->disabled = !(p_mode == PLAY || p_mode == FRAME_BY_FRAME || p_mode == PAUSE);
};

EDITOR_EXEC(SetEditorMode(OvEditor::Core::EditorActions::EEditorMode::EDIT));
Expand Down