From 65594053448825797c6916d147afee1b1fb3c245 Mon Sep 17 00:00:00 2001 From: Peter Vaiko Date: Fri, 27 Dec 2024 14:27:05 -0500 Subject: [PATCH] fix: pickups Dirty hack to get rid of the error: Cutter.lua:1494: invalid argument #1 to 'ipairs' (table expected, got nil) Seems like pickups aren't properly implemented for AI work. Also included a DevHelper improvement. #60 --- scripts/ai/controllers/CutterController.lua | 3 ++ scripts/dev/DevHelper.lua | 31 +++++++++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/scripts/ai/controllers/CutterController.lua b/scripts/ai/controllers/CutterController.lua index 373af81ed..52735ddc7 100644 --- a/scripts/ai/controllers/CutterController.lua +++ b/scripts/ai/controllers/CutterController.lua @@ -6,6 +6,9 @@ CutterController = CpObject(ImplementController) function CutterController:init(vehicle, implement) ImplementController.init(self, vehicle, implement) self.cutterSpec = self.implement.spec_cutter + -- To avoid the error thrown for pickups: + -- Cutter.lua:1494: invalid argument #1 to 'ipairs' (table expected, got nil) + self.cutterSpec.fruitTypeIndices = {} end function CutterController:getDriveData() diff --git a/scripts/dev/DevHelper.lua b/scripts/dev/DevHelper.lua index 796d9651e..24ff61d00 100644 --- a/scripts/dev/DevHelper.lua +++ b/scripts/dev/DevHelper.lua @@ -95,12 +95,18 @@ function DevHelper:update() end -function DevHelper:overlapBoxCallback(transformId) +function DevHelper:overlapBoxCallback(transformId, subShapeIndex) local collidingObject = g_currentMission.nodeToObject[transformId] - local text = '' - for i = 0, getNumOfUserAttributes(transformId) - 1 do - local type, name, x = getUserAttributeByIndex(transformId, i) - text = tostring(i) .. ':' .. (type or '?') .. '/' .. (name or '?') .. '/' .. (x or '?') + local text = tostring(subShapeIndex) + for key, classId in pairs(ClassIds) do + if getHasClassId(transformId, classId) then + text = text .. ' ' .. key + end + end + for key, rigidBodyType in pairs(RigidBodyType) do + if getRigidBodyType(transformId) == rigidBodyType then + text = text .. ' ' .. key + end end if collidingObject then if collidingObject.getRootVehicle then @@ -112,14 +118,12 @@ function DevHelper:overlapBoxCallback(transformId) text = text .. ' ' .. collidingObject.getName and collidingObject:getName() or 'N/A' end end - else - for key, classId in pairs(ClassIds) do - if getHasClassId(transformId, classId) then - text = text .. ' ' .. key - end - end end - table.insert(self.data.collidingShapes, text .. ' ' .. getRigidBodyType(transformId)) + for i = 0, getNumOfUserAttributes(transformId) - 1 do + local type, name, x = getUserAttributeByIndex(transformId, i) + text = text .. ' ' .. tostring(i) .. ':' .. (type or '?') .. '/' .. (name or '?') .. '/' .. (x or '?') + end + table.insert(self.data.collidingShapes, text) end -- Left-Alt + , (<) = mark current position as start for pathfinding @@ -206,9 +210,6 @@ function DevHelper:fillDisplayData() table.insert(displayData, {name = 'isOnFieldArea', value = self.data.isOnFieldArea}) table.insert(displayData, {name = 'onFieldArea', value = self.data.onFieldArea}) table.insert(displayData, {name = 'totalOnFieldArea', value = self.data.totalOnFieldArea}) - table.insert(displayData, {name = 'nx', value = self.data.nx}) - table.insert(displayData, {name = 'ny', value = self.data.ny}) - table.insert(displayData, {name = 'nz', value = self.data.nz}) for i = 1, #self.data.collidingShapes do table.insert(displayData, {name = 'collidingShapes ' .. i, value = self.data.collidingShapes[i]}) end