58 | function FertilizingCultivator:processCultivatorArea(superFunc, workArea, dt) |
59 | local spec = self.spec_fertilizingCultivator |
60 | local specCultivator = self.spec_cultivator |
61 | local specSpray = self.spec_sprayer |
62 | |
63 | local xs,_,zs = getWorldTranslation(workArea.start) |
64 | local xw,_,zw = getWorldTranslation(workArea.width) |
65 | local xh,_,zh = getWorldTranslation(workArea.height) |
66 | |
67 | local cultivatorParams = specCultivator.workAreaParameters |
68 | local sprayerParams = specSpray.workAreaParameters |
69 | |
70 | -- we need to use fertilizer as spraying type because fertilizer is the final blocking value |
71 | local sprayTypeIndex = SprayType.FERTILIZER |
72 | |
73 | if sprayerParams.sprayFillLevel <= 0 or (spec.needsSetIsTurnedOn and not self:getIsTurnedOn()) then |
74 | sprayTypeIndex = nil |
75 | end |
76 | |
77 | local cultivatorChangedArea, cultivatorTotalArea |
78 | if specCultivator.useDeepMode then |
79 | cultivatorChangedArea, cultivatorTotalArea = FSDensityMapUtil.updateCultivatorArea(xs, zs, xw, zw, xh, zh, not cultivatorParams.limitToField, cultivatorParams.limitFruitDestructionToField, cultivatorParams.angle, sprayTypeIndex) |
80 | cultivatorChangedArea = cultivatorChangedArea + FSDensityMapUtil.updateVineCultivatorArea(xs, zs, xw, zw, xh, zh) |
81 | else |
82 | cultivatorChangedArea, cultivatorTotalArea = FSDensityMapUtil.updateDiscHarrowArea(xs, zs, xw, zw, xh, zh, not cultivatorParams.limitToField, cultivatorParams.limitFruitDestructionToField, cultivatorParams.angle, sprayTypeIndex) |
83 | cultivatorChangedArea = cultivatorChangedArea + FSDensityMapUtil.updateVineCultivatorArea(xs, zs, xw, zw, xh, zh) |
84 | end |
85 | |
86 | cultivatorParams.lastChangedArea = cultivatorParams.lastChangedArea + cultivatorChangedArea |
87 | cultivatorParams.lastTotalArea = cultivatorParams.lastTotalArea + cultivatorTotalArea |
88 | cultivatorParams.lastStatsArea = cultivatorParams.lastStatsArea + cultivatorChangedArea |
89 | |
90 | if specCultivator.isSubsoiler then |
91 | FSDensityMapUtil.updateSubsoilerArea(xs, zs, xw, zw, xh, zh) |
92 | end |
93 | |
94 | FSDensityMapUtil.eraseTireTrack(xs, zs, xw, zw, xh, zh) |
95 | |
96 | if sprayTypeIndex ~= nil then |
97 | local sprayAmount = specSpray.doubledAmountIsActive and 2 or 1 |
98 | local sprayChangedArea, sprayTotalArea = FSDensityMapUtil.updateSprayArea(xs, zs, xw, zw, xh, zh, sprayTypeIndex, sprayAmount) |
99 | |
100 | sprayerParams.lastChangedArea = sprayerParams.lastChangedArea + sprayChangedArea |
101 | sprayerParams.lastTotalArea = sprayerParams.lastTotalArea + sprayTotalArea |
102 | sprayerParams.lastStatsArea = 0 |
103 | sprayerParams.isActive = true |
104 | end |
105 | |
106 | specCultivator.isWorking = true |
107 | |
108 | return cultivatorChangedArea, cultivatorTotalArea |
109 | end |
113 | function FertilizingCultivator:setSprayerAITerrainDetailProhibitedRange(superFunc, fillType) |
114 | if self.addAITerrainDetailProhibitedRange ~= nil then |
115 | self:clearAITerrainDetailProhibitedRange() |
116 | |
117 | local sprayTypeDesc = g_sprayTypeManager:getSprayTypeByFillTypeIndex(fillType) |
118 | if sprayTypeDesc ~= nil then |
119 | local mission = g_currentMission |
120 | local sprayTypeMapId, sprayTypeFirstChannel, sprayTypeNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.SPRAY_TYPE) |
121 | local sprayLevelMapId, sprayLevelFirstChannel, sprayLevelNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.SPRAY_LEVEL) |
122 | local sprayLevelMaxValue = mission.fieldGroundSystem:getMaxValue(FieldDensityMap.SPRAY_LEVEL) |
123 | self:addAITerrainDetailProhibitedRange(sprayTypeDesc.sprayGroundType, sprayTypeDesc.sprayGroundType, sprayTypeFirstChannel, sprayTypeNumChannels) |
124 | -- TODO enable after field crops query support bitVectorMaps |
125 | --self:addAIFruitProhibitions(0, sprayTypeDesc.sprayGroundType, sprayTypeDesc.sprayGroundType, sprayTypeMapId, sprayTypeFirstChannel, sprayTypeNumChannels) |
126 | --self:addAIFruitProhibitions(0, sprayLevelMaxValue, sprayLevelMaxValue, sprayLevelMapId, sprayLevelFirstChannel, sprayLevelNumChannels) |
127 | end |
128 | end |
129 | end |