Module:ProjectLister/Unlocks

From Terra Invicta Official Wiki

Documentation for this module may be created at Module:ProjectLister/Unlocks/doc

---
---Reads the EVERY data file that projects can unlock and computes a table of Project to unlocks

--region Dependencies
local BatteryData = mw.loadData('Module:CSVReader/Battery')
local BilateralData = mw.loadData('Module:CSVReader/Bilateral')
local DriveData = mw.loadData('Module:CSVReader/Drive')
local GunData = mw.loadData('Module:CSVReader/Gun')
local HabModuleData = mw.loadData('Module:CSVReader/HabModule')
local HeatSinkData = mw.loadData('Module:CSVReader/HeatSink')
local LaserWeaponData = mw.loadData('Module:CSVReader/LaserWeapon')
local MagneticGunData = mw.loadData('Module:CSVReader/MagneticGun')
local MissileData = mw.loadData('Module:CSVReader/Missile')
local ParticleWeaponData = mw.loadData('Module:CSVReader/ParticleWeapon')
local PlasmaWeaponData = mw.loadData('Module:CSVReader/PlasmaWeapon')
local PowerPlantData = mw.loadData('Module:CSVReader/PowerPlant')
local RadiatorData = mw.loadData('Module:CSVReader/Radiator')
local ShipArmorData = mw.loadData('Module:CSVReader/ShipArmor')
local ShipHullData = mw.loadData('Module:CSVReader/ShipHull')
local UtilityModuleData = mw.loadData('Module:CSVReader/UtilityModule')
--endregion

--region Private constants
--endregion

--region Private member variables
local projectTable = {}
--endregion

--region Private methods

function getProjectTable()
	for rowID, row in pairs(BatteryData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Battery'
			end
		end
	end
	for rowID, row in pairs(BilateralData) do
		if row['relationType'] == 'Claim' and not string.find( row['dataName'], '2070', 1, true) then
			local reqProject = row['projectUnlockName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Claim'
			end
		end
	end
	for rowID, row in pairs(DriveData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Drive'
			end
		end
	end
	for rowID, row in pairs(GunData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Gun'
			end
		end
	end
	for rowID, row in pairs(HabModuleData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'HabModule'
			end
		end
	end
	for rowID, row in pairs(HeatSinkData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'HeatSink'
			end
		end
	end
	for rowID, row in pairs(LaserWeaponData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'LaserWeapon'
			end
		end
	end
	for rowID, row in pairs(MagneticGunData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'MagneticGun'
			end
		end
	end
	for rowID, row in pairs(MissileData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Missile'
			end
		end
	end
	for rowID, row in pairs(ParticleWeaponData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'ParticleWeapon'
			end
		end
	end
	for rowID, row in pairs(PlasmaWeaponData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'PlasmaWeapon'
			end
		end
	end
	for rowID, row in pairs(PowerPlantData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'PowerPlant'
			end
		end
	end
	for rowID, row in pairs(RadiatorData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'Radiator'
			end
		end
	end
	for rowID, row in pairs(ShipArmorData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'ShipArmor'
			end
		end
	end
	for rowID, row in pairs(ShipHullData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'ShipHull'
			end
		end
	end
	for rowID, row in pairs(UtilityModuleData) do
		if not row['disable'] or row['disable'] ~= 'true' then
			local reqProject = row['requiredProjectName']
			if reqProject and reqProject ~= '' and reqProject ~= 0 then
				if not projectTable[reqProject] then
					projectTable[reqProject] = {}
				end
				projectTable[reqProject][rowID] = 'UtilityModule'
			end
		end
	end
	
	return projectTable
end

--endregion

--region Public methods
--endregion

return getProjectTable()