This commit is contained in:
kepler155c
2018-11-02 21:42:47 -04:00
parent 10bbb5ebf4
commit 047c2cdddb
7 changed files with 103 additions and 68 deletions

View File

@@ -3,6 +3,7 @@ local Craft = require('turtle.craft')
local itemDB = require('itemDB')
local Util = require('util')
local os = _G.os
local turtle = _G.turtle
local Milo = {
@@ -178,25 +179,37 @@ function Milo:getTurtleInventory()
return list
end
function Milo:craftAndEject(item, count)
local provided = self:provideItem(item, count, function(amount)
-- eject rest when finished crafted
return self:eject(item, amount)
end)
-- eject what we currently have
return item.count - self:eject(item, provided.available)
-- queue up an action that reliees on the crafting grid
function Milo:queueRequest(request, callback)
if Util.empty(self.context.queue) then
os.queueEvent('milo_queue')
end
table.insert(self.context.queue, {
request = request,
callback = callback
})
end
function Milo:provideItem(item, count, callback)
function Milo:craftAndEject(item, count)
local request = self:makeRequest(item, count, function(request)
-- eject rest when finished crafted
return self:eject(item, request.count)
end)
-- predict that we will eject that amount
return request.current - request.count
end
function Milo:makeRequest(item, count, callback)
local current = Milo:getItem(Milo:listItems(), item) or { count = 0 }
if count <= 0 then
return {
requested = 0,
craft = 0,
available = 0,
count = 0,
current = current.count,
item = item,
}
end
@@ -211,20 +224,26 @@ function Milo:provideItem(item, count, callback)
end
end
if toCraft > 0 then
item = Util.shallowCopy(item)
item.count = toCraft
item.eject = callback
self:requestCrafting(item)
item.crafted = 0
end
return {
local request = {
requested = count,
craft = toCraft,
available = math.min(count, current.count),
count = math.min(count, current.count),
current = current.count,
item = item,
}
if request.count > 0 then
Milo:queueRequest(request, callback)
end
if request.craft > 0 then
item = Util.shallowCopy(item)
item.count = request.craft
item.callback = callback
self:requestCrafting(item)
end
return request
end
function Milo:eject(item, count)