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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- file: weapondefs.lua
-- brief: weapondef parser
-- author: Dave Rodgers
--
-- Copyright (C) 2007.
-- Licensed under the terms of the GNU GPL, v2 or later.
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local weaponDefs = {}
local shared = {} -- shared amongst the lua weapondef enviroments
local preProcFile = 'gamedata/weapondefs_pre.lua'
local postProcFile = 'gamedata/weapondefs_post.lua'
local TDF = TDFparser or VFS.Include('gamedata/parse_tdf.lua')
local system = VFS.Include('gamedata/system.lua')
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Run a pre-processing script if one exists
--
if (VFS.FileExists(preProcFile)) then
Shared = shared -- make it global
WeaponDefs = weaponDefs -- make it global
VFS.Include(preProcFile)
WeaponDefs = nil
Shared = nil
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Load the TDF weapondef files
--
local tdfFiles = VFS.DirList('weapons/', '*.tdf')
for _, filename in ipairs(tdfFiles) do
local wds, err = TDF.Parse(filename)
if (wds == nil) then
Spring.Echo('Error parsing ' .. filename .. ': ' .. err)
else
for name, wd in pairs(wds) do
wd.filename = filename
weaponDefs[name] = wd
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Load the raw LUA format weapondef files
-- (these will override the TDF versions)
--
local luaFiles = VFS.DirList('weapons/', '*.lua')
for _, filename in ipairs(luaFiles) do
local wdEnv = {}
wdEnv._G = wdEnv
wdEnv.Shared = shared
wdEnv.GetFilename = function() return filename end
setmetatable(wdEnv, { __index = system })
local success, wds = pcall(VFS.Include, filename, wdEnv)
if (not success) then
Spring.Echo('Error parsing ' .. filename .. ': ' .. wds)
elseif (wds == nil) then
Spring.Echo('Missing return table from: ' .. filename)
else
for wdName, wd in pairs(wds) do
if ((type(wdName) == 'string') and (type(wd) == 'table')) then
wd.filename = filename
weaponDefs[wdName] = wd
end
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Run a post-processing script if one exists
--
if (VFS.FileExists(postProcFile)) then
Shared = shared -- make it global
WeaponDefs = weaponDefs -- make it global
VFS.Include(postProcFile)
WeaponDefs = nil
Shared = nil
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
-- Basic checks to remove invalid weapons
--
for name, def in pairs(weaponDefs) do
local model = def.model
if ((type(model) == 'string') and (#model > 0)) then
local modelFile = 'objects3d/' .. model
if ((not VFS.FileExists(modelFile)) and
(not VFS.FileExists(modelFile .. '.3do')) and
(not VFS.FileExists(modelFile .. '.s3o'))) then
weaponDefs[name] = nil
Spring.Echo('WARNING: removed ' .. name .. ' weaponDef, missing model')
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
return weaponDefs
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
|