65 | function PlaceableFoliageAreas:loadFoliageArea(xmlFile, key, area) |
66 | local fruitTypeName = xmlFile:getValue(key .. "#fruitType") |
67 | local decoFoliage = xmlFile:getValue(key .. "#decoFoliage") |
68 | |
69 | if fruitTypeName ~= nil and decoFoliage ~= nil then |
70 | Logging.xmlInfo(xmlFile, "Foliage area fruit type and decoFoliage defined defined for '%s'. Ignoring decoFoliage", fruitTypeName, key) |
71 | decoFoliage = nil |
72 | end |
73 | |
74 | local fruitType |
75 | local fruitState |
76 | if fruitTypeName ~= nil then |
77 | fruitType = g_fruitTypeManager:getFruitTypeByName(fruitTypeName) |
78 | if fruitType == nil then |
79 | Logging.xmlWarning(xmlFile, "Foliage area fruit type '%s' not defined for '%s'", fruitTypeName, key) |
80 | return false |
81 | end |
82 | |
83 | fruitState = xmlFile:getValue(key .. "#state", fruitType.maxHarvestingGrowthState - 1) |
84 | end |
85 | |
86 | if decoFoliage ~= nil then |
87 | if not g_currentMission.foliageSystem:getIsDecoLayerDefined(decoFoliage) then |
88 | Logging.xmlInfo(xmlFile, "Foliage area decoFoliage '%s' not defined on current map for '%s'", decoFoliage, key) |
89 | return false |
90 | end |
91 | end |
92 | |
93 | local start = xmlFile:getValue(key .. "#startNode", nil, self.components, self.i3dMappings) |
94 | if start == nil then |
95 | Logging.xmlWarning(xmlFile, "Foliage area start node not defined for '%s'", key) |
96 | return false |
97 | end |
98 | |
99 | local width = xmlFile:getValue(key .. "#widthNode", nil, self.components, self.i3dMappings) |
100 | if width == nil then |
101 | Logging.xmlWarning(xmlFile, "Foliage area width node not defined for '%s'", key) |
102 | return false |
103 | end |
104 | |
105 | local height = xmlFile:getValue(key .. "#heightNode", nil, self.components, self.i3dMappings) |
106 | if height == nil then |
107 | Logging.xmlWarning(xmlFile, "Foliage area height node not defined for '%s'", key) |
108 | return false |
109 | end |
110 | |
111 | area.start = start |
112 | area.width = width |
113 | area.height = height |
114 | area.fruitState = fruitState |
115 | area.fruitType = fruitType |
116 | area.decoFoliage = decoFoliage |
117 | |
118 | return true |
119 | end |
123 | function PlaceableFoliageAreas:onPostFinalizePlacement() |
124 | if self.isServer then |
125 | local spec = self.spec_foliageAreas |
126 | |
127 | for _, area in pairs(spec.areas) do |
128 | local x, _, z = getWorldTranslation(area.start) |
129 | local xWidth, _, zWidth = getWorldTranslation(area.width) |
130 | local xHeight, _, zHeight = getWorldTranslation(area.height) |
131 | |
132 | if area.fruitType ~= nil then |
133 | FieldUtil.setFruit(x, z, xWidth, zWidth, xHeight, zHeight, area.fruitType.index, area.fruitState) |
134 | else |
135 | g_currentMission.foliageSystem:applyDecoFoliage(area.decoFoliage, x, z, xWidth, zWidth, xHeight, zHeight) |
136 | end |
137 | end |
138 | end |
139 | end |
37 | function PlaceableFoliageAreas.registerXMLPaths(schema, basePath) |
38 | schema:setXMLSpecializationType("FoliageAreas") |
39 | schema:register(XMLValueType.NODE_INDEX, basePath .. ".foliageAreas.foliageArea(?)#startNode", "Start node") |
40 | schema:register(XMLValueType.NODE_INDEX, basePath .. ".foliageAreas.foliageArea(?)#widthNode", "Width node") |
41 | schema:register(XMLValueType.NODE_INDEX, basePath .. ".foliageAreas.foliageArea(?)#heightNode", "Height node") |
42 | schema:register(XMLValueType.STRING, basePath .. ".foliageAreas.foliageArea(?)#fruitType", "Fruit type name") |
43 | schema:register(XMLValueType.STRING, basePath .. ".foliageAreas.foliageArea(?)#decoFoliage", "Deco foliage name") |
44 | schema:register(XMLValueType.INT, basePath .. ".foliageAreas.foliageArea(?)#state", "Fruit type state") |
45 | schema:setXMLSpecializationType() |
46 | end |