Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
EditorManager.hpp
1#pragma once
2
3#include "pch.hpp"
4
5#include <entt/entt.hpp>
6#include <Common/Logging.hpp>
7#include <Common/Utilities/ModuleLoading.hpp>
8
9#include "EngineCore/EngineCore.hpp"
10#include "Commands/CommandList.hpp"
11#include "Importers/ImporterManager.hpp"
12#include "ScriptBuilder/CSharpBuildManager.hpp"
13#include "AssetTemplateRegistry.hpp"
14#include "FileManager.hpp"
15#include "AssetRegistry.hpp"
16#include "GitManager.hpp"
17#include "Selection.hpp"
18#include "TaskSystem.hpp"
19#include "ThumbnailManager.hpp"
20
21namespace Grindstone {
22 class WorldContextSet;
23}
24
25namespace Grindstone::Events {
26 struct BaseEvent;
27}
28
29namespace Grindstone::Editor {
30 class IEditor;
31
32 namespace ImguiEditor {
33 class ImguiEditor;
34 }
35
36 enum class ManipulationMode {
37 Translate,
38 Rotate,
39 Scale
40 };
41
42 enum class PlayMode {
43 Editor,
44 Play,
45 Pause
46 };
47
48 class Manager {
49 public:
50 Manager() = default;
51 static Manager& GetInstance();
52 static void SetInstance(Grindstone::Editor::Manager* editorManager);
53 Grindstone::Importers::ImporterManager& GetImporterManager();
54 ImguiEditor::ImguiEditor& GetImguiEditor();
55 virtual AssetRegistry& GetAssetRegistry();
56 virtual CommandList& GetCommandList();
57 virtual GitManager& GetGitManager();
58 virtual Selection& GetSelection();
59 virtual TaskSystem& GetTaskSystem();
60 virtual AssetTemplateRegistry& GetAssetTemplateRegistry();
61 virtual Grindstone::Editor::ThumbnailManager& GetThumbnailManager();
62 ScriptBuilder::CSharpBuildManager& GetCSharpBuildManager();
63 static FileManager& GetFileManager();
64 static EngineCore& GetEngineCore();
65 bool Initialize(std::filesystem::path projectPath);
66 void InitializeQuitCommands();
67 ~Manager();
68 void Run();
69 // Begin to set PlayMode at end of frame.
70 void SetPlayMode(PlayMode newPlayMode);
71 PlayMode GetPlayMode() const;
72 const std::filesystem::path& GetProjectPath() const;
73 const std::filesystem::path& GetAssetsPath() const;
74 const std::filesystem::path& GetCompiledAssetsPath() const;
75 const std::filesystem::path& GetEngineBinariesPath() const;
76 bool OnKeyPress(Grindstone::Events::BaseEvent* ev);
77 bool OnTryQuit(Grindstone::Events::BaseEvent* ev);
78 bool OnForceQuit(Grindstone::Events::BaseEvent* ev);
79 ManipulationMode manipulationMode = ManipulationMode::Translate;
80 bool isManipulatingInWorldSpace = false;
81 private:
82 bool LoadEngine();
83 bool SetupImguiEditor();
84
85 // Actually change the PlayMode, to be used only by SetPlayMode.
86 void TransferPlayMode(PlayMode newPlayMode);
87 private:
88 std::filesystem::path projectPath;
89 std::filesystem::path assetsPath;
90 std::filesystem::path compiledAssetsPath;
91 std::filesystem::path engineBinariesPath;
92 bool shouldClose = false;
93 EngineCore* engineCore = nullptr;
94 ImguiEditor::ImguiEditor* imguiEditor = nullptr;
95 ScriptBuilder::CSharpBuildManager csharpBuildManager;
96 CommandList commandList;
97 // Current PlayMode - should we update objects? And how?
98 PlayMode playMode = PlayMode::Editor;
99 // Play Mode that will be set at end of frame
100 PlayMode newPlayMode = PlayMode::Editor;
101 Selection selection;
102 FileManager fileManager;
103 TaskSystem taskSystem;
104 AssetRegistry assetRegistry;
105 GitManager gitManager;
106 AssetTemplateRegistry assetTemplateRegistry;
107 Grindstone::Utilities::Modules::Handle engineCoreLibraryHandle;
109 Grindstone::WorldContextSet* runtimeWorldContext = nullptr;
110 Grindstone::WorldContextSet* editorWorldContext = nullptr;
112 };
113}
Definition AssetRegistry.hpp:15
Definition AssetTemplateRegistry.hpp:10
Definition CommandList.hpp:20
Definition FileManager.hpp:8
Definition GitManager.hpp:15
Definition IEditor.hpp:7
Definition EditorManager.hpp:48
Definition Selection.hpp:10
Definition TaskSystem.hpp:30
Definition ThumbnailManager.hpp:18
Definition EngineCore.hpp:58
Definition ImporterManager.hpp:13
Definition WorldContextSet.hpp:11
Definition BaseEvent.hpp:7