372 | function MapOverlayGenerator:buildFarmlandsMapOverlay(selectedFarmland) |
373 | local map = self.farmlandManager:getLocalMap() |
374 | local farmlands = self.farmlandManager:getFarmlands() |
375 | |
376 | setOverlayColor(self.farmlandStateOverlay, 1, 1, 1, MapOverlayGenerator.FARMLANDS_ALPHA) |
377 | |
378 | for k, farmland in pairs(farmlands) do |
379 | local ownerFarmId = self.farmlandManager:getFarmlandOwner(farmland.id) |
380 | |
381 | if ownerFarmId ~= FarmlandManager.NOT_BUYABLE_FARM_ID then |
382 | if selectedFarmland ~= nil and farmland.id == selectedFarmland.id then |
383 | setDensityMapVisualizationOverlayStateColor(self.farmlandStateOverlay, map, 0, 0, 0, getBitVectorMapNumChannels(map), k, unpack(MapOverlayGenerator.COLOR.FIELD_SELECTED)) |
384 | else |
385 | local color = MapOverlayGenerator.COLOR.FIELD_UNOWNED |
386 | if farmland.isOwned then -- assign farm color |
387 | local ownerFarm = self.farmManager:getFarmById(ownerFarmId) |
388 | if ownerFarm ~= nil then |
389 | color = ownerFarm:getColor() |
390 | end |
391 | end |
392 | |
393 | setDensityMapVisualizationOverlayStateColor(self.farmlandStateOverlay, map, 0, 0, 0, getBitVectorMapNumChannels(map), k, unpack(color)) |
394 | end |
395 | end |
396 | end |
397 | |
398 | -- No borders on small maps |
399 | local profileClass = Utils.getPerformanceClassId() |
400 | if profileClass >= GS_PROFILE_HIGH then |
401 | setDensityMapVisualizationOverlayStateBorderColor(self.farmlandStateOverlay, map, 0, getBitVectorMapNumChannels(map), MapOverlayGenerator.FARMLANDS_BORDER_THICKNESS, unpack(MapOverlayGenerator.COLOR.FIELD_BORDER)) |
402 | end |
403 | |
404 | self:buildFieldMapOverlay(self.farmlandStateOverlay) |
405 | end |
183 | function MapOverlayGenerator:buildGrowthStateMapOverlay(growthStateFilter, fruitTypeFilter) |
184 | for _, displayCropType in ipairs(self.displayCropTypes) do |
185 | if fruitTypeFilter[displayCropType.fruitTypeIndex] then |
186 | local foliageId = displayCropType.foliageId |
187 | local desc = self.fruitTypeManager:getFruitTypeByIndex(displayCropType.fruitTypeIndex) |
188 | |
189 | if desc.maxHarvestingGrowthState >= 0 then |
190 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.WITHERED] then |
191 | if desc.witheredState ~= nil then |
192 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.WITHERED].colors[self.isColorBlindMode][1] |
193 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, foliageId, desc.witheredState, color[1], color[2], color[3]) |
194 | end |
195 | end |
196 | |
197 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.HARVESTED] then |
198 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.HARVESTED].colors[self.isColorBlindMode][1] |
199 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, foliageId, desc.cutState, color[1], color[2], color[3]) |
200 | end |
201 | |
202 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.GROWING] then |
203 | local maxGrowingState = desc.minHarvestingGrowthState - 1 |
204 | if desc.minPreparingGrowthState >= 0 then |
205 | maxGrowingState = math.min(maxGrowingState, desc.minPreparingGrowthState - 1) |
206 | end |
207 | |
208 | local colors = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.GROWING].colors[self.isColorBlindMode] |
209 | for i = 1, maxGrowingState do |
210 | -- Spready states across colors as different fruits have a different number of growth states |
211 | local index = math.max(math.floor(#colors / maxGrowingState * i), 1) |
212 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, foliageId, i, colors[index][1], colors[index][2], colors[index][3]) |
213 | end |
214 | end |
215 | |
216 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.TOPPING] then |
217 | if desc.minPreparingGrowthState >= 0 then |
218 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.TOPPING].colors[self.isColorBlindMode][1] |
219 | for i = desc.minPreparingGrowthState, desc.maxPreparingGrowthState do |
220 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, foliageId, i, color[1], color[2], color[3]) |
221 | end |
222 | end |
223 | end |
224 | |
225 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.HARVEST] then |
226 | local colors = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.HARVEST].colors[self.isColorBlindMode] |
227 | for i = desc.minHarvestingGrowthState, desc.maxHarvestingGrowthState do |
228 | local index = math.min(i - desc.minHarvestingGrowthState + 1, #colors) |
229 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, foliageId, i, colors[index][1], colors[index][2], colors[index][3]) |
230 | end |
231 | end |
232 | end |
233 | end |
234 | end |
235 | |
236 | local mission = g_currentMission |
237 | local groundTypeMapId, groundTypeFirstChannel, groundTypeNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.GROUND_TYPE) |
238 | |
239 | -- local fieldMask = 15 |
240 | local fieldMask = bitShiftLeft(bitShiftLeft(1, groundTypeNumChannels)-1, groundTypeFirstChannel) |
241 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.CULTIVATED] then |
242 | local cultivatorValue = mission.fieldGroundSystem:getFieldGroundValue(FieldGroundType.CULTIVATED) |
243 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.CULTIVATED].colors[self.isColorBlindMode][1] |
244 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, groundTypeMapId, 0, fieldMask, groundTypeFirstChannel, groundTypeNumChannels, cultivatorValue, color[1], color[2], color[3]) |
245 | end |
246 | |
247 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.PLOWED] then |
248 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.PLOWED].colors[self.isColorBlindMode][1] |
249 | local plowValue = mission.fieldGroundSystem:getFieldGroundValue(FieldGroundType.PLOWED) |
250 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, groundTypeMapId, 0, fieldMask, groundTypeFirstChannel, groundTypeNumChannels, plowValue, color[1], color[2], color[3]) |
251 | end |
252 | |
253 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.STUBBLE_TILLAGE] then |
254 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.STUBBLE_TILLAGE].colors[self.isColorBlindMode][1] |
255 | local stubbleTillageValue = mission.fieldGroundSystem:getFieldGroundValue(FieldGroundType.STUBBLE_TILLAGE) |
256 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, groundTypeMapId, 0, fieldMask, groundTypeFirstChannel, groundTypeNumChannels, stubbleTillageValue, color[1], color[2], color[3]) |
257 | end |
258 | |
259 | if growthStateFilter[MapOverlayGenerator.GROWTH_STATE_INDEX.SEEDBED] then |
260 | local color = self.displayGrowthStates[MapOverlayGenerator.GROWTH_STATE_INDEX.SEEDBED].colors[self.isColorBlindMode][1] |
261 | local seedBedValue = mission.fieldGroundSystem:getFieldGroundValue(FieldGroundType.SEEDBED) |
262 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, groundTypeMapId, 0, fieldMask, groundTypeFirstChannel, groundTypeNumChannels, seedBedValue, color[1], color[2], color[3]) |
263 | local rolledSeedBedValue = mission.fieldGroundSystem:getFieldGroundValue(FieldGroundType.ROLLED_SEEDBED) |
264 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, groundTypeMapId, 0, fieldMask, groundTypeFirstChannel, groundTypeNumChannels, rolledSeedBedValue, color[1], color[2], color[3]) |
265 | end |
266 | end |
270 | function MapOverlayGenerator:buildSoilStateMapOverlay(soilStateFilter) |
271 | local mission = g_currentMission |
272 | local groundTypeMapId, groundTypeFirstChannel, groundTypeNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.GROUND_TYPE) |
273 | -- local fieldMask = 15 |
274 | local fieldMask = bitShiftLeft(bitShiftLeft(1, groundTypeNumChannels)-1, groundTypeFirstChannel) |
275 | |
276 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.WEEDS] and mission.missionInfo.weedsEnabled then |
277 | local weedSystem = mission.weedSystem |
278 | if weedSystem ~= nil and weedSystem:getMapHasWeed() then |
279 | local weedMapId, _, _ = weedSystem:getDensityMapData() |
280 | |
281 | local mapColor, mapColorBlind = weedSystem:getColors() |
282 | local colors = self.isColorBlindMode and mapColorBlind or mapColor |
283 | |
284 | for k, data in ipairs(colors) do |
285 | local stateColor = data.color |
286 | for _, state in ipairs(data.states) do |
287 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, weedMapId, state, stateColor[1], stateColor[2], stateColor[3]) |
288 | end |
289 | end |
290 | end |
291 | end |
292 | |
293 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.STONES] and mission.missionInfo.stonesEnabled then |
294 | local stoneSystem = mission.stoneSystem |
295 | if stoneSystem ~= nil and stoneSystem:getMapHasStones() then |
296 | local stoneMapId, _, _ = stoneSystem:getDensityMapData() |
297 | |
298 | local mapColor, mapColorBlind = stoneSystem:getColors() |
299 | local colors = self.isColorBlindMode and mapColorBlind or mapColor |
300 | |
301 | for k, data in ipairs(colors) do |
302 | local stateColor = data.color |
303 | for _, state in ipairs(data.states) do |
304 | setDensityMapVisualizationOverlayGrowthStateColor(self.foliageStateOverlay, stoneMapId, state, stateColor[1], stateColor[2], stateColor[3]) |
305 | end |
306 | end |
307 | end |
308 | end |
309 | |
310 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_PLOWING] and mission.missionInfo.plowingRequiredEnabled then |
311 | local color = self.displaySoilStates[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_PLOWING].colors[self.isColorBlindMode][1] |
312 | local mapId, plowLevelFirstChannel, plowLevelNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.PLOW_LEVEL) |
313 | |
314 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, mapId, groundTypeMapId, fieldMask, plowLevelFirstChannel, plowLevelNumChannels, 0, color[1], color[2], color[3]) |
315 | end |
316 | |
317 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_ROLLING] then |
318 | local color = self.displaySoilStates[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_ROLLING].colors[self.isColorBlindMode][1] |
319 | local mapId, rollerLevelFirstChannel, rollerLevelNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.ROLLER_LEVEL) |
320 | |
321 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, mapId, 0, fieldMask, rollerLevelFirstChannel, rollerLevelNumChannels, 1, color[1], color[2], color[3]) |
322 | end |
323 | |
324 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.MULCHED] then |
325 | local color = self.displaySoilStates[MapOverlayGenerator.SOIL_STATE_INDEX.MULCHED].colors[self.isColorBlindMode][1] |
326 | local mapId, mulchFirstChannel, mulchNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.STUBBLE_SHRED) |
327 | |
328 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, mapId, 0, fieldMask, mulchFirstChannel, mulchNumChannels, 1, color[1], color[2], color[3]) |
329 | end |
330 | |
331 | if not GS_IS_MOBILE_VERSION then |
332 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_LIME] and mission.missionInfo.limeRequired then |
333 | local color = self.displaySoilStates[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_LIME].colors[self.isColorBlindMode][1] |
334 | local mapId, limeLevelFirstChannel, limeLevelNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.LIME_LEVEL) |
335 | |
336 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, mapId, groundTypeMapId, fieldMask, limeLevelFirstChannel, limeLevelNumChannels, 0, color[1], color[2], color[3]) |
337 | end |
338 | end |
339 | |
340 | if soilStateFilter[MapOverlayGenerator.SOIL_STATE_INDEX.FERTILIZED] then |
341 | local colors = self.displaySoilStates[MapOverlayGenerator.SOIL_STATE_INDEX.FERTILIZED].colors[self.isColorBlindMode] |
342 | local sprayMapId, sprayLevelFirstChannel, sprayLevelNumChannels = mission.fieldGroundSystem:getDensityMapData(FieldDensityMap.SPRAY_LEVEL) |
343 | local maxSprayLevel = mission.fieldGroundSystem:getMaxValue(FieldDensityMap.SPRAY_LEVEL) |
344 | for level = 1, maxSprayLevel do |
345 | local color = colors[math.min(level, #colors)] |
346 | setDensityMapVisualizationOverlayStateColor(self.foliageStateOverlay, sprayMapId, 0, fieldMask, sprayLevelFirstChannel, sprayLevelNumChannels, level, color[1], color[2], color[3]) |
347 | end |
348 | end |
349 | end |
561 | function MapOverlayGenerator:getDisplayGrowthStates() |
562 | local res = { |
563 | -- indices are contiguous, so this definition is a valid array: |
564 | [MapOverlayGenerator.GROWTH_STATE_INDEX.CULTIVATED] = { |
565 | colors = { |
566 | [true] = {MapOverlayGenerator.FRUIT_COLOR_CULTIVATED[true]}, |
567 | [false] = {MapOverlayGenerator.FRUIT_COLOR_CULTIVATED[false]} |
568 | }, |
569 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_CULTIVATED) |
570 | }, |
571 | [MapOverlayGenerator.GROWTH_STATE_INDEX.STUBBLE_TILLAGE] = { |
572 | colors = { |
573 | [true] = {MapOverlayGenerator.FRUIT_COLOR_STUBBLE_TILLAGE[true]}, |
574 | [false] = {MapOverlayGenerator.FRUIT_COLOR_STUBBLE_TILLAGE[false]} |
575 | }, |
576 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_STUBBLE_TILLAGE) |
577 | }, |
578 | [MapOverlayGenerator.GROWTH_STATE_INDEX.SEEDBED] = { |
579 | colors = { |
580 | [true] = {MapOverlayGenerator.FRUIT_COLOR_SEEDBED[true]}, |
581 | [false] = {MapOverlayGenerator.FRUIT_COLOR_SEEDBED[false]} |
582 | }, |
583 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_SEEDBED) |
584 | }, |
585 | [MapOverlayGenerator.GROWTH_STATE_INDEX.GROWING] = { |
586 | colors = MapOverlayGenerator.FRUIT_COLORS_GROWING, |
587 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_GROWING) |
588 | }, |
589 | [MapOverlayGenerator.GROWTH_STATE_INDEX.HARVEST] = { |
590 | colors = MapOverlayGenerator.FRUIT_COLORS_HARVEST, |
591 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_HARVEST) |
592 | }, |
593 | [MapOverlayGenerator.GROWTH_STATE_INDEX.HARVESTED] = { |
594 | colors = { |
595 | [true] = {MapOverlayGenerator.FRUIT_COLOR_CUT}, |
596 | [false] = {MapOverlayGenerator.FRUIT_COLOR_CUT} |
597 | }, |
598 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_HARVESTED) |
599 | }, |
600 | [MapOverlayGenerator.GROWTH_STATE_INDEX.TOPPING] = { |
601 | colors = { |
602 | [true] = {MapOverlayGenerator.FRUIT_COLOR_REMOVE_TOPS[true]}, |
603 | [false] = {MapOverlayGenerator.FRUIT_COLOR_REMOVE_TOPS[false]} |
604 | }, |
605 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_TOPPING) |
606 | } |
607 | } |
608 | |
609 | if not GS_IS_MOBILE_VERSION then |
610 | res[MapOverlayGenerator.GROWTH_STATE_INDEX.PLOWED] = { |
611 | colors = { |
612 | [true] = {MapOverlayGenerator.FRUIT_COLOR_PLOWED[true]}, |
613 | [false] = {MapOverlayGenerator.FRUIT_COLOR_PLOWED[false]} |
614 | }, |
615 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_PLOWED) |
616 | } |
617 | |
618 | res[MapOverlayGenerator.GROWTH_STATE_INDEX.WITHERED] = { |
619 | colors = { |
620 | [true] = {MapOverlayGenerator.FRUIT_COLOR_WITHERED[true]}, |
621 | [false] = {MapOverlayGenerator.FRUIT_COLOR_WITHERED[false]} |
622 | }, |
623 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.GROWTH_MAP_WITHERED) |
624 | } |
625 | end |
626 | |
627 | return res |
628 | end |
636 | function MapOverlayGenerator:getDisplaySoilStates() |
637 | local fertilizerColors = {[true]={}, [false]={}} |
638 | local mission = g_currentMission |
639 | |
640 | local maxFertilizerStates = mission.fieldGroundSystem:getMaxValue(FieldDensityMap.SPRAY_LEVEL) |
641 | for colorBlind, colors in pairs(MapOverlayGenerator.FRUIT_COLORS_FERTILIZED) do |
642 | for i=#colors, 1, -1 do |
643 | local color = colors[i] |
644 | table.insert(fertilizerColors[colorBlind], 1, color) |
645 | |
646 | if #fertilizerColors[colorBlind] == maxFertilizerStates then |
647 | break |
648 | end |
649 | end |
650 | end |
651 | |
652 | local res = { |
653 | [MapOverlayGenerator.SOIL_STATE_INDEX.FERTILIZED] = { |
654 | colors = fertilizerColors, |
655 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.SOIL_MAP_FERTILIZED), |
656 | isActive = true |
657 | }, |
658 | } |
659 | if not GS_IS_MOBILE_VERSION then |
660 | res[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_LIME] = { |
661 | colors = { |
662 | [true] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_LIME[true]}, |
663 | [false] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_LIME[false]} |
664 | }, |
665 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.SOIL_MAP_NEED_LIME), |
666 | isActive = mission.missionInfo.limeRequired |
667 | } |
668 | |
669 | res[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_PLOWING] = { |
670 | colors = { |
671 | [true] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_PLOWING[true]}, |
672 | [false] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_PLOWING[false]} |
673 | }, |
674 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.SOIL_MAP_NEED_PLOWING), |
675 | isActive = mission.missionInfo.plowingRequiredEnabled |
676 | } |
677 | |
678 | res[MapOverlayGenerator.SOIL_STATE_INDEX.NEEDS_ROLLING] = { |
679 | colors = { |
680 | [true] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_ROLLING[true]}, |
681 | [false] = {MapOverlayGenerator.FRUIT_COLOR_NEEDS_ROLLING[false]} |
682 | }, |
683 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.SOIL_MAP_NEED_ROLLING), |
684 | isActive = true |
685 | } |
686 | |
687 | res[MapOverlayGenerator.SOIL_STATE_INDEX.MULCHED] = { |
688 | colors = { |
689 | [true] = {MapOverlayGenerator.FRUIT_COLOR_MULCHED[true]}, |
690 | [false] = {MapOverlayGenerator.FRUIT_COLOR_MULCHED[false]} |
691 | }, |
692 | description = self.l10n:getText(MapOverlayGenerator.L10N_SYMBOL.SOIL_MAP_MULCHED), |
693 | isActive = true |
694 | } |
695 | end |
696 | |
697 | local weedSystem = mission.weedSystem |
698 | if weedSystem ~= nil and weedSystem:getMapHasWeed() then |
699 | local mapColor, mapColorBlind = weedSystem:getColors() |
700 | local description = weedSystem:getTitle() or "" |
701 | |
702 | local colors = {[true]={}, [false]={}} |
703 | for k, data in ipairs(mapColor) do |
704 | table.insert(colors[true], mapColorBlind[k].color) |
705 | table.insert(colors[false], data.color) |
706 | end |
707 | |
708 | res[MapOverlayGenerator.SOIL_STATE_INDEX.WEEDS] = { |
709 | colors = colors, |
710 | description = description, |
711 | isActive = mission.missionInfo.weedsEnabled |
712 | } |
713 | end |
714 | |
715 | local stoneSystem = mission.stoneSystem |
716 | if stoneSystem ~= nil and stoneSystem:getMapHasStones() then |
717 | local mapColor, mapColorBlind = stoneSystem:getColors() |
718 | local description = stoneSystem:getTitle() or "" |
719 | |
720 | local colors = {[true]={}, [false]={}} |
721 | for k, data in ipairs(mapColor) do |
722 | table.insert(colors[true], mapColorBlind[k].color) |
723 | table.insert(colors[false], data.color) |
724 | end |
725 | |
726 | res[MapOverlayGenerator.SOIL_STATE_INDEX.STONES] = { |
727 | colors = colors, |
728 | description = description, |
729 | isActive = mission.missionInfo.stonesEnabled |
730 | } |
731 | end |
732 | |
733 | return res |
734 | end |
43 | function MapOverlayGenerator.new(l10n, fruitTypeManager, fillTypeManager, farmlandManager, farmManager, weedSystem) |
44 | local self = setmetatable({}, MapOverlayGenerator_mt) |
45 | |
46 | self.l10n = l10n |
47 | self.fruitTypeManager = fruitTypeManager |
48 | self.fillTypeManager = fillTypeManager |
49 | self.farmlandManager = farmlandManager |
50 | self.farmManager = farmManager |
51 | |
52 | self.missionFruitTypes = {} |
53 | self.isColorBlindMode = nil |
54 | |
55 | self.foliageStateOverlay = createDensityMapVisualizationOverlay("foliageState", unpack(self:adjustedOverlayResolution(MapOverlayGenerator.OVERLAY_RESOLUTION.FOLIAGE_STATE))) |
56 | self.farmlandStateOverlay = createDensityMapVisualizationOverlay("farmlandState", unpack(self:adjustedOverlayResolution(MapOverlayGenerator.OVERLAY_RESOLUTION.FARMLANDS, true))) |
57 | self.minimapOverlay = createDensityMapVisualizationOverlay("minimap", unpack(self:adjustedOverlayResolution(MapOverlayGenerator.OVERLAY_RESOLUTION.MINIMAP))) |
58 | |
59 | self.typeBuilderFunctionMap = { |
60 | [MapOverlayGenerator.OVERLAY_TYPE.CROPS] = self.buildFruitTypeMapOverlay, |
61 | [MapOverlayGenerator.OVERLAY_TYPE.GROWTH] = self.buildGrowthStateMapOverlay, |
62 | [MapOverlayGenerator.OVERLAY_TYPE.SOIL] = self.buildSoilStateMapOverlay, |
63 | [MapOverlayGenerator.OVERLAY_TYPE.FARMLANDS] = self.buildFarmlandsMapOverlay, |
64 | [MapOverlayGenerator.OVERLAY_TYPE.MINIMAP] = self.buildMinimapOverlay, |
65 | } |
66 | |
67 | self.overlayHandles = { |
68 | [MapOverlayGenerator.OVERLAY_TYPE.CROPS] = self.foliageStateOverlay, -- re-use this handle, these types are mutually exclusive |
69 | [MapOverlayGenerator.OVERLAY_TYPE.GROWTH] = self.foliageStateOverlay, |
70 | [MapOverlayGenerator.OVERLAY_TYPE.SOIL] = self.foliageStateOverlay, |
71 | [MapOverlayGenerator.OVERLAY_TYPE.FARMLANDS] = self.farmlandStateOverlay, -- farmlands are separate |
72 | [MapOverlayGenerator.OVERLAY_TYPE.MINIMAP] = self.minimapOverlay, -- farmlands are separate |
73 | } |
74 | |
75 | self.currentOverlayHandle = nil -- handle of overlay which is currently being generated or nil if none is processing |
76 | self.overlayFinishedCallback = NO_CALLBACK |
77 | |
78 | self.overlayTypeCheckHash = {} |
79 | for k, v in pairs(MapOverlayGenerator.OVERLAY_TYPE) do |
80 | self.overlayTypeCheckHash[v] = k |
81 | end |
82 | |
83 | self.fieldColor = MapOverlayGenerator.FIELD_COLOR |
84 | self.grassFieldColor = MapOverlayGenerator.FIELD_GRASS_COLOR |
85 | |
86 | -- Set overlay refresh time limit... block less long in console single- and console/PC MP server mode |
87 | if GS_IS_CONSOLE_VERSION or (g_currentMission.missionDynamicInfo.isMultiplayer and g_currentMission:getIsServer()) then |
88 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.foliageStateOverlay, 10) |
89 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.farmlandStateOverlay, 10) |
90 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.minimapOverlay, 10) |
91 | else |
92 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.foliageStateOverlay, 20) |
93 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.farmlandStateOverlay, 20) |
94 | setDensityMapVisualizationOverlayUpdateTimeLimit(self.minimapOverlay, 20) |
95 | end |
96 | |
97 | return self |
98 | end |