loadControllerExternal
Definition
-- @/lua/vehicle/controller.lua:289
local function loadControllerExternal(fileName, controllerName, controllerData)
local directory = "controller/"
local filePath = directory .. fileName
--adjust for relocated controllers by using the new path if one exists
if relocatedControllers[filePath] then
log("D", "controller.loadControllerExternal", string.format("Using relocated controller controller '%s' at '/%s.lua', original file path: '/%s.lua'", fileName, relocatedControllers[filePath], filePath))
filePath = relocatedControllers[filePath]
end
controllerName = controllerName or fileName
local c
local loadFunc = function()
if loadedControllers[controllerName] then
error(string.format("Controller with same name is already existing, can't load duplicate controller. Name: %q", controllerName))
end
c = rerequire(filePath)
if c then
local data = controllerData or {}
controllerJbeamData[controllerName] = data
c.name = controllerName
c.typeName = fileName
c.init(data)
c.manualOrder = data.manualOrder
loadedControllers[controllerName] = c
if c.type == "main" then
error(string.format("Can't load mainController at runtime! FileName: %q, ControllerName: %q", fileName, c.name))
return nil
end
end
end
local result, errorStr = pcall(loadFunc)
if not result then
log("E", "controller.loadControllerExternal", string.format("Can't load controller '%s' at '/%s.lua', further info below:", fileName, filePath))
log("E", "controller.loadControllerExternal", errorStr)
log("E", "controller.loadControllerExternal", debug.traceback())
end
if c.initSecondStage then
c.initSecondStage(controllerJbeamData[controller.name])
end
if c.initSounds then
c.initSounds(controllerJbeamData[controller.name])
end
if c.initLastStage then
c.initLastStage(controllerJbeamData[controller.name])
end
table.clear(sortedControllers)
for _, v in pairs(loadedControllers) do
table.insert(sortedControllers, v)
end
local ranks = {}
for k, v in ipairs(powertrain.getOrderedDevices()) do
ranks[v.name] = k * 100
end
table.sort(
sortedControllers,
function(a, b)
local ra, rb = ranks[a.relevantDevice or ""] or a.manualOrder or a.defaultOrder or 100000, ranks[b.relevantDevice or ""] or b.manualOrder or b.defaultOrder or 100000
a.order = ra
b.order = rb
if ra == rb then
return a.name < b.name
else
return ra < rb
end
end
)
M.cacheAllControllerFunctions()
return c
end
Callers
@/lua/vehicle/extensions/tech/powertrainSensor.lua
data = controllerData,
controller = controller.loadControllerExternal('tech/powertrainSensor', 'powertrainSensor' .. decodedData.sensorId, controllerData) }
end
@/lua/vehicle/extensions/tech/advancedIMU.lua
data = controllerData,
controller = controller.loadControllerExternal('tech/advancedIMU', 'advancedIMU' .. decodedData.sensorId, controllerData) }
end
@/lua/ge/extensions/editor/cosimulationSignalEditor.lua
}
be:queueObjectLua(vid, string.format("controller.loadControllerExternal('tech/cosimulationCoupling', 'cosimulationCoupling', %s)", serialize(lpack.encode({cData}))))
@/lua/vehicle/extensions/tech/tyreBarrier.lua
-- Instantiate the tyreBarrier controller.
tyreBarrierController = controller.loadControllerExternal(
'tech/tyreBarrier',
isSendImmediately = decodedData.isSendImmediately }
IMUcontroller = controller.loadControllerExternal('tech/advancedIMU', 'advancedIMU' .. decodedData.sensorId, controllerData)
advancedIMU = { data = controllerData, controller = IMUcontroller }
@/lua/vehicle/extensions/tech/roadsSensor.lua
data = controllerData,
controller = controller.loadControllerExternal('tech/roadsSensor', 'roadsSensor' .. decodedData.sensorId, controllerData) }
end
@/lua/vehicle/controller/tech/MQTToutput.lua
1. Spawn a car you want to send the data for, open the BeamNG console (by pressing `` ` ``) and switch to `BeamNG - Current Vehicle` in the bottom-left combobox.
2. Write: `controller.loadControllerExternal('tech/MQTToutput', 'MQTToutput', {uri = '127.0.0.1', topic='car_data'})`
into the console to start exporting data. If you are using the example broker, you should see that data are being sent.
@/lua/vehicle/extensions/tech/vehicleSystemsCoupling.lua
if controller.getController('vehicleSystemsCoupling') == nil then
controller.loadControllerExternal('tech/vehicleSystemsCoupling', 'vehicleSystemsCoupling', {loadedByExtension = true})
end
@/lua/vehicle/extensions/tech/GPS.lua
data = controllerData,
controller = controller.loadControllerExternal('tech/GPS', 'GPS' .. decodedData.sensorId, controllerData) }
end
@/lua/vehicle/extensions/tech/techCore.lua
}}
controller.loadControllerExternal('tech/cosimulationCoupling', 'cosimulationCoupling', lpack.encode(cData))
local initData = nil
recorders = controller.loadControllerExternal('tech/recorders', 'recorders', initData)
end
@/lua/vehicle/extensions/tech/idealRADARSensor.lua
data = controllerData,
controller = controller.loadControllerExternal('tech/idealRADARSensor', 'idealRADARSensor' .. decodedData.sensorId, controllerData) }
end