end
end
-local balance_coal = function()
+local find_coal = function()
local stock = {}
- local min = { "", math.huge }
+ local total = 0
+ local min = false
for addr,barrel in pairs(coal_barrels) do
local item = barrel.getItemDetail(1)
- stock[addr] = item and item.count or 0
+ local amt = item and item.count or 0
+ stock[addr] = amt
+ total = total + amt
end
+ -- this is shite code, deal with it
+ local avg = total/2
+ for addr,barrel in pairs(coal_barrels) do
+ if stock[addr] > avg then
+ end
return stock
end
+local fullest_coal_barrel = function(stock)
+ local r = { addr = false, count = 0 }
+ for barrel_addr, count in pairs(stock) do
+ if count >= fullest_coal_barrel.count then
+ r = { addr = barrel_addr, count = count }
+ end
+ end
+ return r.addr, r.count
+end
+
local feed = function(stock)
local stock = stock
for deployer_addr,deployer in pairs(deployers) do
local deployer_item = deployer.getItemDetail(1)
if refill_when(deployer_item and deployer_item.count or 0) then
local f = function() return false, "No coal available" end
- for barrel_addr,count in pairs(stock) do
- if count >= refill_amt then
- stock[barrel_addr] = count - refill_amt
- f = function() return deployer.pullItems(barrel_addr, 1, refill_amt, 1) end
- break
- end
+ local barrel_addr, count = fullest_coal_barrel(stock)
+-- for barrel_addr,count in pairs(stock) do
+ if count >= refill_amt then
+ stock[barrel_addr] = count - refill_amt
+ f = function() return deployer.pullItems(barrel_addr, 1, refill_amt, 1) end
+-- break
end
+-- end
local ok, e = f()
if not ok then
print("Could not feed "..deployer_addr.."\n"..e)
monitor.setCursorPos(1,12)
monitor.write("refreshes once every minute")
+ -- this doesn't work for some reason..
monitor.setTextColor(1)
coal_at_boot = coal_at_boot or total_coal
minutes_passed = minutes_passed + 1
if minutes_passed < 0 then
local avg = (coal_at_boot - total_coal)/minutes_passed
monitor.setCursorPos(1,6)
- monitor.write("losing on average "..avg.."cc/m")
+ monitor.write("losing on average "..tostring(avg).."cc/m")
end
end
main_timer = os.startTimer(60)
os.cancelTimer(spinner_timer)
print_spinner(main_monitor, 29,12, "?")
- local stock = balance_coal()
+ local stock = find_coal()
print_stats(main_monitor, stock)
print_spinner(main_monitor, 29,12, "*")
feed(stock)