/****************************************************************************** * File - editor.h * Author - Joey Pollack * Date - 2021/11/01 (y/m/d) * Mod Date - 2021/11/01 (y/m/d) * Description - Entry point for the editor run mode. ******************************************************************************/ #ifndef EDITOR_H_ #define EDITOR_H_ #include #include #include #include #include "project.h" #include "panels/about.h" #include #include namespace lunarium { class World; class Entity; } namespace lunarium { namespace editor { enum ToolType { TT_MAIN_EDITOR, TT_MAP_EDITOR, }; class EditorAsset; class MapEditor; class Editor : public iRunMode { public: static uint32_t LogCat; public: Editor(); [[nodiscard]] OpRes Initialize(); void Shutdown(); void OnUpdate(double delta); void OnRender(lunarium::Renderer2D* g); bool IsToolOpen(ToolType type) const; std::filesystem::path GetAssetBrowserLocation(); Project* GetProject(); // Panel events void OnEntitySelect(lunarium::Entity* pEnt); void ChangeWorld(lunarium::World* pWorld); void OnAssetSelected(EditorAsset* pAsset); void OnNewAsset(EditorAsset* pAsset); void OnAssetUpdate(EditorAsset* pAsset); private: Editor(const Editor&) = delete; const Editor& operator=(const Editor&) = delete; private: // Data Project mProject; lunarium::World* mpWorld; // Panels PanelManager mPanelManager; struct { uint32_t AssetBrowser; uint32_t WorldTree; uint32_t WorldView; uint32_t PropertiesView; } mPanels; // Non-Docking panels AboutPanel mAboutPanel; // Menu Bar Events // Don't want to handles these events during rendering bool mDoNewProject; bool mDoOpenProject; bool mDoSaveProject; bool mDoSaveAs; // Tools MapEditor* mpMapEditor; // TEST DATA private: // HELPERS void RenderWindow(); void DoMainMenu(); void DoStatusBar(); void DestroyTools(); void HandleMenuEvents(); void HandleOpenPanel(const char* name, uint32_t id); }; }} #endif // EDITOR_H_