LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

EnvironmentalScoreHerbicide

Parent
EnvironmentalScoreValue
Functions

addWorkedArea

Description
Definition
addWorkedArea()
Code
124function EnvironmentalScoreHerbicide:addWorkedArea(farmlandId, area, type)
125 local farmlandData = self:getFarmlandData(farmlandId)
126
127 if farmlandData.pendingReset then
128 farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY] = 0
129 farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY] = 0
130 farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_MECHANICAL] = 0
131
132 farmlandData.pendingReset = false
133 end
134
135 farmlandData.areaByType[type] = farmlandData.areaByType[type] + area
136end

getScore

Description
Definition
getScore()
Code
44function EnvironmentalScoreHerbicide:getScore(farmlandId)
45 local farmlandData = self:getFarmlandData(farmlandId)
46
47 if farmlandData.clientScore ~= nil then
48 return farmlandData.clientScore
49 end
50
51 local sum = 0
52 for i=1, 3 do
53 sum = sum + farmlandData.areaByType[i]
54 end
55
56 if sum == 0 then
57 return 0.5
58 end
59
60 local score = 0
61 score = score + (farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY] / sum) * 1
62 score = score + (farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY] / sum) * 0.6
63 score = score + (farmlandData.areaByType[EnvironmentalScoreHerbicide.TYPE_MECHANICAL] / sum) * 0.75
64
65 return MathUtil.clamp(score, 0, 1)
66end

initFarmlandData

Description
Definition
initFarmlandData()
Code
70function EnvironmentalScoreHerbicide:initFarmlandData()
71 return {
72 areaByType = {
73 [EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY] = 0,
74 [EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY] = 0,
75 [EnvironmentalScoreHerbicide.TYPE_MECHANICAL] = 0,
76 },
77 pendingReset = false,
78 }
79end

loadFarmlandData

Description
Definition
loadFarmlandData()
Code
83function EnvironmentalScoreHerbicide:loadFarmlandData(data, xmlFile, key)
84 data.areaByType[EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY] = xmlFile:getFloat(key .. "#spotSpray", data.areaByType[EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY])
85 data.areaByType[EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY] = xmlFile:getFloat(key .. "#fullSpray", data.areaByType[EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY])
86 data.areaByType[EnvironmentalScoreHerbicide.TYPE_MECHANICAL] = xmlFile:getFloat(key .. "#mechanical", data.areaByType[EnvironmentalScoreHerbicide.TYPE_MECHANICAL])
87
88 data.pendingReset = xmlFile:getBool(key .. "#pendingReset", data.pendingReset)
89end

loadFromXML

Description
Definition
loadFromXML()
Code
29function EnvironmentalScoreHerbicide:loadFromXML(xmlFile, key, baseDirectory, configFileName, mapFilename)
30 if not EnvironmentalScoreTillage:superClass().loadFromXML(self, xmlFile, key, baseDirectory, configFileName, mapFilename) then
31 return false
32 end
33
34 return true
35end

onHarvestScoreReset

Description
Definition
onHarvestScoreReset()
Code
117function EnvironmentalScoreHerbicide:onHarvestScoreReset(farmlandId)
118 local farmlandData = self:getFarmlandData(farmlandId)
119 farmlandData.pendingReset = true
120end

overwriteGameFunctions

Description
Definition
overwriteGameFunctions()
Code
140function EnvironmentalScoreHerbicide:overwriteGameFunctions(pfModule)
141 if g_server ~= nil then
142 pfModule:overwriteGameFunction(Sprayer, "processSprayerArea", function(superFunc, vehicle, workArea, dt)
143 local changedArea, totalArea = superFunc(vehicle, workArea, dt)
144
145 if changedArea > 0 then
146 if vehicle.spec_sprayer.workAreaParameters.sprayFillType == FillType.HERBICIDE then
147 local x, _, z = getWorldTranslation(vehicle.rootNode)
148 local farmlandId = g_farmlandManager:getFarmlandIdAtWorldPosition(x, z)
149 if farmlandId ~= nil then
150 local spec = vehicle.spec_weedSpotSpray
151 if spec ~= nil and spec.isAvailable and spec.isEnabled then
152 self:addWorkedArea(farmlandId, changedArea, EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY)
153 else
154 self:addWorkedArea(farmlandId, changedArea, EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY)
155 end
156 end
157 end
158 end
159
160 return changedArea, totalArea
161 end)
162
163 pfModule:overwriteGameFunction(Weeder, "processWeederArea", function(superFunc, vehicle, workArea, dt)
164 local changedArea, totalArea = superFunc(vehicle, workArea, dt)
165
166 if changedArea > 0 then
167 local x, _, z = getWorldTranslation(vehicle.rootNode)
168 local farmlandId = g_farmlandManager:getFarmlandIdAtWorldPosition(x, z)
169 if farmlandId ~= nil then
170 self:addWorkedArea(farmlandId, changedArea, EnvironmentalScoreHerbicide.TYPE_MECHANICAL)
171 end
172 end
173
174 return changedArea, totalArea
175 end)
176 end
177end

readFarmlandDataFromStream

Description
Definition
readFarmlandDataFromStream()
Code
103function EnvironmentalScoreHerbicide:readFarmlandDataFromStream(data, streamId, connection)
104 local score = MathUtil.round(streamReadUIntN(streamId, 8) / 255, 2)
105 data.clientScore = score
106end

saveFarmlandData

Description
Definition
saveFarmlandData()
Code
93function EnvironmentalScoreHerbicide:saveFarmlandData(data, xmlFile, key)
94 xmlFile:setFloat(key .. "#spotSpray", data.areaByType[EnvironmentalScoreHerbicide.TYPE_SPOT_SPRAY])
95 xmlFile:setFloat(key .. "#fullSpray", data.areaByType[EnvironmentalScoreHerbicide.TYPE_FULL_SPRAY])
96 xmlFile:setFloat(key .. "#mechanical", data.areaByType[EnvironmentalScoreHerbicide.TYPE_MECHANICAL])
97
98 xmlFile:setBool(key .. "#pendingReset", data.pendingReset)
99end

update

Description
Definition
update()
Code
39function EnvironmentalScoreHerbicide:update(dt)
40end

writeFarmlandDataToStream

Description
Definition
writeFarmlandDataToStream()
Code
110function EnvironmentalScoreHerbicide:writeFarmlandDataToStream(data, streamId, connection)
111 local score = self:getScore(data.farmlandId)
112 streamWriteUIntN(streamId, score * 255, 8)
113end