myspace / CommonLua /Editor /XEditor /XEnrichTerrainTool.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
raw
history blame
4.13 kB
DefineClass.EnrichBrushObjectSet = {
__parents = { "PropertyObject", },
properties = {
{ id = "Name", editor = "text", default = "", translate = false, },
{ id = "Objects", editor = "string_list", default = {}, items = ClassDescendantsCombo("CObject"), },
{ id = "Weight", editor = "number", default = 100, min = 1, max = 1000, step = 1, slider = true, },
{ id = "AngleDeviation", name = "Angle deviation", editor = "number", default = 0, min = 0, max = 180, step = 1, slider = true, },
{ id = "Scale", editor = "number", default = 100, min = 10, max = 250, step = 1, slider = true, },
{ id = "ScaleDeviation", name = "Scale deviation", editor = "number", default = 0, min = 0, max = 100, step = 1, slider = true, },
{ id = "ColorMin", name = "Color min", editor = "color", default = RGB(100, 100, 100), },
{ id = "ColorMax", name = "Color max", editor = "color", default = RGB(100, 100, 100), },
},
EditorName = "Object Set",
}
function EnrichBrushObjectSet:GetEditorView()
local name = self.Name
local count = #self.Objects
local weight = self.Weight
return string.format("%s (%s objects, weight %s)", name, count, weight)
end
DefineClass.EnrichBrushRule = {
__parents = { "PropertyObject" },
properties = {
{ id = "Terrains", editor = "texture_picker", default = {}, thumb_size = 100, small_font = true, max_rows = 3, multiple = true,
items = GetTerrainTexturesItems, },
{ id = "ObjectSets", name = "Object Sets", editor = "nested_list", base_class = "EnrichBrushObjectSet", default = {}, inclusive = true, },
},
}
function EnrichBrushRule:GetEditorView()
local objects = {}
for _, set in ipairs(self.ObjectSets) do objects = table.union(objects, set.Objects) end
if #objects ~= 0 then table.sort(objects) end
return string.format("Terrains: %s\nObjects: %s", table.concat(self.Terrains, ", "), table.concat(objects, ", "))
end
DefineClass.EnrichTerrainPreset = {
__parents = { "Preset" },
EditorMenubarName = "Enrich Terrain Presets",
EditorMenubar = "Map",
ContainerClass = "EnrichBrushRule",
GlobalMap = "EnrichTerrainPresets",
PresetClass = "EnrichTerrainPreset",
}
function EnrichTerrainPreset:GetError()
local terrains = {}
for _, rule in ipairs(self or empty_table) do
for i, ter in ipairs(rule.Terrains) do
if terrains[ter] then
return string.format("Terrain '%s' is already used by another rule.", ter)
else
terrains[ter] = true
end
end
end
end
DefineClass.XEnrichTerrainTool = {
__parents = { "XPlaceMultipleObjectsToolBase" },
properties = {
{ id = "Preset", name = "Enrich preset", editor = "preset_id", default = "", preset_class = "EnrichTerrainPreset", },
},
ToolTitle = "Enrich terrain",
Description = {
"Adds randomized objects according to predefined presets.",
},
classes = false,
terrains = false,
ToolSection = "Terrain",
ActionIcon = "CommonAssets/UI/Editor/Tools/EnrichTerrain.tga",
ActionShortcut = "Ctrl-T",
}
function XEnrichTerrainTool:OnEditorSetProperty(prop_id)
if prop_id == "Preset" then
local preset = EnrichTerrainPresets[self:GetPreset()]
self.classes, self.terrains = {}, {}
if not preset then return end
for _, rule in ipairs(preset) do
local terrains = rule.Terrains
local sets = rule.ObjectSets
for _, ter in ipairs(terrains) do
if not self.terrains[ter] then self.terrains[ter] = sets end
end
for _, set in ipairs(sets) do self.classes = table.union(self.classes, set.Objects) end
end
end
end
function XEnrichTerrainTool:GetObjSet(pt)
if not self:GetPreset() or self:GetPreset() == "" then return end
local ter = pt and TerrainTextures[terrain.GetTerrainType(pt)]
return self.terrains[ter.id] and table.weighted_rand(self.terrains[ter.id], "Weight")
end
function XEnrichTerrainTool:GetParams(pt)
local set = self:GetObjSet(pt)
if set then return self.terrain_normal, set.Scale, set.ScaleDeviation, set.AngleDeviation, set.ColorMin, set.ColorMax end
end
function XEnrichTerrainTool:GetClassesForPlace(pt)
local set = self:GetObjSet(pt)
return set and set.Objects
end
function XEnrichTerrainTool:GetClassesForDelete()
return self.classes
end