FillUnit
FillUnit
Description
Specialization for vehicles with any sort of capacity or tank. Manages filltypes, capacities, fillLevel changes
Functions
- actionEventConsoleFillUnitDec
- actionEventConsoleFillUnitInc
- actionEventConsoleFillUnitNext
- actionEventUnload
- addExactFillRootAimToUpdate
- addFillTypeSources
- addFillUnitFillLevel
- addFillUnitTrigger
- debugGetSupportedFillTypesPerFillUnit
- emptyAllFillUnits
- getAdditionalComponentMass
- getAlarmTriggerIsActive
- getAllowLoadTriggerActivation
- getCanBeTurnedOn
- getCapacityFromXml
- getDoConsumePtoPower
- getDrawFirstFillText
- getFillLevelInformation
- getFillTypeChangeThreshold
- getFillTypeNamesFromXML
- getFillUnitAllowsFillType
- getFillUnitAutoAimTargetNode
- getFillUnitByIndex
- getFillUnitCanBeFilled
- getFillUnitCapacity
- getFillUnitEmptyOnReset
- getFillUnitExactFillRootNode
- getFillUnitExists
- getFillUnitExtraDistanceFromNode
- getFillUnitFillLevel
- getFillUnitFillLevelPercentage
- getFillUnitFillType
- getFillUnitFirstSupportedFillType
- getFillUnitForcedMaterialFillType
- getFillUnitFreeCapacity
- getFillUnitFromNode
- getFillUnitHasMountedPalletsToUnload
- getFillUnitIndexFromNode
- getFillUnitLastValidFillType
- getFillUnitMountedPalletsToUnload
- getFillUnitRootNode
- getFillUnits
- getFillUnitSupportedFillTypes
- getFillUnitSupportedToolTypes
- getFillUnitSupportsFillType
- getFillUnitSupportsToolType
- getFillUnitSupportsToolTypeAndFillType
- getFillUnitUnloadingTasks
- getFillUnitUnloadPalletFilename
- getFirstValidFillUnitToFill
- getIsAttacherJointCompatible
- getIsFillAllowedFromFarm
- getIsFillUnitActive
- getIsFoldAllowed
- getIsLevelerPickupNodeActive
- getIsMovingToolActive
- getIsPowerTakeOffActive
- getIsReadyForAutomatedTrainTravel
- getSpecValueCapacity
- getSpecValueFillTypes
- getSpecValueStartFillUnitMassByMassData
- initSpecialization
- loadAlarmTrigger
- loadAttacherJointFromXML
- loadFillPlane
- loadFillTypeMaterials
- loadFillUnitFromXML
- loadFillUnitUnloadingFromXML
- loadLevelerNodeFromXML
- loadMeasurementNode
- loadMovingToolFromXML
- loadSpecValueCapacity
- loadSpecValueFillTypes
- loadSpecValueFillUnitMassData
- onDeactivate
- onDelete
- onDischargeTargetObjectChanged
- onDraw
- onLoad
- onPostLoad
- onPostUpdate
- onReadStream
- onReadUpdateStream
- onRegisterActionEvents
- onUpdateTick
- onWriteStream
- onWriteUpdateStream
- prerequisitesPresent
- registerEventListeners
- registerEvents
- registerFunctions
- registerOverwrittenFunctions
- registerUnitDisplaySchema
- removeFillUnitTrigger
- saveStatsToXMLFile
- saveToXMLFile
- setAlarmTriggerState
- setFillPlaneForcedFillType
- setFillSoundIsPlaying
- setFillUnitCapacity
- setFillUnitCapacityToDisplay
- setFillUnitFillLevelToDisplay
- setFillUnitFillType
- setFillUnitFillTypeToDisplay
- setFillUnitForcedMaterialFillType
- setFillUnitInTriggerRange
- setFillUnitIsFilling
- setFillUnitLastValidFillType
- showInfo
- unloadFillUnits
- updateAlarmTriggers
- updateFillTypeMaterials
- updateFillUnitAutoAimTarget
- updateFillUnitFillPlane
- updateFillUnitTriggers
- updateMeasurementNodes
- updateUnloadActionDisplay
actionEventConsoleFillUnitDec
Description
Definition
actionEventConsoleFillUnitDec()
Arguments
| any | self |
|---|---|
| any | actionName |
| any | inputValue |
| any | callbackState |
| any | isAnalog |
Code
function FillUnit.actionEventConsoleFillUnitDec( self , actionName, inputValue, callbackState, isAnalog)
if self:getIsSelected() then
local fillType = self:getFillUnitFillType( 1 )
self:addFillUnitFillLevel( self:getOwnerFarmId(), 1 , - 1000 , fillType, ToolType.UNDEFINED, nil )
end
end
actionEventConsoleFillUnitInc
Description
Definition
actionEventConsoleFillUnitInc()
Arguments
| any | self |
|---|---|
| any | actionName |
| any | inputValue |
| any | callbackState |
| any | isAnalog |
Code
function FillUnit.actionEventConsoleFillUnitInc( self , actionName, inputValue, callbackState, isAnalog)
if self:getIsSelected() then
local fillType = self:getFillUnitFillType( 1 )
if fillType = = FillType.UNKNOWN then
local fillUnit = self:getFillUnitByIndex( 1 )
fillType = next(fillUnit.supportedFillTypes)
end
self:addFillUnitFillLevel( self:getOwnerFarmId(), 1 , 1000 , fillType, ToolType.UNDEFINED, nil )
end
end
actionEventConsoleFillUnitNext
Description
Definition
actionEventConsoleFillUnitNext()
Arguments
| any | self |
|---|---|
| any | actionName |
| any | inputValue |
| any | callbackState |
| any | isAnalog |
Code
function FillUnit.actionEventConsoleFillUnitNext( self , actionName, inputValue, callbackState, isAnalog)
if self:getIsSelected() then
local fillType = self:getFillUnitFillType( 1 )
local fillUnit = self:getFillUnitByIndex( 1 )
local found = false
local nextFillType = nil
for supportedFillType,_ in pairs(fillUnit.supportedFillTypes) do
if not found then
if supportedFillType = = fillType then
found = true
end
else
nextFillType = supportedFillType
break
end
end
if nextFillType = = nil then
nextFillType = next(fillUnit.supportedFillTypes)
end
self:addFillUnitFillLevel( self:getOwnerFarmId(), 1 , - math.huge, fillType, ToolType.UNDEFINED, nil )
self:addFillUnitFillLevel( self:getOwnerFarmId(), 1 , 100 , nextFillType, ToolType.UNDEFINED, nil )
end
end
actionEventUnload
Description
Definition
actionEventUnload()
Arguments
| any | self |
|---|---|
| any | actionName |
| any | inputValue |
| any | callbackState |
| any | isAnalog |
Code
function FillUnit.actionEventUnload( self , actionName, inputValue, callbackState, isAnalog)
self:unloadFillUnits()
end
addExactFillRootAimToUpdate
Description
Definition
addExactFillRootAimToUpdate()
Arguments
| any | vehicle |
|---|---|
| any | func |
Code
function FillUnit:addExactFillRootAimToUpdate(vehicle, func)
local spec = self.spec_fillUnit
spec.exactFillRootNodeAimToUpdate[vehicle] = func
end
addFillTypeSources
Description
Definition
addFillTypeSources()
Arguments
| any | sources |
|---|---|
| any | currentVehicle |
| any | excludeVehicle |
| any | fillTypes |
Code
function FillUnit.addFillTypeSources(sources, currentVehicle, excludeVehicle, fillTypes)
if currentVehicle ~ = excludeVehicle then
local curVehicle = currentVehicle.spec_fillUnit
if curVehicle ~ = nil then
for fillUnitIndex2, fillUnit2 in pairs(curVehicle.fillUnits) do
for _,fillType in pairs(fillTypes) do
if fillUnit2.supportedFillTypes[fillType] then
if sources[fillType] = = nil then
sources[fillType] = { }
end
table.insert(sources[fillType], { vehicle = currentVehicle, fillUnitIndex = fillUnitIndex2 } )
end
end
end
end
end
if currentVehicle.getAttachedImplements ~ = nil then
local attachedImplements = currentVehicle:getAttachedImplements()
for _,implement in pairs(attachedImplements) do
if implement.object ~ = nil then
FillUnit.addFillTypeSources(sources, implement.object, excludeVehicle, fillTypes)
end
end
end
end
addFillUnitFillLevel
Description
Definition
addFillUnitFillLevel()
Arguments
| any | farmId |
|---|---|
| any | fillUnitIndex |
| any | fillLevelDelta |
| any | fillTypeIndex |
| any | toolType |
| any | fillPositionData |
Code
function FillUnit:addFillUnitFillLevel(farmId, fillUnitIndex, fillLevelDelta, fillTypeIndex, toolType, fillPositionData)
local spec = self.spec_fillUnit
spec.isInfoDirty = true
-- Check for permission.Do allow vehicles with farmId 0(all-access vehicles).
-- Only check for access if value is being removed
if fillLevelDelta < 0 and not g_currentMission.accessHandler:canFarmAccess(farmId, self , true ) and not g_guidedTourManager:getIsTourRunning() then
return 0
end
-- If this fillunit belongs to a mounted object(pallet), check that the controller of the object
-- is allowed to empty the fill unit.
if self.getDynamicMountObject ~ = nil then
local mounter = self:getDynamicMountObject()
if mounter ~ = nil then
-- if the active farm of the mounter has NO access to farmId fill unit:disallow
if not g_currentMission.accessHandler:canFarmAccess(mounter:getActiveFarm(), self , true ) then
return 0
end
end
end
local fillUnit = spec.fillUnits[fillUnitIndex]
if fillUnit ~ = nil then
if fillLevelDelta > 0 then
if not fillUnit.ignoreFillLimit then
if g_currentMission.missionInfo.trailerFillLimit and self:getMaxComponentMassReached() then
return 0
end
end
end
if not self:getFillUnitSupportsToolTypeAndFillType(fillUnitIndex, toolType, fillTypeIndex) then
return 0
end
-- apply limit only on server side, client will receive the correct data
if self.isServer then
if fillLevelDelta > 0 then
if not fillUnit.ignoreFillLimit then
if g_currentMission.missionInfo.trailerFillLimit then
local maxMassToApply = self:getAvailableComponentMass()
local fillTypeDesc = g_fillTypeManager:getFillTypeByIndex(fillTypeIndex)
if fillTypeDesc ~ = nil and fillTypeDesc.massPerLiter ~ = 0 then
fillLevelDelta = math.min(fillLevelDelta, maxMassToApply / fillTypeDesc.massPerLiter)
end
end
end
end
end
local oldFillLevel = fillUnit.fillLevel
local capacity = fillUnit.capacity
if capacity = = 0 then
capacity = math.huge
end
local fillTypeChanged = false
if fillUnit.fillType = = fillTypeIndex then
fillUnit.fillLevel = math.max( 0 , math.min(capacity, oldFillLevel + fillLevelDelta))
else
if fillLevelDelta > 0 then
local allowFillType = self:getFillUnitAllowsFillType(fillUnitIndex, fillTypeIndex)
if allowFillType then
local oldFillTypeIndex = fillUnit.fillType
if oldFillLevel > 0 then
local oldRemoveOnEmpty = spec.removeVehicleIfEmpty
spec.removeVehicleIfEmpty = false -- do not remove vehicle if we directly fill it again
self:addFillUnitFillLevel(farmId, fillUnitIndex, - math.huge, fillUnit.fillType, toolType, fillPositionData)
spec.removeVehicleIfEmpty = oldRemoveOnEmpty
end
oldFillLevel = 0
fillUnit.fillLevel = math.max( 0 , math.min(capacity, fillLevelDelta))
fillUnit.fillType = fillTypeIndex
fillTypeChanged = true
self.rootVehicle:raiseStateChange(VehicleStateChange.FILLTYPE_CHANGE)
SpecializationUtil.raiseEvent( self , "onChangedFillType" , fillUnitIndex, fillTypeIndex, oldFillTypeIndex)
else
return 0
end
end
end
-- reset fill level if below threshold due to float 32 inaccuracy
if fillUnit.fillLevel < 0.00001 then
fillUnit.fillLevel = 0
end
if fillUnit.fillLevel > 0 then
fillUnit.lastValidFillType = fillUnit.fillType
else
SpecializationUtil.raiseEvent( self , "onChangedFillType" , fillUnitIndex, FillType.UNKNOWN, fillUnit.fillType)
fillUnit.fillType = FillType.UNKNOWN
if not fillUnit.fillTypeToDisplayIsPersistent then
fillUnit.fillTypeToDisplay = FillType.UNKNOWN
end
if not fillUnit.fillLevelToDisplayIsPersistent then
fillUnit.fillLevelToDisplay = nil
end
end
local appliedDelta = fillUnit.fillLevel - oldFillLevel
if self.isServer then
-- prepare for network
if fillUnit.synchronizeFillLevel then
local hasChanged = false
if fillUnit.fillLevel ~ = fillUnit.fillLevelSent then
local maxValue = 2 ^ fillUnit.synchronizationNumBits - 1
local levelPerBit = fillUnit.capacity / maxValue
local changedLevel = math.abs(fillUnit.fillLevel - fillUnit.fillLevelSent)
if changedLevel > levelPerBit then
fillUnit.fillLevelSent = fillUnit.fillLevel
hasChanged = true
end
end
if fillUnit.fillType ~ = fillUnit.fillTypeSent then
fillUnit.fillTypeSent = fillUnit.fillType
hasChanged = true
end
if fillUnit.lastValidFillType ~ = fillUnit.lastValidFillTypeSent then
fillUnit.lastValidFillTypeSent = fillUnit.lastValidFillType
hasChanged = true
end
if hasChanged then
self:raiseDirtyFlags(spec.dirtyFlag)
end
end
end
if fillUnit.updateMass then
self:setMassDirty()
end
self:updateFillUnitAutoAimTarget(fillUnit)
if self.isClient then
self:updateAlarmTriggers(fillUnit.alarmTriggers)
self:updateFillUnitFillPlane(fillUnit)
self:updateMeasurementNodes(fillUnit, 0 , true )
if fillTypeChanged then
self:updateFillTypeMaterials(fillUnit.fillTypeMaterials, fillUnit.fillType)
end
end
SpecializationUtil.raiseEvent( self , "onFillUnitFillLevelChanged" , fillUnitIndex, fillLevelDelta, fillTypeIndex, toolType, fillPositionData, appliedDelta)
if self.isServer then
if spec.removeVehicleIfEmpty and fillUnit.fillLevel < = spec.removeVehicleThreshold and fillLevelDelta ~ = 0 then
if spec.removeVehicleDelay = = 0 then
self:delete()
if spec.removeVehicleReward > 0 then
g_currentMission:addMoney(spec.removeVehicleReward, self:getOwnerFarmId(), MoneyType.SOLD_PRODUCTS, true , true )
end
else
Timer.createOneshot(spec.removeVehicleDelay, function ()
if not self.isDeleted then
self:delete()
end
if spec.removeVehicleReward > 0 then
g_currentMission:addMoney(spec.removeVehicleReward, self:getOwnerFarmId(), MoneyType.SOLD_PRODUCTS, true , true )
end
end )
end
end
end
if appliedDelta > 0 then
-- display default effects
if #spec.fillEffects > 0 then
g_effectManager:setEffectTypeInfo(spec.fillEffects, fillUnit.fillType)
g_effectManager:startEffects(spec.fillEffects)
spec.activeFillEffects[spec.fillEffects] = 500
end
-- display fill unit effects
if #fillUnit.fillEffects > 0 then
g_effectManager:setEffectTypeInfo(fillUnit.fillEffects, fillUnit.fillType)
g_effectManager:startEffects(fillUnit.fillEffects)
spec.activeFillEffects[fillUnit.fillEffects] = 500
end
-- start default animation nodes
if #spec.animationNodes > 0 then
g_animationManager:startAnimations(spec.animationNodes)
spec.activeFillAnimations[spec.animationNodes] = 500
end
-- start fill unit animation nodes
if #fillUnit.animationNodes > 0 then
g_animationManager:startAnimations(fillUnit.animationNodes)
spec.activeFillAnimations[fillUnit.animationNodes] = 500
end
if fillUnit.fillAnimation ~ = nil then
if fillUnit.fillAnimationLoadTime ~ = nil then
local animTime = self:getAnimationTime(fillUnit.fillAnimation)
local direction = math.sign(fillUnit.fillAnimationLoadTime - animTime)
if direction ~ = 0 then
self:playAnimation(fillUnit.fillAnimation, direction, animTime)
self:setAnimationStopTime(fillUnit.fillAnimation, fillUnit.fillAnimationLoadTime)
end
end
end
end
if appliedDelta ~ = 0 then
for _, fillLevelAnimation in ipairs(fillUnit.fillLevelAnimations) do
if fillUnit.fillLevel > 0 or fillLevelAnimation.resetOnEmpty then
local currentTime = self:getAnimationTime(fillLevelAnimation.name)
local targetTime = fillUnit.fillLevel / fillUnit.capacity
if fillLevelAnimation.useMaxStateIfEmpty and fillUnit.fillLevel = = 0 then
targetTime = 1
end
if not fillLevelAnimation.updateWhileFilled and fillLevelDelta > 0 then
targetTime = 1
end
self:setAnimationStopTime(fillLevelAnimation.name, targetTime)
local speedScale = math.sign(targetTime - currentTime)
self:playAnimation(fillLevelAnimation.name, speedScale, currentTime, true )
end
end
if fillUnit.hasDashboards and self.updateDashboardValueType ~ = nil then
self:updateDashboardValueType( "fillUnit.fillLevel" )
self:updateDashboardValueType( "fillUnit.fillLevelPct" )
self:updateDashboardValueType( "fillUnit.fillLevelWarning" )
end
FillUnit.updateUnloadActionDisplay( self )
end
if fillUnit.fillLevel < 0.0001 then
if fillUnit.fillAnimation ~ = nil then
if fillUnit.fillAnimationEmptyTime ~ = nil then
local animTime = self:getAnimationTime(fillUnit.fillAnimation)
local direction = math.sign(fillUnit.fillAnimationEmptyTime - animTime)
self:playAnimation(fillUnit.fillAnimation, direction, animTime)
self:setAnimationStopTime(fillUnit.fillAnimation, fillUnit.fillAnimationEmptyTime)
end
end
end
if self.isServer then
if not spec.allowFoldingWhileFilled and spec.resetFoldingWhileFilled then
if fillUnit.fillLevel > (fillUnit.allowFoldingThreshold or spec.allowFoldingThreshold) and(fillUnit.allowFoldingFillType = = nil or fillUnit.allowFoldingFillType = = fillUnit.fillType) then
if self:getIsUnfolded() then
self:setFoldState( - self.spec_foldable.turnOnFoldDirection, false )
end
end
end
end
return appliedDelta
end
return 0
end
addFillUnitTrigger
Description
Adds fill trigger
Definition
addFillUnitTrigger(table trigger, integer fillTypeIndex, )
Arguments
| table | trigger | trigger |
|---|---|---|
| integer | fillTypeIndex | fillTypeIndex |
| any | fillUnitIndex |
Code
function FillUnit:addFillUnitTrigger(trigger, fillTypeIndex, fillUnitIndex)
local spec = self.spec_fillUnit
if #spec.fillTrigger.triggers = = 0 then
g_currentMission.activatableObjectsSystem:addActivatable(spec.fillTrigger.activatable)
spec.fillTrigger.activatable:setFillType(fillTypeIndex)
-- automatic filling for mobile version
if self.isServer and Platform.gameplay.automaticFilling then
self:setFillUnitIsFilling( true )
end
end
table.addElement(spec.fillTrigger.triggers, trigger)
SpecializationUtil.raiseEvent( self , "onAddedFillUnitTrigger" , fillTypeIndex, fillUnitIndex, #spec.fillTrigger.triggers)
self:updateFillUnitTriggers()
end
debugGetSupportedFillTypesPerFillUnit
Description
Returns table with key=fillUnitIndex and value=array of fillTypeIds
Definition
debugGetSupportedFillTypesPerFillUnit()
Code
function FillUnit:debugGetSupportedFillTypesPerFillUnit()
local fillUnitToFillTypes = { }
for _, fillUnit in ipairs( self:getFillUnits()) do
fillUnitToFillTypes[fillUnit.fillUnitIndex] = fillUnit.supportedFillTypes
end
return fillUnitToFillTypes
end
emptyAllFillUnits
Description
Definition
emptyAllFillUnits()
Arguments
| any | ignoreDeleteOnEmptyFlag |
|---|
Code
function FillUnit:emptyAllFillUnits(ignoreDeleteOnEmptyFlag)
local spec = self.spec_fillUnit
local oldRemoveOnEmpty = spec.removeVehicleIfEmpty
if ignoreDeleteOnEmptyFlag then
spec.removeVehicleIfEmpty = false
end
for k, _ in ipairs( self:getFillUnits()) do
local fillTypeIndex = self:getFillUnitFillType(k)
self:addFillUnitFillLevel( self:getOwnerFarmId(), k, - math.huge, fillTypeIndex, ToolType.UNDEFINED, nil )
end
spec.removeVehicleIfEmpty = oldRemoveOnEmpty
end
getAdditionalComponentMass
Description
Definition
getAdditionalComponentMass()
Arguments
| any | superFunc |
|---|---|
| any | component |
Code
function FillUnit:getAdditionalComponentMass(superFunc, component)
local additionalMass = superFunc( self , component)
local spec = self.spec_fillUnit
for _, fillUnit in ipairs(spec.fillUnits) do
if fillUnit.updateMass and fillUnit.fillMassNode = = component.node and fillUnit.fillType ~ = nil and fillUnit.fillType ~ = FillType.UNKNOWN then
local desc = g_fillTypeManager:getFillTypeByIndex(fillUnit.fillType)
local mass = fillUnit.fillLevel * desc.massPerLiter
additionalMass = additionalMass + mass
end
end
return additionalMass
end
getAlarmTriggerIsActive
Description
Definition
getAlarmTriggerIsActive()
Arguments
| any | alarmTrigger |
|---|
Code
function FillUnit:getAlarmTriggerIsActive(alarmTrigger)
local ret = false
local fillLevelPct = alarmTrigger.fillUnit.fillLevel / alarmTrigger.fillUnit.capacity
if fillLevelPct > = alarmTrigger.minFillLevel and fillLevelPct < = alarmTrigger.maxFillLevel then
ret = true
end
return ret
end
getAllowLoadTriggerActivation
Description
Definition
getAllowLoadTriggerActivation()
Arguments
| any | rootVehicle |
|---|
Code
function FillUnit:getAllowLoadTriggerActivation(rootVehicle)
-- if not g_currentMission.guidedTour:getCanBeFilledByTrigger(self) then
-- return false
-- end
if self.rootVehicle = = g_localPlayer:getCurrentVehicle() then
return true
end
return false
end
getCanBeTurnedOn
Description
Definition
getCanBeTurnedOn()
Arguments
| any | superFunc |
|---|
Code
function FillUnit:getCanBeTurnedOn(superFunc)
local spec = self.spec_fillUnit
for _, alarmTrigger in pairs(spec.activeAlarmTriggers) do
if alarmTrigger.turnOffInTrigger then
return false
end
end
return superFunc( self )
end
getCapacityFromXml
Description
Definition
getCapacityFromXml()
Arguments
| any | xmlFile |
|---|
Code
function FillUnit.getCapacityFromXml(xmlFile)
local rootName = xmlFile:getRootName()
local maxCapacity = 0
xmlFile:iterate(rootName .. ".fillUnit.fillUnitConfigurations.fillUnitConfiguration" , function (_, key)
xmlFile:iterate(key .. ".fillUnits.fillUnit" , function (_, fillUnitKey)
maxCapacity = math.max(maxCapacity, xmlFile:getValue(fillUnitKey .. "#capacity" ) or 0 )
end )
end )
return maxCapacity
end
getDoConsumePtoPower
Description
Definition
getDoConsumePtoPower()
Arguments
| any | superFunc |
|---|
Code
function FillUnit:getDoConsumePtoPower(superFunc)
local fillTrigger = self.spec_fillUnit.fillTrigger
return superFunc( self ) or(fillTrigger.isFilling and fillTrigger.consumePtoPower)
end
getDrawFirstFillText
Description
Definition
getDrawFirstFillText()
Code
function FillUnit:getDrawFirstFillText()
return false
end
getFillLevelInformation
Description
Get fill level information
Definition
getFillLevelInformation(function superFunc, table display)
Arguments
| function | superFunc | |
|---|---|---|
| table | display | fill level information |
Code
function FillUnit:getFillLevelInformation(superFunc, display)
superFunc( self , display)
local spec = self.spec_fillUnit
for i = 1 , #spec.fillUnits do
local fillUnit = spec.fillUnits[i]
if fillUnit.capacity > 0 and fillUnit.showOnHud then
local fillType = fillUnit.fillType
-- if we only support one fill type and are empty we show the fill type
if fillType = = FillType.UNKNOWN then
if table.size(fillUnit.supportedFillTypes) = = 1 then
fillType = next(fillUnit.supportedFillTypes)
end
end
if fillUnit.fillTypeToDisplay ~ = FillType.UNKNOWN then
fillType = fillUnit.fillTypeToDisplay
end
local fillLevel = fillUnit.fillLevel
if fillUnit.fillLevelToDisplay ~ = nil then
fillLevel = fillUnit.fillLevelToDisplay
end
local capacity = fillUnit.capacity
if fillUnit.capacityToDisplay ~ = nil then
capacity = fillUnit.capacityToDisplay
end
-- child and parent units will be merged together as display if one of them has a valid fill type and another an unknown fill type
-- capacity is used from the parent one
if fillUnit.parentUnitOnHud ~ = nil then
if fillType = = FillType.UNKNOWN then
fillType = spec.fillUnits[fillUnit.parentUnitOnHud].fillType
end
capacity = 0
elseif fillUnit.childUnitOnHud ~ = nil then
if fillType = = FillType.UNKNOWN then
fillType = spec.fillUnits[fillUnit.childUnitOnHud].fillType
end
end
local maxReached = not fillUnit.ignoreFillLimit and g_currentMission.missionInfo.trailerFillLimit and self:getMaxComponentMassReached()
display:addFillLevel(fillType, fillLevel, capacity, fillLevel > 0 and fillUnit.uiPrecision or 0 , maxReached, fillUnit.uiDisplayTypeId, fillUnit.uiCustomFillTypeName, fillUnit.uiExtraInfoText)
end
end
end
getFillTypeChangeThreshold
Description
Definition
getFillTypeChangeThreshold()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillTypeChangeThreshold(fillUnitIndex)
if fillUnitIndex = = nil then
return self.spec_fillUnit.fillTypeChangeThreshold
else
local capacity = self:getFillUnitCapacity(fillUnitIndex) or 1
return capacity * self.spec_fillUnit.fillTypeChangeThreshold
end
end
getFillTypeNamesFromXML
Description
Definition
getFillTypeNamesFromXML()
Arguments
| any | xmlFile |
|---|
Code
function FillUnit.getFillTypeNamesFromXML(xmlFile)
local fillTypeNames = nil
local fillTypeCategoryNames = nil
local rootName = xmlFile:getRootName()
xmlFile:iterate(rootName .. ".fillUnit.fillUnitConfigurations.fillUnitConfiguration" , function (_, key)
xmlFile:iterate(key .. ".fillUnits.fillUnit" , function (_, fillUnitKey)
local capacity = xmlFile:getValue(fillUnitKey .. "#capacity" )
if capacity = = nil or capacity > 0 then
local currentFillTypes = xmlFile:getValue(fillUnitKey .. "#fillTypes" )
if currentFillTypes ~ = nil then
if fillTypeNames = = nil then
fillTypeNames = currentFillTypes
else
fillTypeNames = fillTypeNames .. " " .. currentFillTypes
end
end
local currentFillTypeCategories = xmlFile:getValue(fillUnitKey .. "#fillTypeCategories" )
if currentFillTypeCategories ~ = nil then
if fillTypeCategoryNames = = nil then
fillTypeCategoryNames = currentFillTypeCategories
else
fillTypeCategoryNames = fillTypeCategoryNames .. " " .. currentFillTypeCategories
end
end
end
end )
end )
return { fillTypeNames = fillTypeNames, fillTypeCategoryNames = fillTypeCategoryNames }
end
getFillUnitAllowsFillType
Description
Definition
getFillUnitAllowsFillType()
Arguments
| any | fillUnitIndex |
|---|---|
| any | fillType |
Code
function FillUnit:getFillUnitAllowsFillType(fillUnitIndex, fillType)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
if self:getFillUnitSupportsFillType(fillUnitIndex, fillType) then
if fillType = = spec.fillUnits[fillUnitIndex].fillType then
return true
else
return(spec.fillUnits[fillUnitIndex].fillLevel / math.max(spec.fillUnits[fillUnitIndex].capacity, 0.0001 )) < = self:getFillTypeChangeThreshold()
end
end
end
return false
end
getFillUnitAutoAimTargetNode
Description
Definition
getFillUnitAutoAimTargetNode()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitAutoAimTargetNode(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].autoAimTarget.node
end
return nil
end
getFillUnitByIndex
Description
Definition
getFillUnitByIndex()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitByIndex(fillUnitIndex)
local spec = self.spec_fillUnit
if self:getFillUnitExists(fillUnitIndex) then
return spec.fillUnits[fillUnitIndex]
end
return nil
end
getFillUnitCanBeFilled
Description
Definition
getFillUnitCanBeFilled()
Arguments
| any | fillUnitIndex |
|---|---|
| any | fillType |
| any | ignoreCapacity |
Code
function FillUnit:getFillUnitCanBeFilled(fillUnitIndex, fillType, ignoreCapacity)
if self:getFillUnitAllowsFillType(fillUnitIndex, fillType) then
if self:getFillUnitFreeCapacity(fillUnitIndex) > 0 or(ignoreCapacity ~ = nil and ignoreCapacity) then
return true
end
end
return false
end
getFillUnitCapacity
Description
Definition
getFillUnitCapacity()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitCapacity(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].capacity
end
return nil
end
getFillUnitEmptyOnReset
Description
Definition
getFillUnitEmptyOnReset()
Code
function FillUnit:getFillUnitEmptyOnReset()
return true
end
getFillUnitExactFillRootNode
Description
Definition
getFillUnitExactFillRootNode()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitExactFillRootNode(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].exactFillRootNode
end
return nil
end
getFillUnitExists
Description
Definition
getFillUnitExists()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitExists(fillUnitIndex)
local spec = self.spec_fillUnit
return fillUnitIndex ~ = nil and spec.fillUnits[fillUnitIndex] ~ = nil
end
getFillUnitExtraDistanceFromNode
Description
Definition
getFillUnitExtraDistanceFromNode()
Arguments
| any | node |
|---|
Code
function FillUnit:getFillUnitExtraDistanceFromNode(node)
local spec = self.spec_fillUnit
return spec.exactFillRootNodeToExtraDistance[node] or 0
end
getFillUnitFillLevel
Description
Definition
getFillUnitFillLevel()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitFillLevel(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].fillLevel
end
return nil
end
getFillUnitFillLevelPercentage
Description
Definition
getFillUnitFillLevelPercentage()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitFillLevelPercentage(fillUnitIndex)
local spec = self.spec_fillUnit
local fillUnit = spec.fillUnits[fillUnitIndex]
if fillUnit ~ = nil then
if fillUnit.capacity > 0 then
return fillUnit.fillLevel / fillUnit.capacity
end
return 0
end
return nil
end
getFillUnitFillType
Description
Definition
getFillUnitFillType()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitFillType(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].fillType
end
return nil
end
getFillUnitFirstSupportedFillType
Description
Definition
getFillUnitFirstSupportedFillType()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitFirstSupportedFillType(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return next(spec.fillUnits[fillUnitIndex].supportedFillTypes)
end
return nil
end
getFillUnitForcedMaterialFillType
Description
Definition
getFillUnitForcedMaterialFillType()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitForcedMaterialFillType(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].forcedMaterialFillType
end
return FillType.UNKNOWN
end
getFillUnitFreeCapacity
Description
getFillUnitFreeCapacity
Definition
getFillUnitFreeCapacity(integer fillUnitIndex, integer fillTypeIndex, integer farmId)
Arguments
| integer | fillUnitIndex | |
|---|---|---|
| integer | fillTypeIndex | currently ignored/unused |
| integer | farmId | currently ignored/unused |
Code
function FillUnit:getFillUnitFreeCapacity(fillUnitIndex, fillTypeIndex, farmId)
local spec = self.spec_fillUnit
local fillUnit = spec.fillUnits[fillUnitIndex]
if fillUnit ~ = nil then
local freeCapacity = fillUnit.capacity - fillUnit.fillLevel
if not fillUnit.ignoreFillLimit then
if g_currentMission.missionInfo.trailerFillLimit and self:getMaxComponentMassReached() then
return 0
end
end
return freeCapacity
end
return nil
end
getFillUnitFromNode
Description
Definition
getFillUnitFromNode()
Arguments
| any | node |
|---|
Code
function FillUnit:getFillUnitFromNode(node)
local spec = self.spec_fillUnit
return spec.exactFillRootNodeToFillUnit[node]
end
getFillUnitHasMountedPalletsToUnload
Description
Definition
getFillUnitHasMountedPalletsToUnload()
Code
function FillUnit:getFillUnitHasMountedPalletsToUnload()
return false
end
getFillUnitIndexFromNode
Description
Definition
getFillUnitIndexFromNode()
Arguments
| any | node |
|---|
Code
function FillUnit:getFillUnitIndexFromNode(node)
local spec = self.spec_fillUnit
local fillUnit = spec.exactFillRootNodeToFillUnit[node]
if fillUnit ~ = nil then
return fillUnit.fillUnitIndex
end
return nil
end
getFillUnitLastValidFillType
Description
Definition
getFillUnitLastValidFillType()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitLastValidFillType(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].lastValidFillType
end
return nil
end
getFillUnitMountedPalletsToUnload
Description
Definition
getFillUnitMountedPalletsToUnload()
Code
function FillUnit:getFillUnitMountedPalletsToUnload()
return nil
end
getFillUnitRootNode
Description
Definition
getFillUnitRootNode()
Arguments
| any | fillUnitIndex |
|---|
Code
function FillUnit:getFillUnitRootNode(fillUnitIndex)
local spec = self.spec_fillUnit
if spec.fillUnits[fillUnitIndex] ~ = nil then
return spec.fillUnits[fillUnitIndex].fillRootNode
end
return nil
end