#593 radiation monitor lists
This commit is contained in:
parent
e1ac42f5f8
commit
a629c04d11
@ -824,13 +824,18 @@ function iorx.record_radiation_data(data)
|
|||||||
-- unit radiation monitors
|
-- unit radiation monitors
|
||||||
|
|
||||||
for u_id = 1, #io.units do
|
for u_id = 1, #io.units do
|
||||||
local unit = io.units[u_id]
|
local unit = io.units[u_id]
|
||||||
|
local max_rad = 0
|
||||||
|
local connected = {}
|
||||||
|
|
||||||
unit.radiation = types.new_zero_radiation_reading()
|
unit.radiation = types.new_zero_radiation_reading()
|
||||||
unit.rad_monitors = data[u_id]
|
unit.rad_monitors = data[u_id]
|
||||||
|
|
||||||
local max_rad = 0
|
for id, mon in pairs(unit.rad_monitors) do
|
||||||
for _, mon in pairs(unit.rad_monitors) do
|
table.insert(connected, id)
|
||||||
|
|
||||||
|
unit.unit_ps.publish("radiation@" .. id, mon.radiation)
|
||||||
|
|
||||||
if mon.raw > max_rad then
|
if mon.raw > max_rad then
|
||||||
max_rad = mon.raw
|
max_rad = mon.raw
|
||||||
unit.radiation = mon.radiation
|
unit.radiation = mon.radiation
|
||||||
@ -838,7 +843,7 @@ function iorx.record_radiation_data(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
unit.unit_ps.publish("radiation", unit.radiation)
|
unit.unit_ps.publish("radiation", unit.radiation)
|
||||||
unit.unit_ps.publish("radiation_monitors", textutils.serialize(unit.rad_monitors))
|
unit.unit_ps.publish("radiation_monitors", textutils.serialize(connected))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- facility radiation monitors
|
-- facility radiation monitors
|
||||||
@ -849,7 +854,13 @@ function iorx.record_radiation_data(data)
|
|||||||
fac.rad_monitors = data[#io.units + 1]
|
fac.rad_monitors = data[#io.units + 1]
|
||||||
|
|
||||||
local max_rad = 0
|
local max_rad = 0
|
||||||
for _, mon in pairs(fac.rad_monitors) do
|
local connected = {}
|
||||||
|
|
||||||
|
for id, mon in pairs(fac.rad_monitors) do
|
||||||
|
table.insert(connected, id)
|
||||||
|
|
||||||
|
fac.ps.publish("radiation@" .. id, mon.radiation)
|
||||||
|
|
||||||
if mon.raw > max_rad then
|
if mon.raw > max_rad then
|
||||||
max_rad = mon.raw
|
max_rad = mon.raw
|
||||||
fac.radiation = mon.radiation
|
fac.radiation = mon.radiation
|
||||||
@ -857,7 +868,7 @@ function iorx.record_radiation_data(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
fac.ps.publish("radiation", fac.radiation)
|
fac.ps.publish("radiation", fac.radiation)
|
||||||
fac.ps.publish("radiation_monitors", textutils.serialize(fac.rad_monitors))
|
fac.ps.publish("radiation_monitors", textutils.serialize(connected))
|
||||||
end
|
end
|
||||||
|
|
||||||
return function (io_obj)
|
return function (io_obj)
|
||||||
|
|||||||
@ -75,6 +75,39 @@ local function new_view(root)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- create a new radiation monitor list
|
||||||
|
---@param parent Container
|
||||||
|
---@param ps psil
|
||||||
|
local function new_mon_list(parent, ps)
|
||||||
|
local mon_list = ListBox{parent=parent,y=6,scroll_height=100,nav_fg_bg=cpair(colors.lightGray,colors.gray),nav_active=cpair(colors.white,colors.gray)}
|
||||||
|
|
||||||
|
local elem_list = {} ---@type graphics_element[]
|
||||||
|
|
||||||
|
mon_list.register(ps, "radiation", function (data)
|
||||||
|
local ids = textutils.unserialize(data)
|
||||||
|
|
||||||
|
-- delete any disconnected monitors
|
||||||
|
for id, elem in pairs(elem_list) do
|
||||||
|
if util.table_contains(ids, id) then
|
||||||
|
elem.delete()
|
||||||
|
elem_list[id] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add newly connected monitors
|
||||||
|
for _, id in pairs(ids) do
|
||||||
|
if not elem_list[id] then
|
||||||
|
elem_list[id] = Div{parent=mon_list,height=4}
|
||||||
|
local mon_rect = Rectangle{parent=elem_list[id],height=5,x=2,width=20,border=border(1,colors.gray,true),thin=true,fg_bg=cpair(colors.black,colors.lightGray)}
|
||||||
|
|
||||||
|
TextBox{parent=mon_rect,text="Env. Detector "..id}
|
||||||
|
local mon_rad = RadIndicator{parent=mon_rect,x=2,label="",format="%13.3f",lu_colors=cpair(colors.gray,colors.gray),width=18}
|
||||||
|
mon_rad.register(ps, "radiation@" .. id, mon_rad.update)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
--#region unit radiation monitors
|
--#region unit radiation monitors
|
||||||
|
|
||||||
for i = 1, db.facility.num_units do
|
for i = 1, db.facility.num_units do
|
||||||
@ -92,29 +125,7 @@ local function new_view(root)
|
|||||||
local radiation = RadIndicator{parent=u_div,x=2,label="",format="%17.3f",lu_colors=lu_col,width=21}
|
local radiation = RadIndicator{parent=u_div,x=2,label="",format="%17.3f",lu_colors=lu_col,width=21}
|
||||||
radiation.register(u_ps, "radiation", radiation.update)
|
radiation.register(u_ps, "radiation", radiation.update)
|
||||||
|
|
||||||
local mon_list = ListBox{parent=u_div,y=6,scroll_height=100,nav_fg_bg=cpair(colors.lightGray,colors.gray),nav_active=cpair(colors.white,colors.gray)}
|
new_mon_list(u_div, u_ps)
|
||||||
|
|
||||||
-- local last_list = {}
|
|
||||||
-- local new_list = {}
|
|
||||||
|
|
||||||
mon_list.register(u_ps, "radiation", function ()
|
|
||||||
-- for k, _ in pairs(unit.rad_monitors) do
|
|
||||||
-- if last_list[k] then last_list[k] = nil end
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- re-create due to new items
|
|
||||||
-- if util.table_len(last_list) > 0 then
|
|
||||||
mon_list.remove_all()
|
|
||||||
|
|
||||||
for k, v in pairs(unit.rad_monitors) do
|
|
||||||
local mon_div = Div{parent=mon_list,height=4}
|
|
||||||
local mon_rect = Rectangle{parent=mon_div,height=5,x=2,width=20,border=border(1,colors.gray,true),thin=true,fg_bg=cpair(colors.black,colors.lightGray)}
|
|
||||||
TextBox{parent=mon_rect,text="Env. Detector "..k}
|
|
||||||
local mon_rad = RadIndicator{parent=mon_rect,x=2,label="",format="%13.3f",value=v.radiation,lu_colors=cpair(colors.gray,colors.gray),width=18}
|
|
||||||
-- radiation.register(u_ps, "radiation", mon_rad.update)
|
|
||||||
end
|
|
||||||
-- end
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--#endregion
|
--#endregion
|
||||||
@ -159,7 +170,7 @@ local function new_view(root)
|
|||||||
local f_rad = RadIndicator{parent=f_div,x=2,label="",format="%17.3f",lu_colors=lu_col,width=21}
|
local f_rad = RadIndicator{parent=f_div,x=2,label="",format="%17.3f",lu_colors=lu_col,width=21}
|
||||||
f_rad.register(f_ps, "radiation", f_rad.update)
|
f_rad.register(f_ps, "radiation", f_rad.update)
|
||||||
|
|
||||||
local f_mon_list = ListBox{parent=f_div,y=6,scroll_height=100,nav_fg_bg=cpair(colors.lightGray,colors.gray),nav_active=cpair(colors.white,colors.gray)}
|
new_mon_list(f_div, f_ps)
|
||||||
|
|
||||||
--#endregion
|
--#endregion
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user