LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

BaseMaterial

Description
Specialization for loading materials from a vehicle config xml and applying them to given nodes
Functions

applyBaseMaterial

Description
Definition
applyBaseMaterial()
Code
123function BaseMaterial:applyBaseMaterial()
124 local spec = self.spec_baseMaterial
125 for _, material in ipairs(spec.baseMaterials) do
126 for _, component in ipairs(self.components) do
127 MaterialUtil.applyBaseMaterial(component.node, material)
128 end
129 end
130end

applyBaseMaterialConfiguration

Description
Definition
applyBaseMaterialConfiguration()
Code
134function BaseMaterial:applyBaseMaterialConfiguration(xmlFile, configName, configId)
135 local spec = self.spec_baseMaterial
136
137 local baseKey = string.format("vehicle.%sConfigurations", configName)
138 local i = 0
139
140 while true do
141 local key = string.format("%s.material(%d)", baseKey, i)
142
143 if not xmlFile:hasProperty(key) then
144 break
145 end
146
147 local name = xmlFile:getValue(key .. "#name")
148 if not ClassUtil.getIsValidIndexName(name) then
149 Logging.xmlWarning(xmlFile, "Given material name '%s' is not valid for material '%s'", name, key)
150 return false
151 end
152
153 local shaderParameterName = xmlFile:getValue(key .. "#shaderParameter")
154 if not ClassUtil.getIsValidIndexName(shaderParameterName) then
155 Logging.xmlWarning(xmlFile, "Given shader parameter '%s' is not valid for material '%s'", name, key)
156 return false
157 end
158
159 local material = spec.nameToMaterial[name]
160 if material == nil then
161 Logging.xmlWarning(xmlFile, "Given material name '%s' not found for material configuration '%s'", name, key)
162 return false
163 end
164
165 local shaderParameter = material.nameToShaderParameter[shaderParameterName]
166 if shaderParameter == nil then
167 Logging.xmlWarning(xmlFile, "Given shader parameter '%s' not found for material configuration '%s'", shaderParameterName, key)
168 return false
169 end
170
171 local color = xmlFile:getValue(key.."#color", nil, true)
172 if color == nil then
173 color = ConfigurationUtil.getColorByConfigId(self, configName, configId)
174 if color == nil then
175 Logging.xmlWarning(xmlFile, "Color not found for configId '%d' for material configuration '%s'", configId, key)
176 return false
177 end
178 end
179
180 local materialId = xmlFile:getValue(key.."#material")
181 materialId = materialId or ConfigurationUtil.getMaterialByConfigId(self, configName, configId)
182
183 shaderParameter.value[1] = color[1]
184 shaderParameter.value[2] = color[2]
185 shaderParameter.value[3] = color[3]
186 shaderParameter.value[4] = materialId or shaderParameter.value[4]
187
188 if xmlFile:getValue(key .. "#useContrastColor", false) then
189 local brightness = MathUtil.getBrightnessFromColor(color[1], color[2], color[3])
190 local threshold = xmlFile:getValue(key .. "#contrastThreshold", 0.5)
191 if brightness > threshold then
192 brightness = 1
193 else
194 brightness = 0
195 end
196
197 shaderParameter.value[1] = 1-brightness
198 shaderParameter.value[2] = 1-brightness
199 shaderParameter.value[3] = 1-brightness
200 end
201
202 i = i + 1
203 end
204end

initSpecialization

Description
Definition
initSpecialization()
Code
21function BaseMaterial.initSpecialization()
22 g_configurationManager:addConfigurationType("baseMaterial", g_i18n:getText("configuration_baseColor"), nil, nil, ConfigurationUtil.getConfigColorSingleItemLoad, ConfigurationUtil.getConfigColorPostLoad, ConfigurationUtil.SELECTOR_COLOR)
23 g_configurationManager:addConfigurationType("designMaterial", g_i18n:getText("configuration_designColor"), nil, nil, ConfigurationUtil.getConfigColorSingleItemLoad, ConfigurationUtil.getConfigColorPostLoad, ConfigurationUtil.SELECTOR_COLOR)
24 g_configurationManager:addConfigurationType("designMaterial2", g_i18n:getText("configuration_designColor"), nil, nil, ConfigurationUtil.getConfigColorSingleItemLoad, ConfigurationUtil.getConfigColorPostLoad, ConfigurationUtil.SELECTOR_COLOR)
25 g_configurationManager:addConfigurationType("designMaterial3", g_i18n:getText("configuration_designColor"), nil, nil, ConfigurationUtil.getConfigColorSingleItemLoad, ConfigurationUtil.getConfigColorPostLoad, ConfigurationUtil.SELECTOR_COLOR)
26
27 local schema = Vehicle.xmlSchema
28 schema:setXMLSpecializationType("BaseMaterial")
29
30 MaterialUtil.registerBaseMaterialXMLPaths(schema, "vehicle.baseMaterial.material")
31
32 BaseMaterial.registerBaseMaterialConfigurationsXMLPaths(schema, "baseMaterial")
33 ConfigurationUtil.registerColorConfigurationXMLPaths(schema, "baseMaterial")
34 ObjectChangeUtil.registerObjectChangeXMLPaths(schema, "vehicle.baseMaterialConfigurations.baseMaterialConfiguration(?)")
35
36 BaseMaterial.registerBaseMaterialConfigurationsXMLPaths(schema, "designMaterial")
37 ConfigurationUtil.registerColorConfigurationXMLPaths(schema, "designMaterial")
38 ObjectChangeUtil.registerObjectChangeXMLPaths(schema, "vehicle.designMaterialConfigurations.designMaterialConfiguration(?)")
39
40 BaseMaterial.registerBaseMaterialConfigurationsXMLPaths(schema, "designMaterial2")
41 ConfigurationUtil.registerColorConfigurationXMLPaths(schema, "designMaterial2")
42 ObjectChangeUtil.registerObjectChangeXMLPaths(schema, "vehicle.designMaterial2Configurations.designMaterial2Configuration(?)")
43
44 BaseMaterial.registerBaseMaterialConfigurationsXMLPaths(schema, "designMaterial3")
45 ConfigurationUtil.registerColorConfigurationXMLPaths(schema, "designMaterial3")
46 ObjectChangeUtil.registerObjectChangeXMLPaths(schema, "vehicle.designMaterial3Configurations.designMaterial3Configuration(?)")
47
48 schema:setXMLSpecializationType()
49end

onLoad

Description
Definition
onLoad()
Code
81function BaseMaterial:onLoad(savegame)
82 local spec = self.spec_baseMaterial
83
84 spec.baseMaterials = {}
85 spec.nameToMaterial = {}
86
87 MaterialUtil.loadBaseMaterialsFromXML(spec.baseMaterials, self.xmlFile, "vehicle.baseMaterial.material", self.components, self.i3dMappings)
88
89 for i=1, #spec.baseMaterials do
90 local baseMaterial = spec.baseMaterials[i]
91 spec.nameToMaterial[baseMaterial.name] = baseMaterial
92 end
93
94 if self.configurations["baseMaterial"] ~= nil then
95 self:applyBaseMaterialConfiguration(self.xmlFile, "baseMaterial", self.configurations["baseMaterial"])
96 ObjectChangeUtil.updateObjectChanges(self.xmlFile, "vehicle.baseMaterialConfigurations.baseMaterialConfiguration", self.configurations["baseMaterial"], self.components, self)
97 end
98
99 if self.configurations["designMaterial"] ~= nil then
100 self:applyBaseMaterialConfiguration(self.xmlFile, "designMaterial", self.configurations["designMaterial"])
101 ObjectChangeUtil.updateObjectChanges(self.xmlFile, "vehicle.designMaterialConfigurations.designMaterialConfiguration", self.configurations["designMaterial"], self.components, self)
102 end
103
104 if self.configurations["designMaterial2"] ~= nil then
105 self:applyBaseMaterialConfiguration(self.xmlFile, "designMaterial2", self.configurations["designMaterial2"])
106 ObjectChangeUtil.updateObjectChanges(self.xmlFile, "vehicle.designMaterial2Configurations.designMaterial2Configuration", self.configurations["designMaterial2"], self.components, self)
107 end
108
109 if self.configurations["designMaterial3"] ~= nil then
110 self:applyBaseMaterialConfiguration(self.xmlFile, "designMaterial3", self.configurations["designMaterial3"])
111 ObjectChangeUtil.updateObjectChanges(self.xmlFile, "vehicle.designMaterial3Configurations.designMaterial3Configuration", self.configurations["designMaterial3"], self.components, self)
112 end
113end

onLoadFinished

Description
Definition
onLoadFinished()
Code
117function BaseMaterial:onLoadFinished(savegame)
118 self:applyBaseMaterial()
119end

prerequisitesPresent

Description
Definition
prerequisitesPresent()
Code
15function BaseMaterial.prerequisitesPresent(specializations)
16 return true
17end

registerBaseMaterialConfigurationsXMLPaths

Description
Definition
registerBaseMaterialConfigurationsXMLPaths()
Code
53function BaseMaterial.registerBaseMaterialConfigurationsXMLPaths(schema, configurationName)
54 local baseKey = string.format("vehicle.%sConfigurations", configurationName)
55
56 schema:register(XMLValueType.STRING, baseKey .. ".material(?)#name", "Material name")
57 schema:register(XMLValueType.STRING, baseKey .. ".material(?)#shaderParameter", "Material shader parameter")
58 schema:register(XMLValueType.COLOR, baseKey .. ".material(?)#color", "Material color if it shouldn't be used from configuration")
59 schema:register(XMLValueType.INT, baseKey .. ".material(?)#material", "Material id if it shouldn't be used from configuration")
60 schema:register(XMLValueType.BOOL, baseKey .. ".material(?)#useContrastColor", "Use contrast color from configuration", false)
61 schema:register(XMLValueType.FLOAT, baseKey .. ".material(?)#contrastThreshold", "Contrast color brightness threshold", 0.5)
62end

registerEventListeners

Description
Definition
registerEventListeners()
Code
74function BaseMaterial.registerEventListeners(vehicleType)
75 SpecializationUtil.registerEventListener(vehicleType, "onLoad", BaseMaterial)
76 SpecializationUtil.registerEventListener(vehicleType, "onLoadFinished", BaseMaterial)
77end

registerFunctions

Description
Definition
registerFunctions()
Code
66function BaseMaterial.registerFunctions(vehicleType)
67 SpecializationUtil.registerFunction(vehicleType, "applyBaseMaterialConfiguration", BaseMaterial.applyBaseMaterialConfiguration)
68 SpecializationUtil.registerFunction(vehicleType, "applyBaseMaterial", BaseMaterial.applyBaseMaterial)
69 SpecializationUtil.registerFunction(vehicleType, "setBaseMaterialColor", BaseMaterial.setBaseMaterialColor)
70end

setBaseMaterialColor

Description
Definition
setBaseMaterialColor()
Code
208function BaseMaterial:setBaseMaterialColor(materialName, shaderParameterName, color, materialId)
209 local spec = self.spec_baseMaterial
210 local material = spec.nameToMaterial[materialName]
211 if material ~= nil then
212 local shaderParameter = material.nameToShaderParameter[shaderParameterName]
213 if shaderParameter ~= nil then
214 shaderParameter.value[1] = color[1]
215 shaderParameter.value[2] = color[2]
216 shaderParameter.value[3] = color[3]
217 shaderParameter.value[4] = materialId or shaderParameter.value[4]
218 end
219 end
220
221 self:applyBaseMaterial()
222end