#pragma once #include "EditorAttachment.hpp" #include "GameObject.hpp" #include "Ires.hpp" #include "RcPtr.hpp" #include "Sprite.hpp" #include "World.hpp" #include #include struct EditorInspector { enum TargetType { ITT_GameObject, ITT_Shader, ITT_Material, 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_Shader, P_Material, 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; RcPtr mSpriteView_Instance; EditorInspector mEdInspector; EditorContentBrowser mEdContentBrowser; int mSpriteView_Frame; bool mSpriteView_OpenNextFrame = false; bool mEdContentBrowserVisible = false; public: EditorInstance(App* app, GameWorld* world); ~EditorInstance(); void Show(); EditorInspector& GetInspector() { return mEdInspector; } EditorContentBrowser& GetContentBrowser() { return mEdContentBrowser; } void OpenSpriteViewer(Sprite* sprite); private: void ShowWorldProperties(); void ShowInspector(Shader* shader); void ShowInspector(Material* material); void ShowInspector(IresObject* ires); void ShowInspector(GameObject* object); void ShowGameObjectInTree(GameObject* object); void ShowSpriteViewer(); };