fluid things
This commit is contained in:
parent
7694798ad0
commit
ad6af0fa35
21 changed files with 608 additions and 183 deletions
172
computer/13/fluids.lua
Normal file
172
computer/13/fluids.lua
Normal file
|
@ -0,0 +1,172 @@
|
|||
require("pathfinding")
|
||||
pretty = require("cc.pretty")
|
||||
pp = pretty.pretty_print()
|
||||
|
||||
isFluid = {
|
||||
water = true,
|
||||
lava = true,
|
||||
milk = true,
|
||||
blood = true,
|
||||
molten_rose_gold = true,
|
||||
molten_copper = true,
|
||||
molten_gold = true,
|
||||
molten_bronze = true,
|
||||
molten_tin = true,
|
||||
molten_zinc = true,
|
||||
compound_mixture = true,
|
||||
}
|
||||
|
||||
fluidDevicePos = {
|
||||
trash = vector.new(2, 0, -1),
|
||||
water_source = vector.new(0, 0, -1),
|
||||
mixer = vector.new(-1, 0, -1),
|
||||
compactor = vector.new(-2, 0, -1),
|
||||
spout = vector.new(-3, 0, -1),
|
||||
melter = vector.new(-4, 0, -1),
|
||||
}
|
||||
|
||||
tankPos = {
|
||||
vector.new(4, 0, -3),
|
||||
vector.new(3, 0, -3),
|
||||
vector.new(2, 0, -3),
|
||||
vector.new(1, 0, -3),
|
||||
vector.new(0, 0, -3),
|
||||
vector.new(-1, 0, -3),
|
||||
vector.new(-2, 0, -3),
|
||||
vector.new(-3, 0, -3),
|
||||
vector.new(-4, 0, -3),
|
||||
}
|
||||
|
||||
function setRedRouter(state)
|
||||
peripheral.call("bottom", "setOutput", "bottom", state)
|
||||
peripheral.call("bottom", "setOutput", "front", state)
|
||||
end
|
||||
|
||||
function loadFluidInventory()
|
||||
return require("fluid_state")
|
||||
end
|
||||
|
||||
function saveFluids()
|
||||
fs.delete("fluid_state.lua")
|
||||
repeat
|
||||
file = fs.open("fluid_state.lua", "w")
|
||||
until file
|
||||
file.write("return ")
|
||||
file.write(textutils.serialise(_G.fluidTanks))
|
||||
file.close()
|
||||
end
|
||||
|
||||
function getFluidAmount(type)
|
||||
for index, tank in pairs(_G.fluidTanks) do
|
||||
if tank.name == type then
|
||||
return tank.amount
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function pumpToDevices(enable)
|
||||
goTo(vector.new(4, 0, -1))
|
||||
-- clutches invert the signal
|
||||
setRedRouter(not enable)
|
||||
end
|
||||
|
||||
function pumpToTanks(enable)
|
||||
goTo(vector.new(3, 0, -1))
|
||||
-- clutches invert the signal
|
||||
setRedRouter(not enable)
|
||||
end
|
||||
|
||||
function resetAllFluidDevices()
|
||||
pumpToDevices(false)
|
||||
pumpToTanks(false)
|
||||
-- for name, pos in pairs(fluidDevicePos) do
|
||||
-- goTo(pos)
|
||||
-- setRedRouter(false)
|
||||
-- end
|
||||
for x = 2, -4, -1 do
|
||||
goTo(vector.new(x, 0, -1))
|
||||
setRedRouter(false)
|
||||
end
|
||||
for x = -4, 4 do
|
||||
goTo(vector.new(x, 0, -3))
|
||||
setRedRouter(false)
|
||||
end
|
||||
_G.activeFluidDevice = nil
|
||||
for i = 1, 9 do
|
||||
_G.fluidTanks[i].connected = false
|
||||
end
|
||||
end
|
||||
|
||||
function selectFluidDevice(name)
|
||||
if fluidDevicePos[name] == nil then
|
||||
error("selectFluidDevice(" .. name .. "); not a known fluid device", 2)
|
||||
end
|
||||
|
||||
if _G.activeFluidDevice ~= nil then
|
||||
goTo(fluidDevicePos[_G.activeFluidDevice])
|
||||
_G.activeFluidDevice = nil
|
||||
setRedRouter(false)
|
||||
end
|
||||
goTo(fluidDevicePos[name])
|
||||
setRedRouter(true)
|
||||
_G.activeFluidDevice = name
|
||||
end
|
||||
|
||||
function connectTankOrAssign(fluid)
|
||||
local has_fluid = false
|
||||
for index, tank in pairs(_G.fluidTanks) do
|
||||
if tank.name == fluid then
|
||||
has_fluid = true
|
||||
print(fluid, "already assigned to", index)
|
||||
end
|
||||
end
|
||||
if not has_fluid then
|
||||
print(fluid, "not in tanks, assigning new")
|
||||
for index = 1, 9 do
|
||||
if _G.fluidTanks[index].name == nil or _G.fluidTanks[index].amount == 0 then
|
||||
_G.fluidTanks[index] = {
|
||||
name = fluid,
|
||||
amount = 0,
|
||||
connected = false
|
||||
}
|
||||
print("assigned tank", index, "to", fluid)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
connectTanks({ fluid })
|
||||
end
|
||||
|
||||
function connectTanks(fluid_list)
|
||||
print("connecting tanks")
|
||||
pp(fluid_list)
|
||||
for index, tank in pairs(_G.fluidTanks) do
|
||||
should_be_connected = false
|
||||
for _, fluid in pairs(fluid_list) do
|
||||
if tank.name == fluid then
|
||||
should_be_connected = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if should_be_connected ~= tank.connected then
|
||||
print("setting", tank.name, index, "to", should_be_connected)
|
||||
goTo(tankPos[index])
|
||||
setRedRouter(should_be_connected)
|
||||
_G.fluidTanks[index].connected = should_be_connected
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function fluidInvAdd(name, amount)
|
||||
print("added", amount, "to", name)
|
||||
for index, tank in pairs(_G.fluidTanks) do
|
||||
if tank.name == name then
|
||||
tank.amount = tank.amount + amount
|
||||
-- TODO limit capacity
|
||||
end
|
||||
end
|
||||
saveFluids()
|
||||
end
|
||||
|
||||
_G.fluidTanks = _G.fluidTanks or loadFluidInventory()
|
Loading…
Add table
Add a link
Reference in a new issue