Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- addParticleSystemSimulationTime
- getEmitStartTime
- getEmitStopTime
- getEmitterShape
- getEmitterShapeVelocityScale
- getParticleSystemAverageSpeed
- getParticleSystemLifespan
- resetEmitStartTimer
- resetEmitStopTimer
- resetNumOfEmittedParticles
- setEmitCountScale
- setEmitStartTime
- setEmitStopTime
- setEmitterShape
- setEmitterShapeVelocityScale
- setEmittingState
- setParticleSystemLifespan
- setParticleSystemTimeScale
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
EnvironmentalScoreHerbicide
ParentEnvironmentalScoreValueFunctions
- addWorkedArea
- getScore
- initFarmlandData
- loadFarmlandData
- loadFromXML
- onHarvestScoreReset
- overwriteGameFunctions
- readFarmlandDataFromStream
- saveFarmlandData
- update
- writeFarmlandDataToStream
addWorkedArea
DescriptionDefinitionaddWorkedArea()Code
124 | function 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 |
136 | end |
getScore
DescriptionDefinitiongetScore()Code
44 | function 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) |
66 | end |
initFarmlandData
DescriptionDefinitioninitFarmlandData()Code
70 | function 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 | } |
79 | end |
loadFarmlandData
DescriptionDefinitionloadFarmlandData()Code
83 | function 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) |
89 | end |
loadFromXML
DescriptionDefinitionloadFromXML()Code
29 | function 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 |
35 | end |
onHarvestScoreReset
DescriptionDefinitiononHarvestScoreReset()Code
117 | function EnvironmentalScoreHerbicide:onHarvestScoreReset(farmlandId) |
118 | local farmlandData = self:getFarmlandData(farmlandId) |
119 | farmlandData.pendingReset = true |
120 | end |
overwriteGameFunctions
DescriptionDefinitionoverwriteGameFunctions()Code
140 | function 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 |
177 | end |
readFarmlandDataFromStream
DescriptionDefinitionreadFarmlandDataFromStream()Code
103 | function EnvironmentalScoreHerbicide:readFarmlandDataFromStream(data, streamId, connection) |
104 | local score = MathUtil.round(streamReadUIntN(streamId, 8) / 255, 2) |
105 | data.clientScore = score |
106 | end |
saveFarmlandData
DescriptionDefinitionsaveFarmlandData()Code
93 | function 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) |
99 | end |
update
DescriptionDefinitionupdate()Code
39 | function EnvironmentalScoreHerbicide:update(dt) |
40 | end |
writeFarmlandDataToStream
DescriptionDefinitionwriteFarmlandDataToStream()Code
110 | function EnvironmentalScoreHerbicide:writeFarmlandDataToStream(data, streamId, connection) |
111 | local score = self:getScore(data.farmlandId) |
112 | streamWriteUIntN(streamId, score * 255, 8) |
113 | end |