feat: create utils lib
This commit is contained in:
parent
b1c3eac1b9
commit
e9ebf63c55
@ -1,3 +1,4 @@
|
||||
local utils = require('libs/utils')
|
||||
local turtleUtils = require('libs/turtle-utils')
|
||||
local config = require('config/harvesting')
|
||||
|
||||
@ -27,38 +28,6 @@ local localPlan = nil
|
||||
|
||||
-- UTILS
|
||||
|
||||
local function sizeof(t)
|
||||
if not t then
|
||||
return 0
|
||||
end
|
||||
|
||||
local size = 0
|
||||
for k,v in pairs(t) do
|
||||
size = size + 1
|
||||
end
|
||||
return size
|
||||
end
|
||||
|
||||
function difference(a, b)
|
||||
local aa = {}
|
||||
for k,v in pairs(a) do aa[v]=true end
|
||||
for k,v in pairs(b) do aa[v]=nil end
|
||||
local ret = {}
|
||||
local n = 0
|
||||
for k,v in pairs(a) do
|
||||
if aa[v] then n=n+1 ret[n]=v end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
local function shallowClone(t)
|
||||
local res = {}
|
||||
for k,v in pairs(t) do
|
||||
res[k] = v
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
local function removeFirst(t, x)
|
||||
local res = {}
|
||||
local removed = false
|
||||
@ -74,14 +43,6 @@ local function removeFirst(t, x)
|
||||
return res
|
||||
end
|
||||
|
||||
local function find(t, predicate)
|
||||
for k,v in pairs(t) do
|
||||
if predicate(v, k) then
|
||||
return v, k
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function getIndexedCount(t)
|
||||
local res = {}
|
||||
|
||||
@ -324,7 +285,7 @@ local function removeSeeds(seeds)
|
||||
local ok, block = turtle.inspectDown()
|
||||
local blockName = block and block.name
|
||||
|
||||
local found = find(stateSeeds, function(seedName) return seedName == getSeedNameFromCropName(blockName) end)
|
||||
local found = utils.find(stateSeeds, function(seedName) return seedName == getSeedNameFromCropName(blockName) end)
|
||||
|
||||
if found then
|
||||
local digOk = turtle.digDown()
|
||||
@ -424,18 +385,18 @@ local function replantProcedure()
|
||||
error('cannot fetch the remote plan')
|
||||
end
|
||||
|
||||
local seedsToRemove = difference(localPlan, remotePlan)
|
||||
local seedsToPlant = difference(remotePlan, localPlan)
|
||||
local seedsToRemove = utils.difference(localPlan, remotePlan)
|
||||
local seedsToPlant = utils.difference(remotePlan, localPlan)
|
||||
|
||||
if sizeof(seedsToRemove) > 0 then
|
||||
print('nb seeds to remove: ' .. sizeof(seedsToRemove))
|
||||
if utils.sizeof(seedsToRemove) > 0 then
|
||||
print('nb seeds to remove: ' .. utils.sizeof(seedsToRemove))
|
||||
removeSeeds(seedsToRemove)
|
||||
else
|
||||
print('no seeds to remove')
|
||||
end
|
||||
|
||||
if sizeof(seedsToPlant) > 0 then
|
||||
print('nb seeds to plants: ' .. sizeof(seedsToPlant))
|
||||
if utils.sizeof(seedsToPlant) > 0 then
|
||||
print('nb seeds to plants: ' .. utils.sizeof(seedsToPlant))
|
||||
retrieveSeeds(seedsToPlant)
|
||||
replantSeeds()
|
||||
else
|
||||
|
||||
@ -7,6 +7,7 @@ local LIST_FILES = {
|
||||
};
|
||||
|
||||
local LIST_LIBS_FILES = {
|
||||
'libs/utils.lua',
|
||||
'libs/turtle-utils.lua',
|
||||
'libs/robot.lua'
|
||||
}
|
||||
|
||||
44
libs/utils.lua
Normal file
44
libs/utils.lua
Normal file
@ -0,0 +1,44 @@
|
||||
local utils = {}
|
||||
|
||||
utils.sizeof = function(t)
|
||||
if not t then
|
||||
return 0
|
||||
end
|
||||
|
||||
local size = 0
|
||||
for k,v in pairs(t) do
|
||||
size = size + 1
|
||||
end
|
||||
return size
|
||||
end
|
||||
|
||||
utils.difference = function(a, b)
|
||||
local aa = {}
|
||||
for k,v in pairs(a) do aa[v]=true end
|
||||
for k,v in pairs(b) do aa[v]=nil end
|
||||
local ret = {}
|
||||
local n = 0
|
||||
for k,v in pairs(a) do
|
||||
if aa[v] then n=n+1 ret[n]=v end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
utils.shallowClone = function(t)
|
||||
local res = {}
|
||||
for k,v in pairs(t) do
|
||||
res[k] = v
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
|
||||
utils.find = function(t, predicate)
|
||||
for k,v in pairs(t) do
|
||||
if predicate(v, k) then
|
||||
return v, k
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return utils
|
||||
Loading…
Reference in New Issue
Block a user