Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
CSharpManager.hpp
1#pragma once
2
3#include <entt/entt.hpp>
4
5#include "EngineCore/ECS/ComponentFunctions.hpp"
6
7namespace Grindstone {
8 class EngineCore;
9 using AssemblyHash = int;
10
11 namespace ECS {
12 class Entity;
13 }
14
15 namespace Scripting::CSharp {
16 struct ScriptComponent;
17 struct ScriptClass;
18
20 public:
21 struct AssemblyData {
22 AssemblyHash assemblyHash;
23 };
24
25 static CSharpManager& GetInstance();
26 void Cleanup();
27 virtual void Initialize();
28 virtual void LoadAssembly(const char* path, AssemblyData& outAssemblyData);
29 virtual void LoadAssemblyIntoMap(const char* path);
30 virtual void SetupComponent(Grindstone::WorldContextSet& cxtSet, entt::entity entity, ScriptComponent& component);
31 virtual void DestroyComponent(Grindstone::WorldContextSet& cxtSet, entt::entity entity, ScriptComponent& component);
32 void RegisterComponents();
33 void RegisterComponent(const Grindstone::String& csharpClass, ECS::ComponentFunctions& fns);
34 void CallCreateComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
35 void CallHasComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
36 void CallRemoveComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
37 void QueueReload();
38 void PerformReload();
39 void Update(entt::registry& registry);
40 void EditorUpdate(entt::registry& registry);
41 private:
42 void LoadAssemblyClasses();
43 void CallFunctionInComponent(ScriptComponent& scriptComponent, size_t fnOffset);
44 void CallConstructorInComponent(ScriptComponent& scriptComponent);
45 void CallAttachComponentInComponent(ScriptComponent& scriptComponent);
46 void CallStartInComponent(ScriptComponent& scriptComponent);
47 void CallUpdateInComponent(ScriptComponent& scriptComponent);
48 void CallEditorUpdateInComponent(ScriptComponent& scriptComponent);
49 void CallDeleteInComponent(ScriptComponent& scriptComponent);
50 ScriptClass* SetupClass(const char* assemblyName, const char* namespaceName, const char* className);
51
52 std::map<std::string, AssemblyData> assemblies;
53 std::map<std::string, ScriptClass*> smartComponents;
54 AssemblyData grindstoneCoreDll;
55 bool isReloadQueued = false;
56
57 // std::map<MonoType*, ECS::CreateComponentFn> createComponentFuncs;
58 // std::map<MonoType*, ECS::TryGetComponentFn> tryGetComponentFuncs;
59 // std::map<MonoType*, ECS::HasComponentFn> hasComponentFuncs;
60 // std::map<MonoType*, ECS::RemoveComponentFn> removeComponentFuncs;
61 };
62 }
63}
Definition ComponentFunctions.hpp:21
Definition Entity.hpp:15
Definition EngineCore.hpp:58
Definition Scene.hpp:21
Definition CSharpManager.hpp:19
Definition WorldContextSet.hpp:11
Definition ScriptClass.hpp:17
Definition ScriptComponent.hpp:9