-
Notifications
You must be signed in to change notification settings - Fork 845
/
featuredefs.lua
114 lines (91 loc) · 3.47 KB
/
featuredefs.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- file: featuredefs.lua
-- brief: featuredef parser
-- author: Dave Rodgers
--
-- Copyright (C) 2007.
-- Licensed under the terms of the GNU GPL, v2 or later.
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local featureDefs = {}
local shared = {} -- shared amongst the lua featuredef enviroments
local preProcFile = 'gamedata/featuredefs_pre.lua'
local postProcFile = 'gamedata/featuredefs_post.lua'
local TDF = TDFparser or VFS.Include('gamedata/parse_tdf.lua')
local system = VFS.Include('gamedata/system.lua')
VFS.Include('gamedata/VFSUtils.lua')
local section='featuredefs.lua'
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Run a pre-processing script if one exists
--
if (VFS.FileExists(preProcFile)) then
Shared = shared -- make it global
FeatureDefs = featureDefs -- make it global
VFS.Include(preProcFile)
FeatureDefs = nil
Shared = nil
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Load the TDF featuredef files
--
local tdfFiles = RecursiveFileSearch('features/', '*.tdf')
for _, filename in ipairs(tdfFiles) do
local fds, err = TDF.Parse(filename)
if (fds == nil) then
Spring.Log(section, LOG.ERROR, 'Error parsing ' .. filename .. ': ' .. err)
else
for name, fd in pairs(fds) do
featureDefs[name] = fd
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Load the raw LUA format featuredef files
-- (these will override the TDF versions)
--
local luaFiles = RecursiveFileSearch('features/', '*.lua')
for _, filename in ipairs(luaFiles) do
local fdEnv = {}
fdEnv._G = fdEnv
fdEnv.Shared = shared
fdEnv.GetFilename = function() return filename end
setmetatable(fdEnv, { __index = system })
local success, fds = pcall(VFS.Include, filename, fdEnv)
if (not success) then
Spring.Log(section, LOG.ERROR, 'Error parsing ' .. filename .. ': ' .. tostring(fds))
elseif (fds == nil) then
Spring.Log(section, LOG.ERROR, 'Missing return table from: ' .. filename)
else
for fdName, fd in pairs(fds) do
if ((type(fdName) == 'string') and (type(fd) == 'table')) then
featureDefs[fdName] = fd
end
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Run a post-processing script if one exists
--
if (VFS.FileExists(postProcFile)) then
Shared = shared -- make it global
FeatureDefs = featureDefs -- make it global
VFS.Include(postProcFile)
FeatureDefs = nil
Shared = nil
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
return featureDefs
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------