LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

ManureSensor

Description
Specialization for manure sensors
Functions

getCurrentNitrogenLevelOffset

Description
Definition
getCurrentNitrogenLevelOffset()
Code
147function ManureSensor:getCurrentNitrogenLevelOffset(superFunc, lastChangeLevels)
148 if not self.spec_manureSensor.sensorRequired then
149 return superFunc(self)
150 end
151
152 if not self.spec_manureSensor.sensorAvailable then
153 return self:getManureSensorNitrogenOffset(lastChangeLevels)
154 end
155
156 return 0
157end

getCurrentNitrogenUsageLevelOffset

Description
Definition
getCurrentNitrogenUsageLevelOffset()
Code
161function ManureSensor:getCurrentNitrogenUsageLevelOffset(superFunc, lastChangeLevels)
162 if not self.spec_manureSensor.sensorRequired then
163 return superFunc(self)
164 end
165
166 if self.spec_manureSensor.sensorAvailable then
167 return self:getManureSensorNitrogenOffset(lastChangeLevels)
168 end
169
170 return 0
171end

getIsUsingExactNitrogenAmount

Description
Definition
getIsUsingExactNitrogenAmount()
Code
175function ManureSensor:getIsUsingExactNitrogenAmount(superFunc)
176 if not self.spec_manureSensor.sensorRequired then
177 return superFunc(self)
178 end
179
180 return self.spec_manureSensor.sensorAvailable
181end

getManureSensorNitrogenOffset

Description
Definition
getManureSensorNitrogenOffset()
Code
135function ManureSensor:getManureSensorNitrogenOffset(lastChangeLevels)
136 local spec = self.spec_manureSensor
137 local curve = (g_time % ManureSensor.CHANGE_TIME) / ManureSensor.CHANGE_TIME + spec.currentCurveOffset
138 local offset = math.sin(curve * math.pi * 2) * 0.75 + math.sin(curve * math.pi * 10) * 0.15 + math.sin(curve * math.pi * 20) * 0.15
139 local stepOffset = offset * (lastChangeLevels * ManureSensor.MAX_NITROGEN_OFFSET_PCT)
140 local direction = MathUtil.sign(stepOffset)
141 stepOffset = MathUtil.round(math.abs(stepOffset))
142 return stepOffset * direction
143end

initSpecialization

Description
Definition
initSpecialization()
Code
29function ManureSensor.initSpecialization()
30 g_configurationManager:addConfigurationType("manureSensor", g_i18n:getText("configuration_manureSensor"), "manureSensor", nil, nil, nil, ConfigurationUtil.SELECTOR_MULTIOPTION)
31
32 local schema = Vehicle.xmlSchema
33 schema:setXMLSpecializationType("ManureSensor")
34
35 schema:register(XMLValueType.NODE_INDEX, "vehicle.manureSensor.manureSensorConfigurations.manureSensorConfiguration(?).linkNode#node", "Sensor Link Node")
36 schema:register(XMLValueType.STRING, "vehicle.manureSensor.manureSensorConfigurations.manureSensorConfiguration(?).linkNode#type", "Sensor Type (DEFAULT, LARGE, SMALL or STANDALONE)")
37
38 schema:setXMLSpecializationType()
39end

linkManureSensor

Description
Definition
linkManureSensor()
Code
101function ManureSensor:linkManureSensor(linkData)
102 for i=1, #linkData.linkNodes do
103 local linkNodeData = linkData.linkNodes[i]
104
105 local linkNode = linkNodeData.linkNode
106 if linkNode == nil and linkNodeData.nodeName ~= nil then
107 if self.i3dMappings[linkNodeData.nodeName] ~= nil then
108 linkNode = self.i3dMappings[linkNodeData.nodeName].nodeId
109 end
110 end
111
112 if linkNode ~= nil then
113 local sensorData = g_precisionFarming:getClonedManureSensorNode(linkNodeData.typeName)
114 if sensorData ~= nil then
115 link(linkNode, sensorData.node)
116
117 if linkNodeData.translation ~= nil then
118 setTranslation(sensorData.node, linkNodeData.translation[1], linkNodeData.translation[2], linkNodeData.translation[3])
119 end
120 if linkNodeData.rotation ~= nil then
121 setRotation(sensorData.node, linkNodeData.rotation[1], linkNodeData.rotation[2], linkNodeData.rotation[3])
122 end
123 if linkNodeData.scale ~= nil then
124 setScale(sensorData.node, linkNodeData.scale[1], linkNodeData.scale[2], linkNodeData.scale[3])
125 end
126 end
127 end
128 end
129
130 self.spec_manureSensor.sensorAvailable = true
131end

onLoad

Description
Definition
onLoad()
Code
59function ManureSensor:onLoad(savegame)
60 self.spec_manureSensor = self["spec_" .. ManureSensor.SPEC_NAME]
61 local spec = self.spec_manureSensor
62
63 spec.currentCurveOffset = math.random()
64
65 spec.sensorRequired = false
66 local fillUnits = self:getFillUnits()
67 for i=1, #fillUnits do
68 spec.sensorRequired = spec.sensorRequired or self:getFillUnitAllowsFillType(i, FillType.LIQUIDMANURE) or self:getFillUnitAllowsFillType(i, FillType.DIGESTATE)
69 end
70
71 spec.sensorAvailable = false
72
73 local configIndex = self.configurations["manureSensor"]
74 if configIndex ~= nil then
75 local configKey = string.format("vehicle.manureSensor.manureSensorConfigurations.manureSensorConfiguration(%d)", configIndex - 1)
76
77 local linkNode = self.xmlFile:getValue(configKey .. ".linkNode#node", nil, self.components, self.i3dMappings)
78 if linkNode ~= nil then
79 local typeName = self.xmlFile:getValue(configKey .. ".linkNode#type", "DEFAULT")
80 local linkData = {}
81 linkData.linkNodes = {}
82 linkData.linkNodes[1] = {linkNode = linkNode,
83 typeName = typeName
84 }
85 self:linkManureSensor(linkData)
86 end
87
88 if configIndex > 1 then
89 if g_precisionFarming ~= nil then
90 local linkData = g_precisionFarming:getManureSensorLinkageData(self.configFileName)
91 if linkData ~= nil then
92 self:linkManureSensor(linkData)
93 end
94 end
95 end
96 end
97end

prerequisitesPresent

Description
Checks if all prerequisite specializations are loaded
Definition
prerequisitesPresent(table specializations)
Arguments
tablespecializationsspecializations
Return Values
booleanhasPrerequisitetrue if all prerequisite specializations are loaded
Code
23function ManureSensor.prerequisitesPresent(specializations)
24 return SpecializationUtil.hasSpecialization(Sprayer, specializations) and SpecializationUtil.hasSpecialization(PrecisionFarmingStatistic, specializations)
25end