#pragma once #include "EditorAttachment.hpp" #include "EditorCommandPalette.hpp" #include "GameObject.hpp" #include "Ires.hpp" #include "RcPtr.hpp" #include "Sprite.hpp" #include "World.hpp" #include #include // TODO move inspector drawing to this class struct EditorInspector { enum TargetType { ITT_GameObject, ITT_Ires, ITT_None, }; std::string renamingScratchBuffer; void* selectedItPtr = nullptr; TargetType selectedItt = ITT_None; bool renaming = false; void SelectTarget(TargetType type, void* object); }; class EditorContentBrowser { private: enum Pane { P_Settings, P_Ires, }; static constexpr float kSplitterThickness = 3.0f; static constexpr float kPadding = 4.0f; // 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(); void Show(bool* open = nullptr); }; class App; class EditorInstance { private: App* mApp; GameWorld* mWorld; GameObject* mPopupCurrent_GameObject = nullptr; RcPtr mSpriteView_Instance; EditorCommandPalette mEdCommandPalette; EditorInspector mEdInspector; EditorContentBrowser mEdContentBrowser; int mSpriteView_Frame; 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; public: EditorInstance(App* app, GameWorld* world); ~EditorInstance(); void Show(); EditorInspector& GetInspector() { return mEdInspector; } EditorContentBrowser& GetContentBrowser() { return mEdContentBrowser; } void OpenSpriteViewer(SpriteDefinition* sprite); private: void ShowWorldProperties(); void ShowInspector(IresObject* ires); void ShowInspector(GameObject* object); void ShowSpriteViewer(); };