Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor Editor: ui layer and input layer #194

Merged
merged 9 commits into from
May 20, 2022
Merged
Prev Previous commit
Next Next commit
editor input refactor
  • Loading branch information
TECH-EngineTools-刘泽宇 authored and TECH-韦洪宇 committed May 20, 2022
commit 25b3a4d187d21ebcd71dba22f72dc56604496b3f
6 changes: 0 additions & 6 deletions engine/source/editor/include/editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ namespace Pilot
class PilotEditor : public PublicSingleton<PilotEditor>
{
friend class EditorUI;
friend class EditorSceneManager;
friend class PublicSingleton<PilotEditor>;

public:
Expand All @@ -29,11 +28,6 @@ namespace Pilot
protected:
PilotEditor();

void onWindowChanged(float pos_x, float pos_y, float width, float height) const;
size_t onUpdateCursorOnAxis(const Vector2& cursor_uv, const Vector2& window_size) const;
size_t getGuidOfPickedMesh(const Vector2& picked_uv) const;
void setSceneSelectedAxis(size_t selected_axis);

std::shared_ptr<EditorUI> m_editor_ui;
PilotEngine* m_engine_runtime{ nullptr };
};
Expand Down
3 changes: 2 additions & 1 deletion engine/source/editor/include/editor_global_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ namespace Pilot
class EditorGlobalContext
{
public:
class EditorSceneManager* m_scene_manager;
class EditorSceneManager* m_scene_manager{ nullptr };
class EditorInputManager* m_input_manager{ nullptr };
public:
void initialize();
void clear();
Expand Down
68 changes: 68 additions & 0 deletions engine/source/editor/include/editor_input_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#pragma once
#include <runtime/function/render/include/render/surface_io.h>
#include "render/render_camera.h"

#include "runtime/core/math/vector2.h"

namespace Pilot
{
class PilotEditor;

enum class EditorCommand : unsigned int
{
camera_left = 1 << 0, // A
camera_back = 1 << 1, // S
camera_foward = 1 << 2, // W
camera_right = 1 << 3, // D
camera_up = 1 << 4, // Q
camera_down = 1 << 5, // E
translation_mode = 1 << 6, // T
rotation_mode = 1 << 7, // R
scale_mode = 1 << 8, // C
exit = 1 << 9, // Esc
delete_object = 1 << 10, // Delete
};

class EditorInputManager
{
public:
void initialize();
void tick(float delta_time);
public:
void registerInput();
void updateCursorOnAxis(Vector2 cursor_uv);
void processEditorCommand();
void onKeyInEditorMode(int key, int scancode, int action, int mods);


void onKey(int key, int scancode, int action, int mods);
void onReset();
void onCursorPos(double xpos, double ypos);
void onCursorEnter(int entered);
void onScroll(double xoffset, double yoffset);
void onMouseButtonClicked(int key, int action);
void onWindowClosed();

bool isCursorInRect(Vector2 pos, Vector2 size) const;
public:
Vector2 getEngineWindowPos() { return m_engine_window_pos; };
Vector2 getEngineWindowSize() { return m_engine_window_size; };
float getCameraSpeed() { return m_camera_speed; };

void setEngineWindowPos(Vector2 new_window_pos) { m_engine_window_pos = new_window_pos; };
void setEngineWindowSize(Vector2 new_window_size) { m_engine_window_size = new_window_size; };
void resetEditorCommand() { m_editor_command = 0; }
private:
//PilotEditor* m_editor{ nullptr };
std::shared_ptr<SurfaceIO> m_io;

Vector2 m_engine_window_pos{ 0.0f, 0.0f };
Vector2 m_engine_window_size{ 1280.0f, 768.0f };
float m_mouse_x{ 0.0f };
float m_mouse_y{ 0.0f };
float m_camera_speed{ 0.05f };

size_t m_cursor_on_axis{ 3 };
unsigned int m_editor_command{ 0 };
};
}
5 changes: 1 addition & 4 deletions engine/source/editor/include/editor_scene_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ namespace Pilot
Vector2 engine_window_size,
size_t cursor_on_axis,
Matrix4x4 model_matrix);
size_t getGuidOfPickedMesh(const Vector2& picked_uv) const;

public:
std::shared_ptr<PCamera> getEditorCamera() { return m_camera; };
Expand All @@ -52,11 +53,7 @@ namespace Pilot
void setSelectedObjectID(size_t selected_gobject_id) { m_selected_gobject_id = selected_gobject_id; };
void setSelectedObjectMatrix(Matrix4x4 new_object_matrix) { m_selected_object_matrix = new_object_matrix; }
void setEditorAxisMode(EditorAxisMode new_axis_mode) { m_axis_mode = new_axis_mode; }
void setSceneEditor(PilotEditor* editor) { m_editor = editor; }
private:

PilotEditor* m_editor{ nullptr };

EditorTranslationAxis m_translation_axis;
EditorRotationAxis m_rotation_axis;
EditorScaleAxis m_scale_aixs;
Expand Down
30 changes: 3 additions & 27 deletions engine/source/editor/include/editor_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ namespace Pilot

class EditorUI : public SurfaceUI
{
public:
EditorUI();
void onTick(UIState* uistate) override;

private:
void onFileContentItemClicked(EditorFileNode* node);
void updateCursorOnAxis(Vector2 cursor_uv);
void buildEditorFileAssetsUITree(EditorFileNode* node);
void processEditorCommand();
void drawAxisToggleButton(const char* string_id, bool check_state, int axis_mode);
void createComponentUI(Reflection::ReflectionInstance& instance);
void createLeafNodeUI(Reflection::ReflectionInstance& instance);
std::string getLeafUINodeParentLabel();
bool isCursorInRect(Vector2 pos, Vector2 size) const;

void showEditorUI();
void showEditorMenu(bool* p_open);
Expand All @@ -39,33 +39,9 @@ namespace Pilot
void showEditorGameWindow(bool* p_open);
void showEditorDetailWindow(bool* p_open);

void onReset();
void onCursorPos(double xpos, double ypos);
void onCursorEnter(int entered);
void onScroll(double xoffset, double yoffset);
void onMouseButtonClicked(int key, int action);
void onWindowClosed();

public:
EditorUI(PilotEditor* editor);

void onTick(UIState* uistate) override;
void registerInput() override;

private:
PilotEditor* m_editor{ nullptr };

std::unordered_map<std::string, std::function<void(std::string, void*)>> m_editor_ui_creator;
std::unordered_map<std::string, unsigned int> m_new_object_index_map;

Vector2 m_engine_window_pos{ 0.0f, 0.0f };
Vector2 m_engine_window_size{ 1280.0f, 768.0f };
float m_mouse_x{ 0.0f };
float m_mouse_y{ 0.0f };
float m_camera_speed{ 0.05f };

size_t m_cursor_on_axis{ 3 };

EditorFileService m_editor_file_service;
std::chrono::time_point<std::chrono::steady_clock> m_last_file_tree_update;
};
Expand Down
38 changes: 3 additions & 35 deletions engine/source/editor/source/editor.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "editor//include/editor.h"
#include "editor/include/editor_ui.h"
#include "editor/include/editor_scene_manager.h"
#include "editor/include/editor_input_manager.h"
#include "editor/include/editor_global_context.h"
#include "runtime/engine.h"
#include "runtime/function/render/include/render/render.h"
Expand Down Expand Up @@ -30,8 +31,7 @@ namespace Pilot
g_is_editor_mode = true;
m_engine_runtime = engine_runtime;
g_editor_global_context.initialize();
m_editor_ui = std::make_shared<EditorUI>(this);
g_editor_global_context.m_scene_manager->setSceneEditor(this);
m_editor_ui = std::make_shared<EditorUI>();

std::shared_ptr<PilotRenderer> render = m_engine_runtime->getRender();
assert(render);
Expand All @@ -53,41 +53,9 @@ namespace Pilot
{
delta_time = m_engine_runtime->getDeltaTime();
g_editor_global_context.m_scene_manager->tick(delta_time);
g_editor_global_context.m_input_manager->tick(delta_time);
if (!m_engine_runtime->tickOneFrame(delta_time))
return;
}
}

void PilotEditor::onWindowChanged(float pos_x, float pos_y, float width, float height) const
{
std::shared_ptr<PilotRenderer> render = m_engine_runtime->getRender();
assert(render);

render->updateWindow(pos_x, pos_y, width, height);
}

size_t PilotEditor::onUpdateCursorOnAxis(const Vector2& cursor_uv, const Vector2& window_size) const
{
std::shared_ptr<PilotRenderer> render = m_engine_runtime->getRender();
assert(render);

return g_editor_global_context.m_scene_manager->updateCursorOnAxis(cursor_uv, window_size);
}

size_t PilotEditor::getGuidOfPickedMesh(const Vector2& picked_uv) const
{
std::shared_ptr<PilotRenderer> render = m_engine_runtime->getRender();
assert(render);

return render->getGuidOfPickedMesh(picked_uv);
}

void PilotEditor::setSceneSelectedAxis(size_t selected_axis)
{
std::shared_ptr<PilotRenderer> render = m_engine_runtime->getRender();
assert(render);

render->setSceneSelectedAxis(selected_axis);
}

} // namespace Pilot
4 changes: 4 additions & 0 deletions engine/source/editor/source/editor_global_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "editor/include/editor_global_context.h"

#include "editor/include/editor_scene_manager.h"
#include "editor/include/editor_input_manager.h"


namespace Pilot
Expand All @@ -21,11 +22,14 @@ namespace Pilot
void EditorGlobalContext::initialize()
{
m_scene_manager = new EditorSceneManager();
m_input_manager = new EditorInputManager();
m_scene_manager->initialize();
m_input_manager->initialize();
}

void EditorGlobalContext::clear()
{
delete(m_scene_manager);
delete(m_input_manager);
}
}
Loading