LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

ExtendedWeedControl

Functions

clearWeedArea

Description
Definition
clearWeedArea()
Code
107function ExtendedWeedControl:clearWeedArea(modifier, weedFilter)
108 modifier:executeSet(0, self.perlinNoiseFilter1, self.perlinNoiseFilter2, weedFilter)
109end

getClonedSprayerEffectNode

Description
Definition
getClonedSprayerEffectNode()
Code
68function ExtendedWeedControl:getClonedSprayerEffectNode()
69 if self.sprayerEffectNode ~= nil then
70 return clone(self.sprayerEffectNode, false, false, false)
71 end
72end

loadFromXML

Description
Definition
loadFromXML()
Code
35function ExtendedWeedControl:loadFromXML(_, _, baseDirectory, configFileName, mapFilename)
36 g_i3DManager:loadI3DFileAsync(ExtendedWeedControl.SPRAYER_NOZZLE_EFFECT_FILENAME, true, true, ExtendedWeedControl.onSprayerEffectLoaded, self, {})
37end

onSprayerEffectLoaded

Description
Definition
onSprayerEffectLoaded()
Code
57function ExtendedWeedControl.onSprayerEffectLoaded(self, i3dNode, failedReason, args)
58 if i3dNode ~= 0 then
59 self.sprayerEffectNode = getChildAt(i3dNode, 0)
60 unlink(self.sprayerEffectNode)
61
62 delete(i3dNode)
63 end
64end

overwriteGameFunctions

Description
Definition
overwriteGameFunctions()
Code
113function ExtendedWeedControl:overwriteGameFunctions(pfModule)
114
115 pfModule:overwriteGameFunction(FSDensityMapUtil, "setSowingWeedArea", function(superFunc, startWorldX, startWorldZ, widthWorldX, widthWorldZ, heightWorldX, heightWorldZ)
116 superFunc(startWorldX, startWorldZ, widthWorldX, widthWorldZ, heightWorldX, heightWorldZ)
117
118 local weedSystem = g_currentMission.weedSystem
119
120 if weedSystem:getMapHasWeed() then
121 local functionData = FSDensityMapUtil.functionCache.setSowingWeedArea
122
123 if functionData ~= nil then
124 self:updateDensityMapFilter()
125
126 if self.filtersInitilized then
127 if self.weedFilterDense == nil or self.weedFilterSparse == nil then
128 local weedMapId, weedFirstChannel, weedNumChannels = weedSystem:getDensityMapData()
129 self.weedFilterDense = DensityMapFilter.new(weedMapId, weedFirstChannel, weedNumChannels, g_currentMission.terrainRootNode)
130 self.weedFilterDense:setValueCompareParams(DensityValueCompareType.EQUAL, functionData.denseState)
131
132 self.weedFilterSparse = DensityMapFilter.new(weedMapId, weedFirstChannel, weedNumChannels, g_currentMission.terrainRootNode)
133 self.weedFilterSparse:setValueCompareParams(DensityValueCompareType.EQUAL, functionData.sparseState)
134 end
135
136 local weedModifier = functionData.weedModifier
137 weedModifier:setParallelogramWorldCoords(startWorldX, startWorldZ, widthWorldX, widthWorldZ, heightWorldX, heightWorldZ, DensityCoordType.POINT_POINT_POINT)
138
139 self:clearWeedArea(weedModifier, self.weedFilterDense)
140 self:clearWeedArea(weedModifier, self.weedFilterSparse)
141 end
142 end
143 end
144 end)
145
146 pfModule:overwriteGameFunction(FieldManager, "setFieldGround", function(superFunc, _self, field, ...)
147 local ret = superFunc(_self, field, ...)
148
149 if field == nil or field.fieldDimensions == nil then
150 return false
151 end
152
153 self:updateDensityMapFilter()
154
155 if self.filtersInitilized then
156 local numDimensions = getNumOfChildren(field.fieldDimensions)
157 for i=1, numDimensions do
158 local dimWidth = getChildAt(field.fieldDimensions, i-1)
159 local dimStart = getChildAt(dimWidth, 0)
160 local dimHeight = getChildAt(dimWidth, 1)
161
162 local x, _, z = getWorldTranslation(dimStart)
163 local x1, _, z1 = getWorldTranslation(dimWidth)
164 local x2, _, z2 = getWorldTranslation(dimHeight)
165
166 if _self.weedModifier ~= nil then
167 _self.weedModifier:setParallelogramWorldCoords(x, z, x1, z1, x2, z2, DensityCoordType.POINT_POINT_POINT)
168 self:clearWeedArea(_self.weedModifier)
169 end
170 end
171 end
172
173 return ret
174 end)
175
176 -- always use a new random seed while cheating field to see different variations
177 pfModule:overwriteGameFunction(FieldManager, "consoleCommandSetFieldFruit", function(superFunc, fieldManager, ...)
178 self.filtersInitilized = false
179 return superFunc(fieldManager, ...)
180 end)
181
182 pfModule:overwriteGameFunction(AIImplement, "getAILookAheadSize", function(superFunc, vehicle)
183 local size = superFunc(vehicle)
184
185 -- extend size for weeders and herbicide spraying
186 -- use greater size for weeder size the work width is normally smaller
187
188 if vehicle.spec_weeder ~= nil then
189 return math.max(size, 6)
190 end
191
192 if vehicle.spec_sprayer ~= nil then
193 if vehicle.spec_sprayer.workAreaParameters.sprayFillType == FillType.HERBICIDE then
194 return math.max(size, 4)
195 end
196 end
197
198 return size
199 end)
200
201 pfModule:overwriteGameFunction(Sprayer, "processSprayerArea", function(superFunc, vehicle, workArea, dt)
202 self.lastUseSpotSpraying = vehicle.getIsSpotSprayEnabled ~= nil and vehicle:getIsSpotSprayEnabled()
203 return superFunc(vehicle, workArea, dt)
204 end)
205
206 pfModule:overwriteGameFunction(FSDensityMapUtil, "updateHerbicideArea", function(superFunc, startWorldX, startWorldZ, widthWorldX, widthWorldZ, heightWorldX, heightWorldZ, groundType)
207 local numPixels, totalNumPixels = superFunc(startWorldX, startWorldZ, widthWorldX, widthWorldZ, heightWorldX, heightWorldZ, groundType)
208
209 local weedSystem = g_currentMission.weedSystem
210 if weedSystem:getMapHasWeed() then
211 local functionData = FSDensityMapUtil.functionCache.updateHerbicideArea
212
213 if functionData ~= nil and functionData.weedFilters ~= nil then
214 -- allow preventive spraying only on regular sprayers without spot spraying
215 if self.lastUseSpotSpraying then
216 functionData.weedFilters[1]:setValueCompareParams(DensityValueCompareType.EQUAL, 0)
217 functionData.weedFilters[2]:setValueCompareParams(DensityValueCompareType.EQUAL, 0)
218 else
219 functionData.weedFilters[1]:setValueCompareParams(DensityValueCompareType.EQUAL, 1)
220 functionData.weedFilters[2]:setValueCompareParams(DensityValueCompareType.EQUAL, 2)
221 end
222 end
223 end
224
225 return numPixels, totalNumPixels
226 end)
227end

setWeedNoiseParameters

Description
Definition
setWeedNoiseParameters()
Code
92function ExtendedWeedControl:setWeedNoiseParameters(minOctave1, numOctave1, persistence1, rangeMin1, rangeMax1, minOctave2, numOctave2, persistence2, rangeMin2, rangeMax2)
93 minOctave1, numOctave1, persistence1, rangeMin1, rangeMax1, minOctave2, numOctave2, persistence2, rangeMin2, rangeMax2 = tonumber(minOctave1), tonumber(numOctave1), tonumber(persistence1), tonumber(rangeMin1), tonumber(rangeMax1), tonumber(minOctave2), tonumber(numOctave2), tonumber(persistence2), tonumber(rangeMin2), tonumber(rangeMax2)
94
95 self.minOctave1, self.numOctave1, self.persistence1, self.rangeMin1, self.rangeMax1 = minOctave1 or self.minOctave1, numOctave1 or self.numOctave1, persistence1 or self.persistence1, rangeMin1 or self.rangeMin1, rangeMax1 or self.rangeMax1
96 self.minOctave2, self.numOctave2, self.persistence2, self.rangeMin2, self.rangeMax2 = minOctave2 or self.minOctave2, numOctave2 or self.numOctave2, persistence2 or self.persistence2, rangeMin2 or self.rangeMin2, rangeMax2 or self.rangeMax2
97
98 log("Weed Noise Parameters:")
99 log(string.format(" minOctave1 %.2f, numOctave1 %.2f, persistence1 %.2f, rangeMin1 %d, rangeMax1 %d", self.minOctave1, self.numOctave1, self.persistence1, self.rangeMin1, self.rangeMax1))
100 log(string.format(" minOctave2 %.2f, numOctave2 %.2f, persistence2 %.2f, rangeMin2 %d, rangeMax2 %d", self.minOctave2, self.numOctave2, self.persistence2, self.rangeMin2, self.rangeMax2))
101
102 self.filtersInitilized = false
103end

unloadMapData

Description
Definition
unloadMapData()
Code
41function ExtendedWeedControl:unloadMapData()
42 if self.sprayerEffectNode ~= nil then
43 delete(self.sprayerEffectNode)
44 self.sprayerEffectNode = nil
45 end
46
47 self.perlinNoiseFilter1 = nil
48 self.perlinNoiseFilter2 = nil
49 self.filtersInitilized = false
50 self.weedFilter = nil
51
52 removeConsoleCommand("pfWeedSetNoiseParameters")
53end

updateDensityMapFilter

Description
Definition
updateDensityMapFilter()
Code
76function ExtendedWeedControl:updateDensityMapFilter()
77 local weedSystem = g_currentMission.weedSystem
78 local weedMapId, _, _ = weedSystem:getDensityMapData()
79 if weedMapId ~= nil and not self.filtersInitilized then
80 self.perlinNoiseFilter1 = PerlinNoiseFilter.new(weedMapId, self.minOctave1, self.numOctave1, self.persistence1, math.random(0, 1000))
81 self.perlinNoiseFilter1:setValueCompareParams(DensityValueCompareType.BETWEEN, self.rangeMin1, self.rangeMax1)
82
83 self.perlinNoiseFilter2 = PerlinNoiseFilter.new(weedMapId, self.minOctave2, self.numOctave2, self.persistence2, math.random(0, 1000))
84 self.perlinNoiseFilter2:setValueCompareParams(DensityValueCompareType.BETWEEN, self.rangeMin2, self.rangeMax2)
85
86 self.filtersInitilized = true
87 end
88end