76 lines
2.3 KiB
Lua
76 lines
2.3 KiB
Lua
PaintMyKI5 = PaintMyKI5 or {}
|
|
PaintMyKI5.SandpaperDistribution = PaintMyKI5.SandpaperDistribution or {}
|
|
|
|
local SandpaperDistribution = PaintMyKI5.SandpaperDistribution
|
|
local SANDPAPER_ITEM = "PaintMyKI5.Sandpaper"
|
|
local SANDPAPER_WEIGHT = 0.1
|
|
local FULL_PAINT_CANS = {
|
|
PaintBlack = true,
|
|
PaintBlue = true,
|
|
PaintBrown = true,
|
|
PaintCyan = true,
|
|
PaintGreen = true,
|
|
PaintGrey = true,
|
|
PaintLightBlue = true,
|
|
PaintLightBrown = true,
|
|
PaintOrange = true,
|
|
PaintPink = true,
|
|
PaintPurple = true,
|
|
PaintRed = true,
|
|
PaintTurquoise = true,
|
|
PaintWhite = true,
|
|
PaintYellow = true,
|
|
}
|
|
|
|
local function isFullPaintCan(itemType)
|
|
if type(itemType) ~= "string" then return false end
|
|
if FULL_PAINT_CANS[itemType] then return true end
|
|
local moduleName, shortType = string.match(itemType, "^([^.]+)%.([^.]+)$")
|
|
return moduleName == "Base" and FULL_PAINT_CANS[shortType] == true
|
|
end
|
|
|
|
local function inspectItems(items)
|
|
local hasPaint = false
|
|
local hasSandpaper = false
|
|
if type(items) ~= "table" then return hasPaint, hasSandpaper end
|
|
|
|
for index = 1, #items, 2 do
|
|
local itemType = items[index]
|
|
if itemType == SANDPAPER_ITEM then
|
|
hasSandpaper = true
|
|
elseif isFullPaintCan(itemType) then
|
|
hasPaint = true
|
|
end
|
|
end
|
|
return hasPaint, hasSandpaper
|
|
end
|
|
|
|
local function injectIntoItems(items)
|
|
local hasPaint, hasSandpaper = inspectItems(items)
|
|
if not hasPaint or hasSandpaper then return 0 end
|
|
table.insert(items, SANDPAPER_ITEM)
|
|
table.insert(items, SANDPAPER_WEIGHT)
|
|
return 1
|
|
end
|
|
|
|
function SandpaperDistribution.inject(distributions, clutterTables)
|
|
local list = distributions and distributions.list
|
|
local added = 0
|
|
if type(list) == "table" then
|
|
for _, distribution in pairs(list) do
|
|
if type(distribution) == "table" then
|
|
added = added + injectIntoItems(distribution.items)
|
|
if type(distribution.junk) == "table" then
|
|
added = added + injectIntoItems(distribution.junk.items)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if type(clutterTables) == "table" then
|
|
added = added + injectIntoItems(clutterTables.ClosetItems)
|
|
end
|
|
return added
|
|
end
|
|
|
|
SandpaperDistribution.inject(ProceduralDistributions, ClutterTables)
|