Skip to content

Commit bcf3e97

Browse files
committed
Initial module architecture
1 parent 636736f commit bcf3e97

File tree

5 files changed

+136
-4
lines changed

5 files changed

+136
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,3 +864,4 @@ Nuake/dependencies/glad/glad.vcxproj.filters
864864
*.csproj
865865
*.filters
866866
cloc.exe
867+
Nuake/src/Modules/Modules.cpp

Nuake/Engine.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include "src/Scripting/ScriptingEngine.h"
1212
#include "src/Scripting/ScriptingEngineNet.h"
1313
#include "src/Threading/JobSystem.h"
14-
14+
#include "src/Modules/Modules.h"
1515

1616
#include <imgui/imgui_impl_glfw.h>
1717
#include <imgui/imgui_impl_opengl3.h>
@@ -43,6 +43,8 @@ namespace Nuake
4343
Input::Init();
4444
Renderer2D::Init();
4545
Logger::Log("Engine initialized");
46+
47+
Modules::StartupModules();
4648
}
4749

4850
void Engine::Tick()

Nuake/src/Modules/Modules.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#pragma once
2+
3+
namespace Nuake
4+
{
5+
class Modules
6+
{
7+
public:
8+
static void StartupModules();
9+
static void ShutdownModules();
10+
};
11+
}

Nuake/src/Modules/Modules.lua

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
-- Function to scan the "Modules" directory and load all module definitions
2+
function loadModules(modulesDir)
3+
local modules = {}
4+
5+
-- Get all folders in the Modules directory
6+
local dirs = os.matchdirs(path.join(modulesDir, "*"))
7+
8+
for _, dir in ipairs(dirs) do
9+
local moduleName = path.getname(dir)
10+
local moduleFile = path.join(dir, "Module.lua")
11+
12+
if os.isfile(moduleFile) then
13+
-- Load the module data
14+
local moduleData = dofile(moduleFile)
15+
16+
-- Set the module name from the directory
17+
moduleData._name = moduleName
18+
19+
print("Found module \"".. moduleData.name .."\" (".. moduleData._name ..")")
20+
21+
table.insert(modules, moduleData)
22+
end
23+
end
24+
25+
return modules
26+
end
27+
28+
-- Function to generate the final C++ file with startup and shutdown functions
29+
function generateModulesFile(modules, outputFilePath, sourceDir)
30+
local outputFile = io.open(outputFilePath, "w")
31+
32+
if not outputFile then
33+
print("Error: Could not write to file ".. outputFilePath)
34+
return
35+
end
36+
37+
outputFile:write("// Auto-generated modules management file\n")
38+
outputFile:write("#include \"Modules.h\"\n\n")
39+
40+
-- Include module header files
41+
for _, module in ipairs(modules) do
42+
outputFile:write("#include \"".. module._name .."/".. module.module_header .."\"\n")
43+
end
44+
outputFile:write("\n")
45+
46+
outputFile:write("#include \"src/Core/Logger.h\"\n\n")
47+
48+
-- Generate StartupModules function
49+
outputFile:write("void Nuake::Modules::StartupModules()\n{\n")
50+
for _, module in ipairs(modules) do
51+
outputFile:write(" Logger::Log(\"Starting ".. module._name .."\", \"modules\");\n")
52+
outputFile:write(" Module_".. module._name .."_Startup();\n")
53+
end
54+
outputFile:write("}\n\n")
55+
56+
-- Generate ShutdownModules function
57+
outputFile:write("void Nuake::Modules::ShutdownModules()\n{\n")
58+
for _, module in ipairs(modules) do
59+
outputFile:write(" Logger::Log(\"Shutting down ".. module._name .."\", \"modules\");\n")
60+
outputFile:write(" Module_".. module._name .."_Shutdown();\n")
61+
end
62+
outputFile:write("}\n")
63+
64+
outputFile:close()
65+
66+
local sources = {}
67+
for _, module in ipairs(modules) do
68+
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. module.module_header)
69+
for _, v in ipairs(module.sources) do
70+
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. v)
71+
end
72+
end
73+
return sources
74+
end

premake5.lua

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ group ""
3939

4040
include "NuakeNet/premake5.lua"
4141
include "EditorNet/premake5.lua"
42+
include "Nuake/src/Modules/Modules.lua"
4243

4344
project "Nuake"
4445
location "Nuake"
@@ -47,6 +48,17 @@ project "Nuake"
4748

4849
language "C++"
4950
cppdialect "C++20"
51+
52+
local moduleSources = {}
53+
54+
if _ACTION then
55+
local modulesDir = "Nuake/src/Modules"
56+
local outputFilePath = path.join(modulesDir, "Modules.cpp")
57+
58+
-- Load and generate the modules file
59+
local modules = loadModules(modulesDir)
60+
moduleSources = generateModulesFile(modules, outputFilePath, "Nuake/src/Modules")
61+
end
5062

5163
defines
5264
{
@@ -59,10 +71,37 @@ project "Nuake"
5971

6072
files
6173
{
74+
-- Main Sources
6275
"%{prj.name}/Engine.h",
6376
"%{prj.name}/Engine.cpp",
64-
"%{prj.name}/src/**.h",
65-
"%{prj.name}/src/**.cpp",
77+
"%{prj.name}/src/*.h",
78+
"%{prj.name}/src/*.cpp",
79+
"%{prj.name}/src/AI/**.h",
80+
"%{prj.name}/src/AI/**.cpp",
81+
"%{prj.name}/src/Application/**.h",
82+
"%{prj.name}/src/Application/**.cpp",
83+
"%{prj.name}/src/Audio/**.h",
84+
"%{prj.name}/src/Audio/**.cpp",
85+
"%{prj.name}/src/Core/**.h",
86+
"%{prj.name}/src/Core/**.cpp",
87+
"%{prj.name}/src/Physics/**.h",
88+
"%{prj.name}/src/Physics/**.cpp",
89+
"%{prj.name}/src/Rendering/**.h",
90+
"%{prj.name}/src/Rendering/**.cpp",
91+
"%{prj.name}/src/Resource/**.h",
92+
"%{prj.name}/src/Resource/**.cpp",
93+
"%{prj.name}/src/Scene/**.h",
94+
"%{prj.name}/src/Scene/**.cpp",
95+
"%{prj.name}/src/Scripting/**.h",
96+
"%{prj.name}/src/Scripting/**.cpp",
97+
"%{prj.name}/src/Threading/**.h",
98+
"%{prj.name}/src/Threading/**.cpp",
99+
"%{prj.name}/src/UI/**.h",
100+
"%{prj.name}/src/UI/**.cpp",
101+
"%{prj.name}/src/Vendors/**.h",
102+
"%{prj.name}/src/Vendors/**.cpp",
103+
104+
-- Vendor Sources
66105
"%{prj.name}/src/Vendors/libmap/h/*.h",
67106
"%{prj.name}/src/Vendors/libmap/c/*.c",
68107
"%{prj.name}/src/Vendors/wren/src/vm/*.h",
@@ -72,6 +111,11 @@ project "Nuake"
72111
"%{prj.name}/src/Vendors/incbin/*.c",
73112
"%{prj.name}/src/Vendors/incbin/*.h",
74113
"%{prj.name}/src/Vendors/filewatch/*.hpp"
114+
115+
-- Modules System
116+
"%{prj.name}/src/Modules/Modules.h",
117+
"%{prj.name}/src/Modules/Modules.cpp",
118+
table.unpack(moduleSources)
75119
}
76120

77121
includedirs
@@ -93,7 +137,7 @@ project "Nuake"
93137
"%{prj.name}/dependencies/recastnavigation/DetourTileCache/Include",
94138
"%{prj.name}/dependencies/recastnavigation/Recast/Include"
95139
}
96-
140+
97141
links
98142
{
99143
"soloud"

0 commit comments

Comments
 (0)