49 | function Field:load(id) |
50 | self.rootNode = id |
51 | local name = getUserAttribute(id, "name") |
52 | if name ~= nil then |
53 | self.name = g_i18n:convertText(name, g_currentMission.loadingMapModName) |
54 | end |
55 | |
56 | self.fieldMissionAllowed = Utils.getNoNil(getUserAttribute(id, "fieldMissionAllowed"), true) |
57 | self.fieldGrassMission = Utils.getNoNil(getUserAttribute(id, "fieldGrassMission"), false) |
58 | |
59 | local fieldDimensions = I3DUtil.indexToObject(id, getUserAttribute(id, "fieldDimensionIndex")) |
60 | if fieldDimensions == nil then |
61 | print("Warning: No fieldDimensionIndex defined for Field '"..getName(id).."'!") |
62 | return false |
63 | end |
64 | local angleRad = math.rad(Utils.getNoNil(tonumber(getUserAttribute(id, "fieldAngle")), 0)) |
65 | |
66 | self.fieldAngle = FSDensityMapUtil.convertToDensityMapAngle(angleRad, g_currentMission.fieldGroundSystem:getGroundAngleMaxValue()) |
67 | self.fieldDimensions = fieldDimensions |
68 | |
69 | FieldUtil.updateFieldPartitions(self, self.getFieldStatusPartitions, 900) |
70 | FieldUtil.updateFieldPartitions(self, self.setFieldStatusPartitions, 400) |
71 | FieldUtil.updateFieldPartitions(self, self.maxFieldStatusPartitions, 10000000) |
72 | |
73 | self.posX, self.posZ = FieldUtil.getCenterOfField(self) |
74 | |
75 | self.nameIndicator = I3DUtil.indexToObject(id, getUserAttribute(id, "nameIndicatorIndex")) -- this is where the field number appears on the ingamemap |
76 | if self.nameIndicator ~= nil then |
77 | local x, _, z = getWorldTranslation(self.nameIndicator) |
78 | self.posX, self.posZ = x, z |
79 | end |
80 | |
81 | self.farmland = nil |
82 | |
83 | return true |
84 | end |
17 | function Field.new(customMt) |
18 | local self = {} |
19 | setmetatable(self, customMt or Field_mt) |
20 | |
21 | self.fieldId = 0 |
22 | self.posX = 0 |
23 | self.posZ = 0 |
24 | self.rootNode = nil |
25 | self.name = nil |
26 | self.mapHotspot = nil |
27 | self.fieldMissionAllowed = true |
28 | self.fieldGrassMission = false |
29 | self.fieldAngle = 0.0 |
30 | self.fieldDimensions = nil |
31 | self.fieldArea = 1.0 |
32 | self.getFieldStatusPartitions = {} |
33 | self.setFieldStatusPartitions = {} |
34 | self.maxFieldStatusPartitions = {} |
35 | self.isAIActive = true |
36 | self.fruitType = nil -- current fruit in the field, as seen by FJM |
37 | self.lastCheckedTime = nil |
38 | self.plannedFruit = 0 |
39 | |
40 | self.currentMission = nil |
41 | |
42 | return self |
43 | end |