]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/module_manager.lua
b9c88952f04ba506afe90ffacbcc0fd4493840d9
[dragonblocks3d-lua.git] / src / module_manager.lua
1 local module_ref = {}
2
3 function module_ref:preinit()
4         self._dependencies = {}
5         self._started = false
6         local depfile = io.open(self._path .. "/.txt")
7         if depfile then
8                 local data = depfile:read()
9                 depfile:close()
10                 self._dependencies = data:split("\n")
11         end
12 end
13
14 function module_ref:init()
15         self._started = true
16 end
17
18 function module_ref:start()
19         _G[self._name] = self
20         require(self._path .. "src/init")
21 end
22
23 local module_manager = {}
24
25 module_manager.module_path = "modules/"
26
27 function module_manager:init()
28         self._modules = {}
29         for modulename in lfs.dir(self.module_path) do
30                 if modulename:sub(1, 1) ~= "." then
31                         local m = ObjectMgr.create()
32                         m._name = modulename
33                         m._path = self.module_path .. modulename .. "/"
34                         m:add_proto(module_ref)
35                         m:preinit()
36                         self._modules[modulename] = m
37                 end
38         end
39 end
40
41 function module_manager:start_module(name)
42         local m = self._modules[name]
43         if not m then
44                 error("Failed to start module '" .. name .. "'.")
45         elseif m._started then
46                 return
47         end
48         for _, dep in ipairs(m._dependencies) do
49                 self:start_module(dep)
50         end
51         m:start()
52 end
53
54 return module_manager