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#include <Common/Buffer.hpp>
7
8namespace Grindstone {
9 class EngineCore;
10 using AssemblyHash = int;
11
12 namespace ECS {
13 class Entity;
14 }
15
16 namespace Scripting::CSharp {
17 struct ScriptComponent;
18 struct ScriptClass;
19
20 enum class InspectorFieldType {
21 Unknown,
22 Entity,
23 Component,
24 Float, Float2, Float3, Float4,
25 Int, Bool, String,
26 Quaternion,
27 Color
28 };
29
31 using SetterCallback = void(*)(void* componentPtr, void* valuePtr);
32 std::string name;
33 std::string displayName;
34 InspectorFieldType fieldType;
35 uint32_t valueArenaOffset;
36 uint32_t valueArenaSize;
37 SetterCallback setterCallback = nullptr;
38 };
39
41 public:
42 struct AssemblyData {
43 AssemblyHash assemblyHash;
44 };
45
46 static CSharpManager& GetInstance();
47 void Cleanup();
48 virtual void Initialize();
49 virtual bool LoadAssembly(const char* path, AssemblyData& outAssemblyData);
50 virtual bool LoadAssemblyIntoMap(const std::string& assemblyIdentifier);
51 virtual void SetupComponent(Grindstone::WorldContextSet& cxtSet, entt::entity entity, ScriptComponent& component);
52 virtual void DestroyComponent(Grindstone::WorldContextSet& cxtSet, entt::entity entity, ScriptComponent& component);
53 void RegisterComponents();
54 void RegisterComponent(const Grindstone::String& csharpClass, ECS::ComponentFunctions& fns);
55 void CallCreateComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
56 void CallHasComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
57 void CallRemoveComponent(SceneManagement::Scene* scene, entt::entity entityHandle);
58 void QueueReload();
59 void PerformReload();
60 void Update(entt::registry& registry);
61 void EditorUpdate(entt::registry& registry);
62 virtual std::pair<Grindstone::Buffer, std::vector<FieldMetaData>> GetFieldMetaData(ScriptComponent& component);
63 private:
64 void LoadAssemblyClasses();
65 void CallFunctionInComponent(ScriptComponent& scriptComponent, size_t fnOffset);
66 void CallConstructorInComponent(ScriptComponent& scriptComponent);
67 void CallAttachComponentInComponent(ScriptComponent& scriptComponent);
68 void CallStartInComponent(ScriptComponent& scriptComponent);
69 void CallUpdateInComponent(ScriptComponent& scriptComponent);
70 void CallEditorUpdateInComponent(ScriptComponent& scriptComponent);
71 void CallDeleteInComponent(ScriptComponent& scriptComponent);
72 ScriptClass* SetupClass(const char* assemblyName, const char* namespaceName, const char* className);
73
74 std::map<std::string, AssemblyData> assemblies;
75 std::map<std::string, ScriptClass*> classMetaData;
76 AssemblyData grindstoneCoreDll;
77 bool isReloadQueued = false;
78
79 // std::map<MonoType*, ECS::CreateComponentFn> createComponentFuncs;
80 // std::map<MonoType*, ECS::TryGetComponentFn> tryGetComponentFuncs;
81 // std::map<MonoType*, ECS::HasComponentFn> hasComponentFuncs;
82 // std::map<MonoType*, ECS::RemoveComponentFn> removeComponentFuncs;
83 };
84 }
85}
Definition ComponentFunctions.hpp:22
Definition Entity.hpp:15
Definition EngineCore.hpp:60
Definition Scene.hpp:21
Definition CSharpManager.hpp:40
Definition WorldContextSet.hpp:11
Definition ComponentInspector.hpp:11
Definition ScriptComponent.hpp:7
Definition ArchiveContentFile.hpp:8
Definition CSharpManager.hpp:30
Definition ScriptClass.hpp:17
Definition ScriptComponent.hpp:8