Initial module architecture
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -864,3 +864,4 @@ Nuake/dependencies/glad/glad.vcxproj.filters
|
|||||||
*.csproj
|
*.csproj
|
||||||
*.filters
|
*.filters
|
||||||
cloc.exe
|
cloc.exe
|
||||||
|
Nuake/src/Modules/Modules.cpp
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
#include "src/Scripting/ScriptingEngine.h"
|
#include "src/Scripting/ScriptingEngine.h"
|
||||||
#include "src/Scripting/ScriptingEngineNet.h"
|
#include "src/Scripting/ScriptingEngineNet.h"
|
||||||
#include "src/Threading/JobSystem.h"
|
#include "src/Threading/JobSystem.h"
|
||||||
|
#include "src/Modules/Modules.h"
|
||||||
|
|
||||||
#include <imgui/imgui_impl_glfw.h>
|
#include <imgui/imgui_impl_glfw.h>
|
||||||
#include <imgui/imgui_impl_opengl3.h>
|
#include <imgui/imgui_impl_opengl3.h>
|
||||||
@@ -43,6 +43,8 @@ namespace Nuake
|
|||||||
Input::Init();
|
Input::Init();
|
||||||
Renderer2D::Init();
|
Renderer2D::Init();
|
||||||
Logger::Log("Engine initialized");
|
Logger::Log("Engine initialized");
|
||||||
|
|
||||||
|
Modules::StartupModules();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::Tick()
|
void Engine::Tick()
|
||||||
|
|||||||
11
Nuake/src/Modules/Modules.h
Normal file
11
Nuake/src/Modules/Modules.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Nuake
|
||||||
|
{
|
||||||
|
class Modules
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void StartupModules();
|
||||||
|
static void ShutdownModules();
|
||||||
|
};
|
||||||
|
}
|
||||||
74
Nuake/src/Modules/Modules.lua
Normal file
74
Nuake/src/Modules/Modules.lua
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
-- Function to scan the "Modules" directory and load all module definitions
|
||||||
|
function loadModules(modulesDir)
|
||||||
|
local modules = {}
|
||||||
|
|
||||||
|
-- Get all folders in the Modules directory
|
||||||
|
local dirs = os.matchdirs(path.join(modulesDir, "*"))
|
||||||
|
|
||||||
|
for _, dir in ipairs(dirs) do
|
||||||
|
local moduleName = path.getname(dir)
|
||||||
|
local moduleFile = path.join(dir, "Module.lua")
|
||||||
|
|
||||||
|
if os.isfile(moduleFile) then
|
||||||
|
-- Load the module data
|
||||||
|
local moduleData = dofile(moduleFile)
|
||||||
|
|
||||||
|
-- Set the module name from the directory
|
||||||
|
moduleData._name = moduleName
|
||||||
|
|
||||||
|
print("Found module \"".. moduleData.name .."\" (".. moduleData._name ..")")
|
||||||
|
|
||||||
|
table.insert(modules, moduleData)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return modules
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Function to generate the final C++ file with startup and shutdown functions
|
||||||
|
function generateModulesFile(modules, outputFilePath, sourceDir)
|
||||||
|
local outputFile = io.open(outputFilePath, "w")
|
||||||
|
|
||||||
|
if not outputFile then
|
||||||
|
print("Error: Could not write to file ".. outputFilePath)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
outputFile:write("// Auto-generated modules management file\n")
|
||||||
|
outputFile:write("#include \"Modules.h\"\n\n")
|
||||||
|
|
||||||
|
-- Include module header files
|
||||||
|
for _, module in ipairs(modules) do
|
||||||
|
outputFile:write("#include \"".. module._name .."/".. module.module_header .."\"\n")
|
||||||
|
end
|
||||||
|
outputFile:write("\n")
|
||||||
|
|
||||||
|
outputFile:write("#include \"src/Core/Logger.h\"\n\n")
|
||||||
|
|
||||||
|
-- Generate StartupModules function
|
||||||
|
outputFile:write("void Nuake::Modules::StartupModules()\n{\n")
|
||||||
|
for _, module in ipairs(modules) do
|
||||||
|
outputFile:write(" Logger::Log(\"Starting ".. module._name .."\", \"modules\");\n")
|
||||||
|
outputFile:write(" Module_".. module._name .."_Startup();\n")
|
||||||
|
end
|
||||||
|
outputFile:write("}\n\n")
|
||||||
|
|
||||||
|
-- Generate ShutdownModules function
|
||||||
|
outputFile:write("void Nuake::Modules::ShutdownModules()\n{\n")
|
||||||
|
for _, module in ipairs(modules) do
|
||||||
|
outputFile:write(" Logger::Log(\"Shutting down ".. module._name .."\", \"modules\");\n")
|
||||||
|
outputFile:write(" Module_".. module._name .."_Shutdown();\n")
|
||||||
|
end
|
||||||
|
outputFile:write("}\n")
|
||||||
|
|
||||||
|
outputFile:close()
|
||||||
|
|
||||||
|
local sources = {}
|
||||||
|
for _, module in ipairs(modules) do
|
||||||
|
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. module.module_header)
|
||||||
|
for _, v in ipairs(module.sources) do
|
||||||
|
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return sources
|
||||||
|
end
|
||||||
50
premake5.lua
50
premake5.lua
@@ -39,6 +39,7 @@ group ""
|
|||||||
|
|
||||||
include "NuakeNet/premake5.lua"
|
include "NuakeNet/premake5.lua"
|
||||||
include "EditorNet/premake5.lua"
|
include "EditorNet/premake5.lua"
|
||||||
|
include "Nuake/src/Modules/Modules.lua"
|
||||||
|
|
||||||
project "Nuake"
|
project "Nuake"
|
||||||
location "Nuake"
|
location "Nuake"
|
||||||
@@ -47,6 +48,17 @@ project "Nuake"
|
|||||||
|
|
||||||
language "C++"
|
language "C++"
|
||||||
cppdialect "C++20"
|
cppdialect "C++20"
|
||||||
|
|
||||||
|
local moduleSources = {}
|
||||||
|
|
||||||
|
if _ACTION then
|
||||||
|
local modulesDir = "Nuake/src/Modules"
|
||||||
|
local outputFilePath = path.join(modulesDir, "Modules.cpp")
|
||||||
|
|
||||||
|
-- Load and generate the modules file
|
||||||
|
local modules = loadModules(modulesDir)
|
||||||
|
moduleSources = generateModulesFile(modules, outputFilePath, "Nuake/src/Modules")
|
||||||
|
end
|
||||||
|
|
||||||
defines
|
defines
|
||||||
{
|
{
|
||||||
@@ -59,10 +71,37 @@ project "Nuake"
|
|||||||
|
|
||||||
files
|
files
|
||||||
{
|
{
|
||||||
|
-- Main Sources
|
||||||
"%{prj.name}/Engine.h",
|
"%{prj.name}/Engine.h",
|
||||||
"%{prj.name}/Engine.cpp",
|
"%{prj.name}/Engine.cpp",
|
||||||
"%{prj.name}/src/**.h",
|
"%{prj.name}/src/*.h",
|
||||||
"%{prj.name}/src/**.cpp",
|
"%{prj.name}/src/*.cpp",
|
||||||
|
"%{prj.name}/src/AI/**.h",
|
||||||
|
"%{prj.name}/src/AI/**.cpp",
|
||||||
|
"%{prj.name}/src/Application/**.h",
|
||||||
|
"%{prj.name}/src/Application/**.cpp",
|
||||||
|
"%{prj.name}/src/Audio/**.h",
|
||||||
|
"%{prj.name}/src/Audio/**.cpp",
|
||||||
|
"%{prj.name}/src/Core/**.h",
|
||||||
|
"%{prj.name}/src/Core/**.cpp",
|
||||||
|
"%{prj.name}/src/Physics/**.h",
|
||||||
|
"%{prj.name}/src/Physics/**.cpp",
|
||||||
|
"%{prj.name}/src/Rendering/**.h",
|
||||||
|
"%{prj.name}/src/Rendering/**.cpp",
|
||||||
|
"%{prj.name}/src/Resource/**.h",
|
||||||
|
"%{prj.name}/src/Resource/**.cpp",
|
||||||
|
"%{prj.name}/src/Scene/**.h",
|
||||||
|
"%{prj.name}/src/Scene/**.cpp",
|
||||||
|
"%{prj.name}/src/Scripting/**.h",
|
||||||
|
"%{prj.name}/src/Scripting/**.cpp",
|
||||||
|
"%{prj.name}/src/Threading/**.h",
|
||||||
|
"%{prj.name}/src/Threading/**.cpp",
|
||||||
|
"%{prj.name}/src/UI/**.h",
|
||||||
|
"%{prj.name}/src/UI/**.cpp",
|
||||||
|
"%{prj.name}/src/Vendors/**.h",
|
||||||
|
"%{prj.name}/src/Vendors/**.cpp",
|
||||||
|
|
||||||
|
-- Vendor Sources
|
||||||
"%{prj.name}/src/Vendors/libmap/h/*.h",
|
"%{prj.name}/src/Vendors/libmap/h/*.h",
|
||||||
"%{prj.name}/src/Vendors/libmap/c/*.c",
|
"%{prj.name}/src/Vendors/libmap/c/*.c",
|
||||||
"%{prj.name}/src/Vendors/wren/src/vm/*.h",
|
"%{prj.name}/src/Vendors/wren/src/vm/*.h",
|
||||||
@@ -72,6 +111,11 @@ project "Nuake"
|
|||||||
"%{prj.name}/src/Vendors/incbin/*.c",
|
"%{prj.name}/src/Vendors/incbin/*.c",
|
||||||
"%{prj.name}/src/Vendors/incbin/*.h",
|
"%{prj.name}/src/Vendors/incbin/*.h",
|
||||||
"%{prj.name}/src/Vendors/filewatch/*.hpp"
|
"%{prj.name}/src/Vendors/filewatch/*.hpp"
|
||||||
|
|
||||||
|
-- Modules System
|
||||||
|
"%{prj.name}/src/Modules/Modules.h",
|
||||||
|
"%{prj.name}/src/Modules/Modules.cpp",
|
||||||
|
table.unpack(moduleSources)
|
||||||
}
|
}
|
||||||
|
|
||||||
includedirs
|
includedirs
|
||||||
@@ -93,7 +137,7 @@ project "Nuake"
|
|||||||
"%{prj.name}/dependencies/recastnavigation/DetourTileCache/Include",
|
"%{prj.name}/dependencies/recastnavigation/DetourTileCache/Include",
|
||||||
"%{prj.name}/dependencies/recastnavigation/Recast/Include"
|
"%{prj.name}/dependencies/recastnavigation/Recast/Include"
|
||||||
}
|
}
|
||||||
|
|
||||||
links
|
links
|
||||||
{
|
{
|
||||||
"soloud"
|
"soloud"
|
||||||
|
|||||||
Reference in New Issue
Block a user