aboutsummaryrefslogtreecommitdiff
path: root/src/brussel.engine/EditorCorePrivate.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/brussel.engine/EditorCorePrivate.hpp')
-rw-r--r--src/brussel.engine/EditorCorePrivate.hpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/brussel.engine/EditorCorePrivate.hpp b/src/brussel.engine/EditorCorePrivate.hpp
new file mode 100644
index 0000000..4071e7a
--- /dev/null
+++ b/src/brussel.engine/EditorCorePrivate.hpp
@@ -0,0 +1,136 @@
+#pragma once
+
+#include "App.hpp"
+#include "EditorAccessories.hpp"
+#include "EditorAttachment.hpp"
+#include "EditorCommandPalette.hpp"
+#include "EditorCore.hpp"
+#include "EditorUtils.hpp"
+#include "EditorWorldGuides.hpp"
+#include "GameObject.hpp"
+#include "Ires.hpp"
+#include "Level.hpp"
+#include "RcPtr.hpp"
+#include "Sprite.hpp"
+#include "World.hpp"
+
+#include <memory>
+#include <string>
+
+// TODO move inspector drawing to this class
+class EditorInspector final : public IEditorInspector {
+public:
+ std::string renamingScratchBuffer;
+ void* selectedItPtr = nullptr;
+ TargetType selectedItt = ITT_None;
+ bool renaming = false;
+
+ void SelectTarget(TargetType type, void* object) override;
+};
+
+class EditorContentBrowser final : public IEditorContentBrowser {
+private:
+ enum Pane {
+ P_Settings,
+ P_Ires,
+ P_Level,
+ };
+
+ static constexpr float kSplitterThickness = 3.0f;
+ static constexpr float kPadding = 4.0f;
+
+ // <root>
+ static constexpr float kLeftPaneMinWidth = 200.0f;
+ static constexpr float kRightPaneMinWidth = 200.0f;
+
+ EditorInspector* mInspector;
+ Pane mPane = P_Settings;
+ float mBrowserHeight = 0.5f;
+ float mSplitterLeft = kLeftPaneMinWidth;
+ float mSplitterRight = 0.0f;
+ bool mDocked = true;
+
+public:
+ EditorContentBrowser(EditorInspector* inspector);
+ ~EditorContentBrowser() override;
+
+ void Show(bool* open = nullptr);
+};
+
+struct GuizmoState {
+ ImGuizmo::OPERATION currOperation = ImGuizmo::TRANSLATE;
+ ImGuizmo::MODE currMode = ImGuizmo::LOCAL;
+ glm::mat4 cubeMatrix;
+ float snap[3] = { 1.f, 1.f, 1.f };
+ float boundsSnap[3] = { 0.1f, 0.1f, 0.1f };
+ bool useSnap = false;
+ bool boundSizing = false;
+ bool boundSizingSnap = false;
+};
+
+// TODO editor undo stack
+class EditorInstance : public IEditor {
+public:
+ enum EditorCameraMode {
+ // "Game mode": the camera views from the side, where the forward vector is perpendicular to the world plane
+ ECM_2D,
+ // "Editor mode": equivalent to Unity's 3D mode, the camera is completely free and controlled as a 3d camera
+ ECM_Side3D,
+ };
+
+private:
+ App* mApp;
+ GameObject* mPopupCurrent_GameObject = nullptr;
+ Camera mEditorCamera;
+ RcPtr<SpriteDefinition> mSpriteView_Instance;
+ EditorCommandPalette mEdCommandPalette;
+ EditorInspector mEdInspector;
+ EditorContentBrowser mEdContentBrowser;
+ EditorKeyboardViewer mEdKbViewer;
+ EditorWorldGuides mEdGuides;
+ GuizmoState mGuizmo;
+ glm::vec3 mDragCam_CamInitial;
+ ImVec2 mDragCam_CursorInitial;
+ int mSpriteView_Frame;
+ float mMoveCamScrollSpeed = 1.0f;
+ float mMoveCamSlideSpeed = 0.1f;
+ EditorCameraMode mEcm = ECM_2D;
+ bool mSpriteView_OpenNextFrame = false;
+ bool mWindowVisible_ImGuiDemo = false;
+ bool mWindowVisible_CommandPalette = false;
+ bool mWindowVisible_Inspector = true;
+ bool mWindowVisible_ContentBrowser = true;
+ bool mWindowVisible_WorldStructure = true;
+ bool mWindowVisible_WorldProperties = true;
+ bool mWindowVisible_KeyboardViewer = false;
+ bool mDragCam_Happening = false;
+ bool mMoveCamKeyboard = false;
+ bool mMoveCamScrollWheel = false;
+ bool mRenderer_DrawShaded = true;
+ bool mRenderer_DrawWireFrame = false;
+
+public:
+ EditorInstance(App* app);
+ ~EditorInstance() override;
+
+ void OnGameStateChanged(bool running) override;
+ void Show() override;
+
+ EditorInspector& GetInspector() override { return mEdInspector; }
+ EditorContentBrowser& GetContentBrowser() override { return mEdContentBrowser; }
+
+ void OpenSpriteViewer(SpriteDefinition* sprite) override;
+
+private:
+ bool IsCurrentCameraEditor() const {
+ return !mApp->IsGameRunning();
+ }
+
+ void ShowWorldProperties();
+
+ void ShowInspector(IresObject* ires);
+ void ShowInspector(LevelManager::LoadableObject* ldObj);
+ void ShowInspector(GameObject* object);
+
+ void ShowSpriteViewer();
+};