1. EditorApplication
클래스
- 역할: 에디터의 중심 클래스 역할을 하며, 에디터의 초기화, 업데이트, 렌더링, 종료 등 주요 루프를 담당.
- 목적:
- 에디터의 메인 프로세스를 제어하고, 주요 기능(프로젝트 열기, 씬 저장 등)을 실행.
- 여러
EditorWindow
를 관리하며 이를 통해 UI의 다양한 창을 제어.
- 주요 기능:
Initialize()
: 에디터 초기화.
Update()
: 로직 업데이트.
OnGUI()
: 렌더링 업데이트.
Run()
: 메인 루프 실행.
Release()
: 종료 및 리소스 해제.
- 창 검색 기능(
GetWindow
): 이름으로 특정 윈도우 객체 반환.
- 여러 프로젝트 및 씬 관련 작업(
OpenProject
, SaveScene
, OpenScene
등).
#pragma once
#include "guiEditor.h"
#include "guiEditorWindow.h"
#include "..\\\\YamYamEngine_SOURCE\\\\yaRenderTarget.h"
namespace gui
{
/// <summary>
/// EditorApplication 클래스는 에디터에서 사용되는 메인 클래스로
/// 에디터의 메인 루프를 실행하고 에디터의 초기화 및 종료를 담당합니다.
/// </summary>
class EditorApplication
{
public:
enum class eState
{
Disable,
Active,
Destroy,
};
template <typename T>
T* GetWindow(const std::wstring& name)
{
auto iter = mEditorWindows.find(name);
if (iter == mEditorWindows.end())
return nullptr;
return dynamic_cast<T*>(iter->second);
}
///<summary>
///에디터를 초기화합니다.
///</summary>
static bool Initialize();
/// <summary>
/// 에디터를 로직을 업데이트합니다.
/// </summary>
static void Update();
/// <summary>
/// 에디터 렌더링을 업데이트합니다.
/// </summary>
static void OnGUI();
/// <summary>
/// 에디터 업데이트
/// </summary>
static void Run();
/// <summary>
/// 에디터를 종료합니다.
/// </summary>
static void Release();
static void OpenProject();
static void NewScene();
static void SaveScene();
static void SaveSceneAs();
static void OpenScene(const std::filesystem::path& path);
private:
static bool imGguiInitialize();
static void imGuiRender();
static std::map<std::wstring, EditorWindow*> mEditorWindows;
static ImGuiWindowFlags mFlag;
static ImGuiDockNodeFlags mDockspaceFlags;
static eState mState;
static bool mFullScreen;
static ya::math::Vector2 mViewportBounds[2];
static ya::math::Vector2 mViewportSize;
static bool mViewportFocused;
static bool mViewportHovered;
static ya::graphics::RenderTarget* mFrameBuffer;
};
}
2. Editor
클래스
- 역할: 에디터 내부의 특정 컴포넌트를 커스터마이징하고 관리.
- 목적:
- 특정 객체의 Inspector 기능을 재정의하거나 확장하여, 커스터마이즈된 UI와 편집 기능 제공.
- 주요 기능:
Initialize()
, Update()
, OnGUI()
: 초기화, 갱신, 렌더링.
OnEnable()
, OnDisable()
, OnDestroy()
: 상태 변화 및 종료 처리.
mState
: 컴포넌트의 상태(Paused
, Active
, 등)를 관리.
#pragma once
#include "guiEntity.h"
namespace gui
{
/// <summary>
/// Editor는 특정 컴포넌트의 Inspector를 커스터마이징하는 데 사용됩니다.
/// Inspector 창에 표시되는 UI를 재정의하거나 확장합니다.
/// </summary>
class Editor : public Entity
{
public:
enum class eState
{
Paused,
Active,
Disabled,
Destroyed
};
Editor();
virtual ~Editor();
virtual void Initialize();
virtual void Update();
virtual void OnGUI();
virtual void OnEnable();
virtual void OnDisable();
virtual void OnDestroy();
private:
eState mState;
};
}
3. EditorWindow
클래스
- 역할: 독립적인 창(UI)을 생성 및 관리하며, 에디터에 새로운 도구나 워크플로우를 추가.
- 목적:
- 사용자 인터페이스의 독립적인 창을 통해 새로운 도구 및 기능 제공.
- 각각의 창이 독립적으로 초기화, 업데이트, 렌더링을 수행.
- 주요 기능:
Initialize()
, Update()
, OnGUI()
: 윈도우 초기화, 갱신, 렌더링.
Run()
: 창 실행.
- 상태 관리(
mState
): 창의 상태를 Disable
, Active
, Destroy
로 관리.
- 크기 및 속성 관리:
GetSize()
, SetSize()
, GetFlag()
, 등.
#pragma once
#include "guiEntity.h"
namespace gui
{
/// <summary>
/// EditorWindow는 독립적인 창을 생성하여 에디터에 새로운 도구나 워크플로우를 추가하는 데 사용됩니다.
/// 에디터 에서 실행되는 완전히 새로운 사용자 인터페이스를 제공합니다.
/// </summary>
class EditorWindow : public Entity
{
public:
enum class eState
{
Disable,
Active,
Destroy,
};
EditorWindow();
virtual ~EditorWindow();
virtual void Initialize();
virtual void Update();
virtual void OnGUI();
virtual void Run();
virtual void OnEnable();
virtual void OnDisable();
virtual void OnDestroy();
ImGuiWindowFlags GetFlag() const { return mFlag; }
eState GetState() const { return mState; }
void SetState(eState state) { mState = state; }
ImVec2 GetSize() { return mSize; }
void SetSize(ImVec2 size) { mSize = size; }
private:
ImGuiWindowFlags mFlag;
eState mState;
ImVec2 mSize;
};
}
클래스 간 관계 및 작동 방식
EditorApplication
- 에디터의 중심으로
EditorWindow
와 같은 하위 객체를 관리.
- 전체 루프와 주요 기능을 제어.