Skip to content

Instantly share code, notes, and snippets.

@KeithHanson
Created November 29, 2017 09:36
Show Gist options
  • Save KeithHanson/cf28afc2337ca238e56d5abad5d795d6 to your computer and use it in GitHub Desktop.
Save KeithHanson/cf28afc2337ca238e56d5abad5d795d6 to your computer and use it in GitHub Desktop.
A ComputerCraft Gist
os.loadAPI("tools/json")
trackingData = {}
function resetTrackingData()
trackingData = {}
trackingData.startingChickens = 576
trackingData.currentChickens = 576
trackingData.customers = {}
trackingData.resetTime = os.time()
trackingData.lastSaved = os.time()
end
function storeTrackingData(data)
data.lastSaved = os.time()
fileHandle = fs.open("/data/chickenDinnerData.json", "w")
fileHandle.write(json.encodePretty(data))
fileHandle.close()
end
function readTrackingData()
fileHandle = fs.open("/data/chickenDinnerData.json", "r")
if fileHandle ~= nil then
rawData = fileHandle.readAll()
dataTable = json.decode(rawData)
return dataTable
else
return {}
end
end
monitor = peripheral.wrap("top")
function resetMonitor()
monitor.clear()
monitor.setCursorPos(1,1)
end
function resetScreen()
term.setBackgroundColor(colors.blue)
term.setTextColor(colors.white)
term.clear()
term.setCursorPos(1,1)
end
function drawMonitorStats()
-- tabulatedOutput = textutils.tabulate( colors.orange, {1,2,3}, colors.lightBlue, {"A","B","C"} )
monitor.setCursorPos(1,1)
monitor.write("Chicken Dinners Capacity: " .. trackingData.startingChickens)
chickensConsumed = trackingData.startingChickens - trackingData.currentChickens
monitor.setCursorPos(1,2)
monitor.write("Chicken Dinners Consumed: " .. chickensConsumed)
monitor.setCursorPos(1,3)
monitor.write("Tracked since: " .. textutils.formatTime(trackingData.resetTime) )
monitor.setCursorPos(1,4)
monitor.write("Last save at : " .. textutils.formatTime(trackingData.lastSaved) )
monitor.setCursorPos(1,5)
for i = 1, 30 do
monitor.write("-")
end
monitor.setCursorPos(1,6)
monitor.write("Most recent customers: ")
monitor.setCursorPos(1,7)
monitor.write("Name\t\t\tTime")
maxRows = 5
if #trackingData.customers < 5 then
maxRows = #trackingData.customers
end
for i = maxRows, 1, -1 do
row = trackingData.customers[i]
if row ~= nil then
rowNumber = 7 + (maxRows - i)
monitor.setCursorPos(1, rowNumber)
monitor.write(row.name .. "\t\t\t" .. row.time)
end
end
end
function logDinner(name)
customerCount = #trackingData.customers + 1
trackingData.customers[customerCount] = {name = name, time = textutils.formatTime(os.time()) }
trackingData.currentChickens = trackingData.currentChickens - 1
end
function promptAndDispense()
resetScreen()
print("Please enter your name to get dinner:")
name = read()
logDinner(name)
redstone.setOutput("bottom", true)
sleep(0.1)
redstone.setOutput("bottom", false)
textutils.slowPrint("Enjoy!")
end
-- Only use this to reset during testing
-- resetTrackingData()
while true do
resetMonitor()
trackingData = readTrackingData()
drawMonitorStats()
promptAndDispense()
storeTrackingData(trackingData)
sleep(1)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment