Skip to content

Commit 1058e80

Browse files
committed
Testing with Mono
1 parent 1d25a61 commit 1058e80

File tree

5 files changed

+48
-5
lines changed

5 files changed

+48
-5
lines changed

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ add_library("ImGUI" STATIC ${IMGUI_SRC})
3737
add_library("ImGuizmo" STATIC ${IMGUIZMO_SRC})
3838

3939
target_link_libraries(Exeon "d3d12.lib;dxgi.lib;d3dcompiler.lib")
40-
target_link_libraries(Exeon "${LIB}/assimp-vc143-mt.lib;${LIB}/DirectXTK12.lib;${LIB}/spdlogd.lib")
40+
target_link_libraries(Exeon "${LIB}/assimp-vc143-mt.lib;${LIB}/DirectXTK12.lib;${LIB}/spdlogd.lib;${LIB}/mono-2.0-sgen.lib")
4141
target_link_libraries(Exeon ImGUI)
4242
target_link_libraries(Exeon ImGuizmo)
4343

src/private/Core/Core.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Core::Core() {
77
this->m_renderer = nullptr;
88
this->m_sceneManager = SceneManager::GetInstance();
99
this->m_resMgr = nullptr;
10+
this->m_mono = nullptr;
1011
}
1112

1213
void Core::Init() {
@@ -20,6 +21,9 @@ void Core::Init() {
2021
m_renderer->Init(this->m_hwnd);
2122
this->m_resMgr = ResourceManager::GetInstance();
2223
this->m_resMgr->Init();
24+
25+
this->m_mono = MonoScript::GetInstance();
26+
this->m_mono->Init();
2327
}
2428

2529
void Core::SetHWND(HWND& hwnd) {

src/private/Runtime/MonoScript.cpp

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,50 @@
11
#include "Runtime/MonoScript.h"
22

3-
43
MonoScript* MonoScript::m_instance;
4+
MonoDomain* MonoScript::m_domain;
5+
MonoAssembly* MonoScript::m_asm;
6+
MonoImage* MonoScript::m_image;
57

68
MonoScript::MonoScript() {
7-
9+
this->m_domain = nullptr;
10+
this->m_asm = nullptr;
11+
this->m_image = nullptr;
12+
this->m_filename = "GameScripts.dll";
813
}
914

1015
void MonoScript::Init() {
16+
mono_set_dirs("C:/Program Files/Mono/lib", "C:/Program Files/Mono/etc");
17+
this->m_domain = mono_jit_init("ExeonDomain");
18+
19+
if (!this->m_domain) {
20+
spdlog::error("Failed initializing Mono domain");
21+
return;
22+
}
23+
24+
spdlog::debug("Mono domain initialized");
25+
26+
char fullPath[MAX_PATH];
27+
GetFullPathName(this->m_filename.c_str(), MAX_PATH, fullPath, nullptr);
1128

29+
this->m_asm = mono_domain_assembly_open(this->m_domain, fullPath);
30+
if (!this->m_asm) {
31+
spdlog::error("Failed to read assembly {0}", this->m_filename);
32+
return;
33+
}
34+
35+
spdlog::debug("Mono domain assembly open");
36+
37+
this->m_image = mono_assembly_get_image(this->m_asm);
38+
39+
MonoClass* gameScriptClass = mono_class_from_name(this->m_image, "", "GameScript");
1240
}
1341

1442
void MonoScript::Update() {
1543

1644
}
1745

1846
MonoScript* MonoScript::GetInstance() {
19-
if (MonoScript::m_instance == nullptr) {
47+
if (MonoScript::m_instance == nullptr)
2048
MonoScript::m_instance = new MonoScript();
21-
}
2249
return MonoScript::m_instance;
2350
}

src/public/Core/Core.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "Core/Renderer/D3D12.h"
66
#include "Scene/SceneManager.h"
77
#include "Renderer/ResourceManager.h"
8+
#include "Runtime/MonoScript.h"
89

910
class Core {
1011
private:
@@ -19,6 +20,8 @@ class Core {
1920

2021
UINT m_nWidth;
2122
UINT m_nHeight;
23+
24+
MonoScript* m_mono;
2225
public:
2326
Core();
2427
void Init();

src/public/Runtime/MonoScript.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
#pragma once
22
#include <iostream>
3+
#include <mono/jit/jit.h>
4+
#include <mono/metadata/assembly.h>
5+
#include <mono/metadata/debug-helpers.h>
6+
#include <spdlog/spdlog.h>
37

48
class MonoScript {
59
private:
610
static MonoScript* m_instance;
11+
static MonoDomain* m_domain;
12+
static MonoAssembly* m_asm;
13+
static MonoImage* m_image;
14+
15+
std::string m_filename;
716
public:
817
MonoScript();
918

0 commit comments

Comments
 (0)