LUADOC - Farming Simulator 19

HusbandryModuleBase

Description
This class handles modules in husbandry
Functions

addFillLevelFromTool

Description
Called to change the amount of a specific fillType
Definition
addFillLevelFromTool(float deltaFillLevel, integer fillTypeIndex)
Arguments
floatdeltaFillLevelamount to change
integerfillTypeIndexindex of the fillType
Return Values
floatdeltaof amount changed
Code
275function HusbandryModuleBase:addFillLevelFromTool(farmId, deltaFillLevel, fillTypeIndex)
276 if not self:getHasSpaceForUnloading() then
277 return 0
278 end
279
280 local changed = 0
281 changed = self:changeFillLevels(deltaFillLevel, fillTypeIndex)
282 return changed
283end

addFillLevelToFillableObject

Description
Increase fill level of a fillable object
Definition
addFillLevelToFillableObject(table fillableObject, integer fillTypeIndex, integer fillDelta, table fillInfo, toolType)
Arguments
tablefillableObjectfillable enity
integerfillTypeIndexfill type id
integerfillDeltaamount to fill
tablefillInfofill information structure
toolType
Return Values
floatactualdelta filled
Code
397function HusbandryModuleBase:addFillLevelToFillableObject(fillableObject, fillUnitIndex, fillTypeIndex, fillDelta, fillInfo, toolType)
398 if fillableObject == nil or fillableObject == 0 or fillableObject == self then
399 return 0.0
400 end
401
402 local oldFillLevel = self:getFillLevel(fillTypeIndex)
403 fillDelta = math.min(fillDelta, oldFillLevel)
404
405 local actualDelta = fillableObject:addFillUnitFillLevel(self.owner:getOwnerFarmId(), fillUnitIndex, fillDelta, fillTypeIndex, ToolType.UNDEFINED, fillInfo)
406 self:changeFillLevels(-actualDelta, fillTypeIndex)
407
408 return actualDelta
409end

changeFillLevels

Description
Change amount of fillType
Definition
changeFillLevels(float amount, integer index)
Arguments
floatamountto change the fill type
integerindexof the fillType
Return Values
floatamounteffectively changed
Code
251function HusbandryModuleBase:changeFillLevels(fillDelta, fillTypeIndex)
252 local delta = 0.0
253 if self.fillLevels[fillTypeIndex] ~= nil then
254 local oldFillLevel = self.fillLevels[fillTypeIndex]
255 local newFillLevel = oldFillLevel + fillDelta
256 newFillLevel = math.max(newFillLevel, 0.0)
257 delta = newFillLevel - oldFillLevel
258
259 local oldTotalFillLevel = self:getTotalFillLevel()
260 local capacity = self:getCapacity()
261 local newTotalFillLevel = oldTotalFillLevel + delta
262 newTotalFillLevel = MathUtil.clamp(newTotalFillLevel, 0.0, capacity)
263 delta = newTotalFillLevel - oldTotalFillLevel
264
265 self:setFillLevel(fillTypeIndex, newTotalFillLevel)
266 end
267 return delta
268end

createModule

Description
Husbandry module factory method
Definition
createModule(table spec)
Arguments
tablespecSpecialization reference
Return Values
tablemoduleinstance or nil of no module has been registered
Code
444function HusbandryModuleBase.createModule(moduleName)
445 local moduleType = registry[moduleName]
446 local moduleInstance = nil
447 if moduleType ~= nil then
448 moduleInstance = moduleType.new()
449 end
450 return moduleInstance
451end

delete

Description
Deletes instance
Definition
delete()
Code
40function HusbandryModuleBase:delete()
41 self.owner = nil
42end

finalizePlacement

Description
Called when husbandry is placed
Definition
finalizePlacement()
Return Values
booltrueif successful
Code
61function HusbandryModuleBase:finalizePlacement()
62 return true
63end

getAllFillLevels

Description
Definition
getAllFillLevels()
Code
379function HusbandryModuleBase:getAllFillLevels()
380 local fillLevels = {}
381 local capacity = self:getCapacity()
382
383 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
384 fillLevels[fillTypeIndex] = fillLevel
385 end
386 return fillLevels, capacity
387end

getCapacity

Description
Gets a fill capacity
Definition
getCapacity(integer index)
Arguments
integerindexof a fill type
Return Values
floatreturnsthe capacity of a fillType
Code
347function HusbandryModuleBase:getCapacity()
348 return self.fillCapacity
349end

getFillLevel

Description
Gets a fill level
Definition
getFillLevel(integer index)
Arguments
integerindexof a fill type
Return Values
floatreturnsthe fillLevel of a fillType
Code
289function HusbandryModuleBase:getFillLevel(fillTypeIndex)
290 return Utils.getNoNil(self.fillLevels[fillTypeIndex], 0.0)
291end

getFillProgress

Description
Gets a fill progress
Definition
getFillProgress(integer index)
Arguments
integerindexof a fill type
Return Values
floatreturnsa progress of the fillType between 0 and 1. Default is 0.
Code
355function HusbandryModuleBase:getFillProgress()
356 local capacity = self:getCapacity()
357 if capacity > 0.0 then
358 local progress = self:getTotalFillLevel() / capacity
359 progress = MathUtil.clamp(progress, 0.0, 1.0)
360 return progress
361 end
362 return 0.0
363end

getFreeCapacity

Description
Sets a capacity
Definition
getFreeCapacity()
Code
332function HusbandryModuleBase:getFreeCapacity(fillTypeIndex)
333 return self:getCapacity() - self:getFillLevel(fillTypeIndex)
334end

getHasSpaceForUnloading

Description
Checks if there is enough space to unload a fillType
Definition
getHasSpaceForUnloading(integer index)
Arguments
integerindexof the fillType
Code
242function HusbandryModuleBase:getHasSpaceForUnloading()
243 return self:getTotalFillLevel() <= self:getCapacity()
244end

getIsFillAllowedToFarm

Description
Definition
getIsFillAllowedToFarm(integer farmId)
Arguments
integerfarmId
Return Values
bool
Code
415function HusbandryModuleBase:getIsFillAllowedToFarm(farmId)
416 return g_currentMission.accessHandler:canFarmAccess(farmId, self.owner)
417end

getIsFillTypeAllowed

Description
Check if fillType is allowed
Definition
getIsFillTypeAllowed(integer fillTypeIndex)
Arguments
integerfillTypeIndexindex of the fillType to check
Code
222function HusbandryModuleBase:getIsFillTypeAllowed(fillTypeIndex)
223 for fTypeIndex, state in pairs(self.providedFillTypes) do
224 if fTypeIndex == fillTypeIndex and state then
225 return true
226 end
227 end
228
229 return false
230end

getIsNodeUsed

Description
Definition
getIsNodeUsed()
Code
373function HusbandryModuleBase:getIsNodeUsed(node)
374 return false
375end

getIsToolTypeAllowed

Description
Checks if a tool type is allowed. (empty method)
Definition
getIsToolTypeAllowed(integer toolType)
Arguments
integertoolType
Code
235function HusbandryModuleBase:getIsToolTypeAllowed(toolType)
236 return true
237end

getProvidedFillTypes

Description
Definition
getProvidedFillTypes()
Code
367function HusbandryModuleBase:getProvidedFillTypes()
368 return self.providedFillTypes
369end

getTotalFillLevel

Description
Gets total fill level
Definition
getTotalFillLevel()
Return Values
floatreturnsthe fillLevel of all fillType
Code
312function HusbandryModuleBase:getTotalFillLevel()
313 local totalFillLevel = 0.0
314
315 for _, fillLevel in pairs(self.fillLevels) do
316 totalFillLevel = totalFillLevel + fillLevel
317 end
318
319 return totalFillLevel
320end

hasModule

Description
Check if there is a module for a given specialization.
Definition
hasModule()
Code
455function HusbandryModuleBase.hasModule(moduleName)
456 return registry[moduleName] ~= nil
457end

initDataStructures

Description
Initialize data structures
Definition
initDataStructures()
Code
31function HusbandryModuleBase:initDataStructures()
32 self.fillLevels = {}
33 self.fillCapacity = 0.0
34 self.providedFillTypes = {}
35 self.singleAnimalUsagePerDay = 0.0
36end

load

Description
Loads data from xml. Checking methods from husbandry used by modules are available.
Definition
load(table xmlFile, string xmlKey, table rootNode, table owner)
Arguments
tablexmlFilehandle
stringxmlKeyfrom which to read the configuration
tablerootNodeof the husbandry
tableownerthe husbandry
Return Values
booleantrueif loading was successful else false
Code
51function HusbandryModuleBase:load(xmlFile, configKey, rootNode, owner, baseDirectory)
52 self.owner = owner
53 self.baseDirectory = baseDirectory
54
55 return true
56end

loadFromXMLFile

Description
Loads information from attributes and node. Retrives from xml file information.
Definition
loadFromXMLFile(table xmlFile, string key)
Arguments
tablexmlFileXML file handler
stringkeyXML base key
Code
169function HusbandryModuleBase:loadFromXMLFile(xmlFile, key)
170 self.fillCapacity = Utils.getNoNil(getXMLFloat(xmlFile, key.."#fillCapacity"), self.fillCapacity)
171
172 local i = 0
173 while true do
174 local fillLevelKey = key .. string.format(".fillLevel(%d)", i)
175
176 if not hasXMLProperty(xmlFile, fillLevelKey) then
177 break
178 end
179
180 local fillTypeName = getXMLString(xmlFile, fillLevelKey .. "#fillType")
181 local fillLevel = getXMLFloat(xmlFile, fillLevelKey .. "#fillLevel")
182 if fillTypeName ~= nil and fillLevel ~= nil then
183 local fillTypeIndex = g_fillTypeManager:getFillTypeIndexByName(fillTypeName)
184
185 if fillTypeIndex ~= nil then
186 self:setFillLevel(fillTypeIndex, fillLevel)
187 self.providedFillTypes[fillTypeIndex] = true
188 end
189 end
190 i = i + 1
191 end
192end

new

Description
Creating manager
Definition
new()
Return Values
tableinstanceinstance of object
Code
17function HusbandryModuleBase:new(customMt)
18 if customMt == nil then
19 customMt = HusbandryModuleBase_mt
20 end
21
22 local self = {}
23 setmetatable(self, customMt)
24 self:initDataStructures()
25 self.owner = nil
26 return self
27end

onIntervalUpdate

Description
Updates module when a timed interval has passed
Definition
onIntervalUpdate(float dayToInterval)
Arguments
floatdayToInterval
Code
78function HusbandryModuleBase:onIntervalUpdate(dayToInterval)
79end

onSell

Description
Called when husbandry is placed
Definition
onSell()
Return Values
booltrueif successful
Code
68function HusbandryModuleBase:onSell()
69 self.fillLevels = {}
70 self.fillCapacity = 0.0
71 self.providedFillTypes = {}
72 self.singleAnimalUsagePerDay = 0.0
73end

readStream

Description
Reads network stream
Definition
readStream(integer streamId, table connection)
Arguments
integerstreamIdnetwork stream identification
tableconnectionconnection information
Code
101function HusbandryModuleBase:readStream(streamId, connection)
102 local nbFillLevel = streamReadUInt8(streamId)
103
104 for i=1, nbFillLevel do
105 local fillTypeIndex = streamReadUInt8(streamId)
106 local fillLevel = streamReadFloat32(streamId)
107 self:setFillLevel(fillTypeIndex, fillLevel)
108 end
109end

readUpdateStream

Description
Read updates from network stream
Definition
readUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdnetwork stream identification
integertimestamp
tableconnectionconnection information
Code
133function HusbandryModuleBase:readUpdateStream(streamId, timestamp, connection)
134 local nbFillLevel = streamReadUInt8(streamId)
135
136 for i=1, nbFillLevel do
137 local fillTypeIndex = streamReadUInt8(streamId)
138 local fillLevel = streamReadFloat32(streamId)
139 self:setFillLevel(fillTypeIndex, fillLevel)
140 end
141end

registerModule

Description
Register a HUD extension for a specialization.
Definition
registerModule(string moduleName, table moduleType)
Arguments
stringmoduleNamemodule name
tablemoduleTypemodule class type table corresponding to the given module
Code
436function HusbandryModuleBase.registerModule(moduleName, moduleType)
437 registry[moduleName] = moduleType
438end

setCapacity

Description
Sets a capacity
Definition
setCapacity(float newCapacity)
Arguments
floatnewCapacity
Code
325function HusbandryModuleBase:setCapacity(newCapacity)
326 self.fillCapacity = newCapacity
327 self:onFillProgressChanged()
328end

setFillLevel

Description
Set fill level of storage
Definition
setFillLevel(float fillLevel, integer fillType)
Arguments
floatfillLevelnew fill level
integerfillTypefill type
Code
297function HusbandryModuleBase:setFillLevel(fillTypeIndex, fillLevel)
298 if self.fillLevels[fillTypeIndex] ~= fillLevel then
299 self.fillLevels[fillTypeIndex] = fillLevel
300
301 self:onFillProgressChanged()
302
303 if self.owner.isServer then
304 self.owner:raiseDirtyFlags(self.owner.husbandryDirtyFlag)
305 end
306 end
307end

setSingleAnimalUsagePerDay

Description
Definition
setSingleAnimalUsagePerDay()
Arguments

Warning: Undefined array key "className" in /usr/www/users/giantw/gdn.giants-software.com/documentation_scripting_fs19.php on line 189
Code
339function HusbandryModuleBase:setSingleAnimalUsagePerDay(usagePerDay)
340 self.singleAnimalUsagePerDay = usagePerDay
341end

writeStream

Description
Writes network stream
Definition
writeStream(integer streamId, table connection)
Arguments
integerstreamIdnetwork stream identification
tableconnectionconnection information
Code
115function HusbandryModuleBase:writeStream(streamId, connection)
116 local nbFillLevel = 0
117 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
118 nbFillLevel = nbFillLevel + 1
119 end
120
121 streamWriteUInt8(streamId, nbFillLevel)
122 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
123 streamWriteUInt8(streamId, fillTypeIndex)
124 streamWriteFloat32(streamId, fillLevel)
125 end
126end

writeUpdateStream

Description
Write updates from network stream
Definition
writeUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdnetwork stream identification
tableconnectionconnection information
integerdirtyMaskis used to check if we need to update
Code
148function HusbandryModuleBase:writeUpdateStream(streamId, connection, dirtyMask)
149 local nbFillLevel = 0
150 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
151 nbFillLevel = nbFillLevel + 1
152 end
153
154 streamWriteUInt8(streamId, nbFillLevel)
155 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
156 streamWriteUInt8(streamId, fillTypeIndex)
157 streamWriteFloat32(streamId, fillLevel)
158 end
159end