OpenAssetTools/src/ZoneCode.lua

215 lines
6.4 KiB
Lua

ZoneCode = {}
ZoneCode.Assets = {
IW4 = {
"PhysPreset",
"PhysCollmap",
"XAnimParts",
"XModel",
"Material",
"MaterialPixelShader",
"MaterialVertexShader",
"MaterialVertexDeclaration",
"MaterialTechniqueSet",
"GfxImage",
"snd_alias_list_t",
"SndCurve",
"LoadedSound",
"clipMap_t",
-- "ComWorld",
-- "GameWorldSp",
-- "GameWorldMp",
"MapEnts",
-- "FxWorld",
-- "GfxWorld",
"GfxLightDef",
"Font_s",
"MenuList",
"menuDef_t",
"LocalizeEntry",
"WeaponCompleteDef",
"FxEffectDef",
"FxImpactTable",
"RawFile",
"StringTable",
"LeaderboardDef",
"StructuredDataDefSet",
"TracerDef",
"VehicleDef",
"AddonMapEnts"
},
T6 = {
"PhysPreset",
"PhysConstraints",
"DestructibleDef",
"XAnimParts",
"XModel",
"Material",
"MaterialTechniqueSet",
"GfxImage",
"SndBank",
"SndPatch",
"clipMap_t",
"ComWorld",
"GameWorldSp",
"GameWorldMp",
"MapEnts",
"GfxWorld",
"GfxLightDef",
"Font_s",
"FontIcon",
"MenuList",
"menuDef_t",
"LocalizeEntry",
"WeaponVariantDef",
"WeaponAttachment",
"WeaponAttachmentUnique",
"WeaponCamo",
"SndDriverGlobals",
"FxEffectDef",
"FxImpactTable",
"RawFile",
"StringTable",
"LeaderboardDef",
"XGlobals",
"ddlRoot_t",
"Glasses",
"EmblemSet",
"ScriptParseTree",
"KeyValuePairs",
"VehicleDef",
"MemoryBlock",
"AddonMapEnts",
"TracerDef",
"SkinnedVertsDef",
"Qdb",
"Slug",
"FootstepTableDef",
"FootstepFXTableDef",
"ZBarrierDef"
}
}
function ZoneCode:outputForAssets(assetList)
for i = 1, #assetList do
local assetNameLower = string.lower(assetList[i])
buildoutputs {
"%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_load_db.cpp",
"%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_load_db.h",
"%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_write_db.cpp",
"%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_write_db.h",
"%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_struct_test.cpp",
}
end
end
function ZoneCode:allTestFiles()
result = {}
for game, assets in pairs(self.Assets) do
for i, assetName in ipairs(assets) do
local assetNameLower = string.lower(assetName)
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_struct_test.cpp")
end
end
return result
end
function ZoneCode:allLoadFiles()
result = {}
for game, assets in pairs(self.Assets) do
for i, assetName in ipairs(assets) do
local assetNameLower = string.lower(assetName)
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_load_db.cpp")
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_load_db.h")
end
end
return result
end
function ZoneCode:allWriteFiles()
result = {}
for game, assets in pairs(self.Assets) do
for i, assetName in ipairs(assets) do
local assetNameLower = string.lower(assetName)
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_write_db.cpp")
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_write_db.h")
end
end
return result
end
function ZoneCode:include()
if References:include("ZoneCode") then
includedirs {
path.join(ProjectFolder(), "ZoneCode"),
"%{wks.location}/src/ZoneCode"
}
end
end
function ZoneCode:link()
end
function ZoneCode:use()
dependson "ZoneCode"
end
function ZoneCode:project()
References:reset()
local folder = ProjectFolder();
project "ZoneCode"
targetdir(TargetDirectoryLib)
location "%{wks.location}/src/%{prj.name}"
kind "Utility"
files {
path.join(folder, "ZoneCode/**.gen"),
path.join(folder, "ZoneCode/**.h"),
path.join(folder, "ZoneCode/**_Commands.txt")
}
vpaths {
["*"] = {
path.join(folder, "ZoneCode")
}
}
ZoneCodeGenerator:use()
filter "files:**.gen"
buildmessage "Generating ZoneCode for game %{file.basename}"
buildcommands {
'"' .. TargetDirectoryLib .. '/ZoneCodeGenerator.exe"'
.. ' -h "' .. path.join(path.getabsolute(ProjectFolder()), 'ZoneCode/Game/%{file.basename}/%{file.basename}.h') .. '"'
.. ' -e "' .. path.join(path.getabsolute(ProjectFolder()), 'ZoneCode/Game/%{file.basename}/%{file.basename}_Commands.txt') .. '"'
.. ' -o "%{wks.location}/src/ZoneCode/Game/%{file.basename}/XAssets"'
.. ' -g * ZoneLoad'
.. ' -g * ZoneWrite'
.. ' -g * AssetStructTests'
}
buildinputs {
path.join(ProjectFolder(), "ZoneCode/Game/%{file.basename}/%{file.basename}.h"),
path.join(ProjectFolder(), "ZoneCode/Game/%{file.basename}/%{file.basename}_Commands.txt"),
path.join(ProjectFolder(), "ZoneCommon/Game/%{file.basename}/%{file.basename}_Assets.h"),
TargetDirectoryLib .. "/ZoneCodeGenerator.exe"
}
filter {}
filter "files:**/IW4.gen"
self:outputForAssets(self.Assets.IW4)
filter {}
filter "files:**/T6.gen"
self:outputForAssets(self.Assets.T6)
filter {}
end