archive old controller
This commit is contained in:
370
controller/old-controller/render.lua
Normal file
370
controller/old-controller/render.lua
Normal file
@@ -0,0 +1,370 @@
|
||||
os.loadAPI("defs.lua")
|
||||
|
||||
-- draw pipes between machines
|
||||
-- win: window to render in
|
||||
-- x: starting x coord
|
||||
-- y: starting y coord
|
||||
-- spacing: spacing between the pipes
|
||||
-- color_out: output pipe contents color
|
||||
-- color_ret: return pipe contents color
|
||||
-- tick: tick the pipes for an animation
|
||||
function draw_pipe(win, x, y, spacing, color_out, color_ret, tick)
|
||||
local _color
|
||||
local _off
|
||||
tick = tick or 0
|
||||
|
||||
for i = 0, 4, 1
|
||||
do
|
||||
_off = (i + tick) % 2 == 0 or (tick == 1 and i == 0) or (tick == 3 and i == 4)
|
||||
|
||||
if _off then
|
||||
_color = colors.lightGray
|
||||
else
|
||||
_color = color_out
|
||||
end
|
||||
|
||||
win.setBackgroundColor(_color)
|
||||
win.setCursorPos(x, y + i)
|
||||
win.write(" ")
|
||||
|
||||
if not _off then
|
||||
_color = color_ret
|
||||
end
|
||||
|
||||
win.setBackgroundColor(_color)
|
||||
win.setCursorPos(x + spacing, y + i)
|
||||
win.write(" ")
|
||||
end
|
||||
end
|
||||
|
||||
-- draw a reactor view consisting of the reactor, boiler, turbine, and pipes
|
||||
-- data: reactor table
|
||||
function draw_reactor_system(data)
|
||||
local win = data.render.win_main
|
||||
local win_w, win_h = win.getSize()
|
||||
|
||||
win.setBackgroundColor(colors.black)
|
||||
win.setTextColor(colors.black)
|
||||
win.clear()
|
||||
win.setCursorPos(1, 1)
|
||||
|
||||
-- draw header --
|
||||
|
||||
local header = "REACTOR " .. data.id
|
||||
local header_pad_x = (win_w - string.len(header) - 2) / 2
|
||||
local header_color
|
||||
if data.state.no_fuel then
|
||||
if data.state.run then
|
||||
header_color = colors.purple
|
||||
else
|
||||
header_color = colors.brown
|
||||
end
|
||||
elseif data.state.full_waste then
|
||||
header_color = colors.yellow
|
||||
elseif data.state.high_temp then
|
||||
header_color = colors.orange
|
||||
elseif data.state.damage_crit then
|
||||
header_color = colors.red
|
||||
elseif data.state.run then
|
||||
header_color = colors.green
|
||||
else
|
||||
header_color = colors.lightGray
|
||||
end
|
||||
|
||||
local running = data.state.run and not data.state.no_fuel
|
||||
|
||||
win.write(" ")
|
||||
win.setBackgroundColor(header_color)
|
||||
win.write(string.rep(" ", win_w - 2))
|
||||
win.setBackgroundColor(colors.black)
|
||||
win.write(" ")
|
||||
win.setCursorPos(1, 2)
|
||||
win.write(" ")
|
||||
win.setBackgroundColor(header_color)
|
||||
win.write(string.rep(" ", header_pad_x) .. header .. string.rep(" ", header_pad_x))
|
||||
win.setBackgroundColor(colors.black)
|
||||
win.write(" ")
|
||||
|
||||
-- create strings for use in blit
|
||||
local line_text = string.rep(" ", 14)
|
||||
local line_text_color = string.rep("0", 14)
|
||||
|
||||
-- draw components --
|
||||
|
||||
-- draw reactor
|
||||
local rod = "88"
|
||||
if data.state.high_temp then
|
||||
rod = "11"
|
||||
elseif running then
|
||||
rod = "99"
|
||||
end
|
||||
|
||||
win.setCursorPos(4, 4)
|
||||
win.setBackgroundColor(colors.gray)
|
||||
win.write(line_text)
|
||||
win.setCursorPos(4, 5)
|
||||
win.blit(line_text, line_text_color, "77" .. rod .. "77" .. rod .. "77" .. rod .. "77")
|
||||
win.setCursorPos(4, 6)
|
||||
win.blit(line_text, line_text_color, "7777" .. rod .. "77" .. rod .. "7777")
|
||||
win.setCursorPos(4, 7)
|
||||
win.blit(line_text, line_text_color, "77" .. rod .. "77" .. rod .. "77" .. rod .. "77")
|
||||
win.setCursorPos(4, 8)
|
||||
win.blit(line_text, line_text_color, "7777" .. rod .. "77" .. rod .. "7777")
|
||||
win.setCursorPos(4, 9)
|
||||
win.blit(line_text, line_text_color, "77" .. rod .. "77" .. rod .. "77" .. rod .. "77")
|
||||
win.setCursorPos(4, 10)
|
||||
win.write(line_text)
|
||||
|
||||
-- boiler
|
||||
local steam = "ffffffffff"
|
||||
if running then
|
||||
steam = "0000000000"
|
||||
end
|
||||
|
||||
win.setCursorPos(4, 16)
|
||||
win.setBackgroundColor(colors.gray)
|
||||
win.write(line_text)
|
||||
win.setCursorPos(4, 17)
|
||||
win.blit(line_text, line_text_color, "77" .. steam .. "77")
|
||||
win.setCursorPos(4, 18)
|
||||
win.blit(line_text, line_text_color, "77" .. steam .. "77")
|
||||
win.setCursorPos(4, 19)
|
||||
win.blit(line_text, line_text_color, "77888888888877")
|
||||
win.setCursorPos(4, 20)
|
||||
win.blit(line_text, line_text_color, "77bbbbbbbbbb77")
|
||||
win.setCursorPos(4, 21)
|
||||
win.blit(line_text, line_text_color, "77bbbbbbbbbb77")
|
||||
win.setCursorPos(4, 22)
|
||||
win.blit(line_text, line_text_color, "77bbbbbbbbbb77")
|
||||
win.setCursorPos(4, 23)
|
||||
win.setBackgroundColor(colors.gray)
|
||||
win.write(line_text)
|
||||
|
||||
-- turbine
|
||||
win.setCursorPos(4, 29)
|
||||
win.setBackgroundColor(colors.gray)
|
||||
win.write(line_text)
|
||||
win.setCursorPos(4, 30)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77000000000077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77ffffffffff77")
|
||||
end
|
||||
win.setCursorPos(4, 31)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77008000080077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77ff8ffff8ff77")
|
||||
end
|
||||
win.setCursorPos(4, 32)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77000800800077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77fff8ff8fff77")
|
||||
end
|
||||
win.setCursorPos(4, 33)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77000088000077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77ffff88ffff77")
|
||||
end
|
||||
win.setCursorPos(4, 34)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77000800800077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77fff8ff8fff77")
|
||||
end
|
||||
win.setCursorPos(4, 35)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77008000080077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77ff8ffff8ff77")
|
||||
end
|
||||
win.setCursorPos(4, 36)
|
||||
if running then
|
||||
win.blit(line_text, line_text_color, "77000000000077")
|
||||
else
|
||||
win.blit(line_text, line_text_color, "77ffffffffff77")
|
||||
end
|
||||
win.setCursorPos(4, 37)
|
||||
win.setBackgroundColor(colors.gray)
|
||||
win.write(line_text)
|
||||
|
||||
-- draw reactor coolant pipes
|
||||
draw_pipe(win, 7, 11, 6, colors.orange, colors.lightBlue)
|
||||
|
||||
-- draw turbine pipes
|
||||
draw_pipe(win, 7, 24, 6, colors.white, colors.blue)
|
||||
end
|
||||
|
||||
-- draw the reactor statuses on the status screen
|
||||
-- data: reactor table
|
||||
function draw_reactor_status(data)
|
||||
local win = data.render.win_stat
|
||||
|
||||
win.setBackgroundColor(colors.black)
|
||||
win.setTextColor(colors.white)
|
||||
win.clear()
|
||||
|
||||
-- show control state
|
||||
win.setCursorPos(1, 1)
|
||||
if data.control_state then
|
||||
win.blit(" + ENABLED", "00000000000", "dddffffffff")
|
||||
else
|
||||
win.blit(" - DISABLED", "000000000000", "eeefffffffff")
|
||||
end
|
||||
|
||||
-- show run state
|
||||
win.setCursorPos(1, 2)
|
||||
if data.state.run then
|
||||
win.blit(" + RUNNING", "00000000000", "dddffffffff")
|
||||
else
|
||||
win.blit(" - STOPPED", "00000000000", "888ffffffff")
|
||||
end
|
||||
|
||||
-- show fuel state
|
||||
win.setCursorPos(1, 4)
|
||||
if data.state.no_fuel then
|
||||
win.blit(" - NO FUEL", "00000000000", "eeeffffffff")
|
||||
else
|
||||
win.blit(" + FUEL OK", "00000000000", "999ffffffff")
|
||||
end
|
||||
|
||||
-- show waste state
|
||||
win.setCursorPos(1, 5)
|
||||
if data.state.full_waste then
|
||||
win.blit(" - WASTE FULL", "00000000000000", "eeefffffffffff")
|
||||
else
|
||||
win.blit(" + WASTE OK", "000000000000", "999fffffffff")
|
||||
end
|
||||
|
||||
-- show high temp state
|
||||
win.setCursorPos(1, 6)
|
||||
if data.state.high_temp then
|
||||
win.blit(" - HIGH TEMP", "0000000000000", "eeeffffffffff")
|
||||
else
|
||||
win.blit(" + TEMP OK", "00000000000", "999ffffffff")
|
||||
end
|
||||
|
||||
-- show damage state
|
||||
win.setCursorPos(1, 7)
|
||||
if data.state.damage_crit then
|
||||
win.blit(" - CRITICAL DAMAGE", "0000000000000000000", "eeeffffffffffffffff")
|
||||
else
|
||||
win.blit(" + CASING INTACT", "00000000000000000", "999ffffffffffffff")
|
||||
end
|
||||
|
||||
-- waste processing options --
|
||||
win.setTextColor(colors.black)
|
||||
win.setBackgroundColor(colors.white)
|
||||
|
||||
win.setCursorPos(1, 10)
|
||||
win.write(" ")
|
||||
win.setCursorPos(1, 11)
|
||||
win.write(" WASTE OUTPUT ")
|
||||
|
||||
win.setCursorPos(1, 13)
|
||||
win.setBackgroundColor(colors.cyan)
|
||||
if data.waste_production == "plutonium" then
|
||||
win.write(" > plutonium ")
|
||||
else
|
||||
win.write(" plutonium ")
|
||||
end
|
||||
|
||||
win.setCursorPos(1, 15)
|
||||
win.setBackgroundColor(colors.green)
|
||||
if data.waste_production == "polonium" then
|
||||
win.write(" > polonium ")
|
||||
else
|
||||
win.write(" polonium ")
|
||||
end
|
||||
|
||||
win.setCursorPos(1, 17)
|
||||
win.setBackgroundColor(colors.purple)
|
||||
if data.waste_production == "antimatter" then
|
||||
win.write(" > antimatter ")
|
||||
else
|
||||
win.write(" antimatter ")
|
||||
end
|
||||
end
|
||||
|
||||
-- update the system monitor screen
|
||||
-- mon: monitor to update
|
||||
-- is_scrammed:
|
||||
function update_system_monitor(mon, is_scrammed, reactors)
|
||||
if is_scrammed then
|
||||
-- display scram banner
|
||||
mon.setTextColor(colors.white)
|
||||
mon.setBackgroundColor(colors.black)
|
||||
mon.setCursorPos(1, 2)
|
||||
mon.clearLine()
|
||||
mon.setBackgroundColor(colors.red)
|
||||
mon.setCursorPos(1, 3)
|
||||
mon.write(" ")
|
||||
mon.setCursorPos(1, 4)
|
||||
mon.write(" SCRAM ")
|
||||
mon.setCursorPos(1, 5)
|
||||
mon.write(" ")
|
||||
mon.setBackgroundColor(colors.black)
|
||||
mon.setCursorPos(1, 6)
|
||||
mon.clearLine()
|
||||
mon.setTextColor(colors.white)
|
||||
else
|
||||
-- clear where scram banner would be
|
||||
mon.setCursorPos(1, 3)
|
||||
mon.clearLine()
|
||||
mon.setCursorPos(1, 4)
|
||||
mon.clearLine()
|
||||
mon.setCursorPos(1, 5)
|
||||
mon.clearLine()
|
||||
|
||||
-- show production statistics--
|
||||
|
||||
local mrf_t = 0
|
||||
local mb_t = 0
|
||||
local plutonium = 0
|
||||
local polonium = 0
|
||||
local spent_waste = 0
|
||||
local antimatter = 0
|
||||
|
||||
-- determine production values
|
||||
for key, rctr in pairs(reactors) do
|
||||
if rctr.state.run then
|
||||
mrf_t = mrf_t + defs.TURBINE_MRF_T
|
||||
mb_t = mb_t + defs.REACTOR_MB_T
|
||||
|
||||
if rctr.waste_production == "plutonium" then
|
||||
plutonium = plutonium + (defs.REACTOR_MB_T * defs.PLUTONIUM_PER_WASTE)
|
||||
spent_waste = spent_waste + (defs.REACTOR_MB_T * defs.PLUTONIUM_PER_WASTE * defs.SPENT_PER_BYPRODUCT)
|
||||
elseif rctr.waste_production == "polonium" then
|
||||
polonium = polonium + (defs.REACTOR_MB_T * defs.POLONIUM_PER_WASTE)
|
||||
spent_waste = spent_waste + (defs.REACTOR_MB_T * defs.POLONIUM_PER_WASTE * defs.SPENT_PER_BYPRODUCT)
|
||||
elseif rctr.waste_production == "antimatter" then
|
||||
antimatter = antimatter + (defs.REACTOR_MB_T * defs.POLONIUM_PER_WASTE * defs.ANTIMATTER_PER_POLONIUM)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- draw stats
|
||||
mon.setTextColor(colors.lightGray)
|
||||
mon.setCursorPos(1, 2)
|
||||
mon.clearLine()
|
||||
mon.write("ENERGY: " .. string.format("%0.2f", mrf_t) .. " MRF/t")
|
||||
-- mon.setCursorPos(1, 3)
|
||||
-- mon.clearLine()
|
||||
-- mon.write("FUEL: " .. mb_t .. " mB/t")
|
||||
mon.setCursorPos(1, 3)
|
||||
mon.clearLine()
|
||||
mon.write("Pu: " .. string.format("%0.2f", plutonium) .. " mB/t")
|
||||
mon.setCursorPos(1, 4)
|
||||
mon.clearLine()
|
||||
mon.write("Po: " .. string.format("%0.2f", polonium) .. " mB/t")
|
||||
mon.setCursorPos(1, 5)
|
||||
mon.clearLine()
|
||||
mon.write("SPENT: " .. string.format("%0.2f", spent_waste) .. " mB/t")
|
||||
mon.setCursorPos(1, 6)
|
||||
mon.clearLine()
|
||||
mon.write("ANTI-M: " .. string.format("%0.2f", antimatter * 1000) .. " uB/t")
|
||||
mon.setTextColor(colors.white)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user