From 78b0e1bf24c9f8be4f21fc5cf12e02e18fd37f0f Mon Sep 17 00:00:00 2001 From: Mikayla Date: Thu, 9 Jan 2025 23:50:47 +0000 Subject: [PATCH] #557 facility app and induction matrix updates --- pocket/ui/apps/facility.lua | 63 +++++++++++++++++++++++++++-- pocket/ui/pages/facility_matrix.lua | 54 ++++++++++++++++++++----- 2 files changed, 105 insertions(+), 12 deletions(-) diff --git a/pocket/ui/apps/facility.lua b/pocket/ui/apps/facility.lua index 076eba3..039c39b 100644 --- a/pocket/ui/apps/facility.lua +++ b/pocket/ui/apps/facility.lua @@ -85,14 +85,70 @@ local function new_view(root) end end + --#region facility overview + + local f_pane = Div{parent=page_div} + local f_div = Div{parent=f_pane,x=2,width=main.get_width()-2} + table.insert(panes, f_pane) + + local fac_page = app.new_page(nil, #panes) + fac_page.tasks = { update } + + TextBox{parent=f_div,y=1,text="Facility",alignment=ALIGN.CENTER} + + local eta = TextBox{parent=f_div,x=1,y=17,text="ETA Unknown",alignment=ALIGN.CENTER,fg_bg=cpair(colors.white,colors.gray)} + + eta.register(fac.induction_ps_tbl[1], "eta_ms", function (eta_ms) + local str, pre = "", util.trinary(eta_ms >= 0, "Full in ", "Empty in ") + + local seconds = math.abs(eta_ms) / 1000 + local minutes = seconds / 60 + local hours = minutes / 60 + local days = hours / 24 + + if math.abs(eta_ms) < 1000 or (eta_ms ~= eta_ms) then + -- really small or NaN + str = "No ETA" + elseif days < 1000 then + days = math.floor(days) + hours = math.floor(hours % 24) + minutes = math.floor(minutes % 60) + seconds = math.floor(seconds % 60) + + if days > 0 then + str = days .. "d" + elseif hours > 0 then + str = hours .. "h " .. minutes .. "m" + elseif minutes > 0 then + str = minutes .. "m " .. seconds .. "s" + elseif seconds > 0 then + str = seconds .. "s" + end + + str = pre .. str + else + local years = math.floor(days / 365.25) + + if years <= 99999999 then + str = pre .. years .. "y" + else + str = pre .. "eras" + end + end + + eta.set_value(str) + end) + + --#endregion + --#region facility annunciator local a_pane = Div{parent=page_div} local a_div = Div{parent=a_pane,x=2,width=main.get_width()-2} table.insert(panes, a_pane) - local f_annunc = app.new_page(nil, #panes) - f_annunc.tasks = { update } + local annunc_page = app.new_page(nil, #panes) + annunc_page.tasks = { update } TextBox{parent=a_div,y=1,text="Annunciator",alignment=ALIGN.CENTER} @@ -159,7 +215,8 @@ local function new_view(root) local list = { { label = " # ", tall = true, color = core.cpair(colors.black, colors.green), callback = db.nav.go_home }, - { label = "FAC", color = core.cpair(colors.black, colors.orange), callback = f_annunc.nav_to }, + { label = "FAC", color = core.cpair(colors.black, colors.orange), callback = fac_page.nav_to }, + { label = "ANN", color = core.cpair(colors.black, colors.yellow), callback = annunc_page.nav_to }, { label = "MTX", color = core.cpair(colors.black, colors.white), callback = mtx_page_nav }, { label = "SPS", color = core.cpair(colors.black, colors.purple), callback = sps_page_nav }, { label = "TNK", tall = true, color = core.cpair(colors.white, colors.gray), callback = tank_page.nav_to } diff --git a/pocket/ui/pages/facility_matrix.lua b/pocket/ui/pages/facility_matrix.lua index 1a1f42c..0eeb8a5 100644 --- a/pocket/ui/pages/facility_matrix.lua +++ b/pocket/ui/pages/facility_matrix.lua @@ -25,6 +25,13 @@ local label = style.label local lu_col = style.label_unit_pair local text_fg = style.text_fg +local basic_states = style.icon_states.basic_states +local mode_states = style.icon_states.mode_states +local red_ind_s = style.icon_states.red_ind_s +local yel_ind_s = style.icon_states.yel_ind_s +local grn_ind_s = style.icon_states.grn_ind_s +local wht_ind_s = style.icon_states.wht_ind_s + local mode_ind_s = { { color = cpair(colors.black, colors.lightGray), symbol = "-" }, { color = cpair(colors.black, colors.white), symbol = "+" } @@ -68,19 +75,19 @@ return function (app, panes, matrix_pane, ps, update) in_bar.register(ps, "last_input", function (val) in_bar.update(calc_saturation(val)) end) out_bar.register(ps, "last_output", function (val) out_bar.update(calc_saturation(val)) end) - local energy = PowerIndicator{parent=mtx_div,x=1,y=11,lu_colors=lu_col,label="Chg: ",unit=db.energy_label,format="%8.2f",value=0,width=22,fg_bg=text_fg} - local avg_chg = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",value=0,width=22,fg_bg=text_fg} - local input = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="In: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=22,fg_bg=text_fg} - local avg_in = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=22,fg_bg=text_fg} - local output = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="Out: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=22,fg_bg=text_fg} - local avg_out = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=22,fg_bg=text_fg} + local energy = PowerIndicator{parent=mtx_div,x=1,y=11,lu_colors=lu_col,label="Chg: ",unit=db.energy_label,format="%8.2f",value=0,width=21,fg_bg=text_fg} + local avg_chg = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",value=0,width=21,fg_bg=text_fg} + local input = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="In: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=21,fg_bg=text_fg} + local avg_in = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=21,fg_bg=text_fg} + local output = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="Out: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=21,fg_bg=text_fg} + local avg_out = PowerIndicator{parent=mtx_div,x=1,lu_colors=lu_col,label="\xb7Avg: ",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=21,fg_bg=text_fg} energy.register(ps, "energy", function (val) energy.update(db.energy_convert(val)) end) - avg_chg.register(fac.ps, "avg_charge", avg_chg.update) + avg_chg.register(ps, "avg_charge", avg_chg.update) input.register(ps, "last_input", function (val) input.update(db.energy_convert(val)) end) - avg_in.register(fac.ps, "avg_inflow", avg_in.update) + avg_in.register(ps, "avg_inflow", avg_in.update) output.register(ps, "last_output", function (val) output.update(db.energy_convert(val)) end) - avg_out.register(fac.ps, "avg_outflow", avg_out.update) + avg_out.register(ps, "avg_outflow", avg_out.update) local mtx_ext_div = Div{parent=matrix_pane,x=2,width=matrix_pane.get_width()-2} table.insert(panes, mtx_ext_div) @@ -93,5 +100,34 @@ return function (app, panes, matrix_pane, ps, update) TextBox{parent=mtx_ext_div,y=1,text="More Matrix Info",alignment=ALIGN.CENTER} + local chging = IconIndicator{parent=mtx_ext_div,y=3,label="Charging",states=wht_ind_s} + local dischg = IconIndicator{parent=mtx_ext_div,y=4,label="Discharging",states=wht_ind_s} + + TextBox{parent=mtx_ext_div,text="Energy Fill",x=1,y=6,width=13,fg_bg=label} + local fill = DataIndicator{parent=mtx_ext_div,x=14,y=6,lu_colors=lu_col,label="",unit="%",format="%6.2f",value=0,width=8,fg_bg=text_fg} + + chging.register(ps, "is_charging", chging.update) + dischg.register(ps, "is_discharging", dischg.update) + fill.register(ps, "energy_fill", function (x) fill.update(x * 100) end) + + local max_io = IconIndicator{parent=mtx_ext_div,y=8,label="Max I/O Rate",states=yel_ind_s} + + TextBox{parent=mtx_ext_div,text="Input Util.",x=1,y=10,width=13,fg_bg=label} + local in_util = DataIndicator{parent=mtx_ext_div,x=14,y=10,lu_colors=lu_col,label="",unit="%",format="%6.2f",value=0,width=8,fg_bg=text_fg} + TextBox{parent=mtx_ext_div,text="Output Util.",x=1,y=11,width=13,fg_bg=label} + local out_util = DataIndicator{parent=mtx_ext_div,x=14,y=11,lu_colors=lu_col,label="",unit="%",format="%6.2f",value=0,width=8,fg_bg=text_fg} + + max_io.register(ps, "at_max_io", max_io.update) + in_util.register(ps, "last_input", function (x) in_util.update(calc_saturation(x) * 100) end) + out_util.register(ps, "last_output", function (x) out_util.update(calc_saturation(x) * 100) end) + + TextBox{parent=mtx_ext_div,text="Capacity",x=1,y=13,width=13,fg_bg=label} + local capacity = PowerIndicator{parent=mtx_ext_div,y=14,lu_colors=lu_col,label="",unit=db.energy_label,format="%8.2f",value=0,width=21,fg_bg=text_fg} + TextBox{parent=mtx_ext_div,text="Maximum In/Out Rate",x=1,y=15,width=13,fg_bg=label} + local trans_cap = PowerIndicator{parent=mtx_ext_div,y=16,lu_colors=lu_col,label="",unit=db.energy_label,format="%8.2f",rate=true,value=0,width=21,fg_bg=text_fg} + + capacity.register(ps, "max_energy", function (val) capacity.update(db.energy_convert(val)) end) + trans_cap.register(ps, "transfer_cap", function (val) trans_cap.update(db.energy_convert(val)) end) + return matrix_page.nav_to end