cc-mek-scada/reactor-plc/renderer.lua

79 lines
1.8 KiB
Lua
Raw Normal View History

2023-04-07 02:10:33 +00:00
--
-- Graphics Rendering Control
--
local panel_view = require("reactor-plc.panel.front_panel")
2023-04-21 00:47:14 +00:00
local style = require("reactor-plc.panel.style")
2023-04-07 02:10:33 +00:00
local flasher = require("graphics.flasher")
2023-04-21 00:47:14 +00:00
local DisplayBox = require("graphics.elements.displaybox")
2023-04-07 02:10:33 +00:00
local renderer = {}
local ui = {
2023-04-21 00:47:14 +00:00
display = nil
2023-04-07 02:10:33 +00:00
}
-- start the UI
function renderer.start_ui()
2023-04-21 00:47:14 +00:00
if ui.display == nil then
-- reset terminal
2023-04-07 02:10:33 +00:00
term.setTextColor(colors.white)
term.setBackgroundColor(colors.black)
term.clear()
term.setCursorPos(1, 1)
-- set overridden colors
for i = 1, #style.colors do
term.setPaletteColor(style.colors[i].c, style.colors[i].hex)
end
-- init front panel view
2023-04-21 00:47:14 +00:00
ui.display = DisplayBox{window=term.current(),fg_bg=style.root}
panel_view(ui.display)
-- start flasher callback task
flasher.run()
2023-04-07 02:10:33 +00:00
end
end
-- close out the UI
function renderer.close_ui()
2023-04-21 00:47:14 +00:00
if ui.display ~= nil then
-- stop blinking indicators
flasher.clear()
-- delete element tree
ui.display.delete()
ui.display = nil
2023-04-07 02:10:33 +00:00
-- restore colors
for i = 1, #style.colors do
local r, g, b = term.nativePaletteColor(style.colors[i].c)
term.setPaletteColor(style.colors[i].c, r, g, b)
end
2023-04-07 02:10:33 +00:00
-- reset terminal
term.setTextColor(colors.white)
term.setBackgroundColor(colors.black)
term.clear()
term.setCursorPos(1, 1)
end
2023-04-07 02:10:33 +00:00
end
-- is the UI ready?
---@nodiscard
---@return boolean ready
2023-04-21 00:47:14 +00:00
function renderer.ui_ready() return ui.display ~= nil end
2023-04-07 02:10:33 +00:00
2023-04-09 02:00:51 +00:00
-- handle a mouse event
---@param event mouse_interaction|nil
function renderer.handle_mouse(event)
if ui.display ~= nil and event ~= nil then
2023-04-21 00:47:14 +00:00
ui.display.handle_mouse(event)
end
2023-04-07 02:10:33 +00:00
end
return renderer