diff --git a/cargo-elevator.lua b/cargo-elevator.lua new file mode 100644 index 0000000..1717d56 --- /dev/null +++ b/cargo-elevator.lua @@ -0,0 +1,61 @@ +-- program to manage a cargo elevator +-- yes, i am aware i could just use the computer to transfer packages at this +-- point, but where's the fun in that? + +local FLOORS = { + { + match = function (input) + local first_char = string.sub(input, 1, 1) + return first_char == "A" or first_char == "W" + end, + detect = function () + -- TODO + end, + call = function () + -- TODO + end + storage = "", + elevator_storage = "", + } +} + +local SLEEP_T = 5 + +local PKG_STACK = { + transfer_all = function (self, src, dest) + -- TODO + end, + transfer_matching = function (self, src, dest, match_f) + -- TODO + end, + get_next_floor = function (self) + -- TODO + end + stack = {}, +} + +function run (floors, stack) + local next_addr = nil + for _, floor in pairs(floors) do + if floor.detect() then + stack:transfer_all(floor.storage, floor.elevator_storage) + stack:transfer_matching( + floor.elevator_storage, floor.storage, floor.match + ) + next_addr = stack:get_next_floor() + end + end + if next_addr ~= nil then + for _, floor in pairs(floors) do + if floor.match(next_addr) then + floor.call() + break + end + end + end +end + +while true do + run(FLOORS) + os.sleep(SLEEP_T) +end