Module:SpaceBodyLister/Bombard

From Terra Invicta Official Wiki

Documentation for this module may be created at Module:SpaceBodyLister/Bombard/doc

---
---Reads the SpaceBody data files and computes a table of SpaceBody to Bombard Values

--region Dependencies
local SpaceBodyData = mw.loadData('Module:CSVReader/SpaceBody')
--endregion

--region Private constants
--endregion

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

--region Private methods

function getBombardTable()
	for rowID, row in pairs(SpaceBodyData) do
		local spaceBodyMass = row['mass_kg']
		local meanRadius = row['meanRadius_km']
		local equatorialRadius = row['equatorialRadius_km']
		local oblateness = row['oblateness']
		local dimX = row['dimensionX_km']
		local dimY = row['dimensionY_km']
		local dimZ = row['dimensionZ_km']
		local barycenterName = row['barycenterName']
		local semiMajorAxisAU = row['semiMajorAxis_AU']
		local semiMajorAxiskm = row['semiMajorAxis_km']
		
		local computedMeanRadius = 0
		if meanRadius and meanRadius ~= '' and tonumber(meanRadius) then
			computedMeanRadius = tonumber(meanRadius)
		elseif equatorialRadius and equatorialRadius ~= '' and tonumber(equatorialRadius) then
			if oblateness and oblateness ~= '' and tonumber(oblateness) then
				computedMeanRadius = ( (3 - tonumber(oblateness)) * tonumber(equatorialRadius)) / 3
			elseif dimX and dimX ~= '' and tonumber(dimX) and dimZ and dimZ ~= '' and tonumber(dimZ)  then
				computedMeanRadius = ( (3 - (tonumber(dimX) - tonumber(dimZ)) / tonumber(dimX)) * tonumber(equatorialRadius)) / 3
			end
		elseif dimX and dimX ~= '' and tonumber(dimX) then
			computedMeanRadius = tonumber(dimX)
			if dimY and dimY ~= '' and tonumber(dimY) then
				computedMeanRadius = computedMeanRadius + tonumber(dimY)
			else
				computedMeanRadius = computedMeanRadius + tonumber(dimX)
			end
			if dimZ and dimZ ~= '' and tonumber(dimZ) then
				computedMeanRadius = computedMeanRadius + tonumber(dimZ)
			else
				computedMeanRadius = computedMeanRadius + tonumber(dimX)
			end
			computedMeanRadius = computedMeanRadius / 6
		end
		
		local SOIradius = 0
		if spaceBodyMass and spaceBodyMass ~= '' and tonumber(spaceBodyMass) and barycenterName and barycenterName ~= '' then
			local barymass = SpaceBodyData[barycenterName]['mass_kg']
			if barymass and barymass ~= '' and tonumber(barymass) then
				if semiMajorAxiskm and semiMajorAxiskm ~= '' and tonumber(semiMajorAxiskm) then
					SOIradius = (tonumber(spaceBodyMass) / tonumber(barymass)) ^ 0.4 * semiMajorAxiskm
				elseif semiMajorAxisAU and semiMajorAxisAU ~= '' and tonumber(semiMajorAxisAU) then
					SOIradius = (tonumber(spaceBodyMass) / tonumber(barymass)) ^ 0.4 * semiMajorAxisAU * 149597870.7
				end
			end
		end
		
		local surfaceGravity = 0
		if spaceBodyMass and spaceBodyMass ~= '' and tonumber(spaceBodyMass) and barycenterName and barycenterName ~= '' then
			surfaceGravity = spaceBodyMass * 6.67384E-11 / (computedMeanRadius ^ 2) / 1000000
		end

		bombardTable[rowID] = {}
		bombardTable[rowID]['computedMeanRadius'] = computedMeanRadius
		bombardTable[rowID]['SOIradius'] = SOIradius
		bombardTable[rowID]['surfaceGravity'] = surfaceGravity
	end
	return bombardTable
end

--endregion

--region Public methods
--endregion

return getBombardTable()