mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
86 lines
2.8 KiB
Lua
86 lines
2.8 KiB
Lua
-- Signal Bars Graphics Element
|
|
|
|
local util = require("scada-common.util")
|
|
|
|
local element = require("graphics.element")
|
|
|
|
---@class signal_bar_args
|
|
---@field compact? boolean true to use a single character (works better against edges that extend out colors)
|
|
---@field colors_low_med? cpair color a for low signal quality, color b for medium signal quality
|
|
---@field disconnect_color? color color for the 'x' on disconnect
|
|
---@field parent graphics_element
|
|
---@field id? string element id
|
|
---@field x? integer 1 if omitted
|
|
---@field y? integer auto incremented if omitted
|
|
---@field fg_bg? cpair foreground/background colors (foreground is used for high signal quality)
|
|
---@field hidden? boolean true to hide on initial draw
|
|
|
|
-- new signal bar
|
|
---@nodiscard
|
|
---@param args signal_bar_args
|
|
---@return graphics_element element, element_id id
|
|
local function signal_bar(args)
|
|
args.height = 1
|
|
args.width = util.trinary(args.compact, 1, 2)
|
|
|
|
-- create new graphics element base object
|
|
local e = element.new(args)
|
|
|
|
e.value = 0
|
|
|
|
local blit_bkg = args.fg_bg.blit_bkg
|
|
local blit_0, blit_1, blit_2, blit_3 = args.fg_bg.blit_fgd, args.fg_bg.blit_fgd, args.fg_bg.blit_fgd, args.fg_bg.blit_fgd
|
|
|
|
if type(args.colors_low_med) == "table" then
|
|
blit_1 = args.colors_low_med.blit_a or blit_1
|
|
blit_2 = args.colors_low_med.blit_b or blit_2
|
|
end
|
|
|
|
if util.is_int(args.disconnect_color) then blit_0 = colors.toBlit(args.disconnect_color) end
|
|
|
|
-- on state change (0 = offline, 1 through 3 = low to high signal)
|
|
---@param new_state integer signal state
|
|
function e.on_update(new_state)
|
|
e.value = new_state
|
|
e.redraw()
|
|
end
|
|
|
|
-- set signal state (0 = offline, 1 through 3 = low to high signal)
|
|
---@param val integer signal state
|
|
function e.set_value(val) e.on_update(val) end
|
|
|
|
-- draw label and signal bar
|
|
function e.redraw()
|
|
e.w_set_cur(1, 1)
|
|
|
|
if args.compact then
|
|
if e.value == 1 then
|
|
e.w_blit("\x90", blit_1, blit_bkg)
|
|
elseif e.value == 2 then
|
|
e.w_blit("\x94", blit_2, blit_bkg)
|
|
elseif e.value == 3 then
|
|
e.w_blit("\x95", blit_3, blit_bkg)
|
|
else
|
|
e.w_blit("x", blit_0, blit_bkg)
|
|
end
|
|
else
|
|
if e.value == 1 then
|
|
e.w_blit("\x9f ", blit_bkg .. blit_bkg, blit_1 .. blit_bkg)
|
|
elseif e.value == 2 then
|
|
e.w_blit("\x9f\x94", blit_bkg .. blit_2, blit_2 .. blit_bkg)
|
|
elseif e.value == 3 then
|
|
e.w_blit("\x9f\x81", blit_bkg .. blit_bkg, blit_3 .. blit_3)
|
|
else
|
|
e.w_blit(" x", blit_0 .. blit_0, blit_bkg .. blit_bkg)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- initial draw
|
|
e.redraw()
|
|
|
|
return e.complete()
|
|
end
|
|
|
|
return signal_bar
|