From d1f320426c37a1db5471d95bae794779d138e99a Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 17:01:31 +0300 Subject: [PATCH 01/15] UI for massfabs --- lua/UserSync.lua | 4 + lua/aibrain.lua | 64 ++++++++-- lua/ui/game/gamemain.lua | 2 + lua/ui/game/massfabs.lua | 116 ++++++++++++++++++ .../filter-mini-panel_bmp.dds | Bin 0 -> 6176 bytes 5 files changed, 174 insertions(+), 12 deletions(-) create mode 100644 lua/ui/game/massfabs.lua create mode 100644 textures/ui/CYBRAN/game/filter-ping-panel/filter-mini-panel_bmp.dds diff --git a/lua/UserSync.lua b/lua/UserSync.lua index febd04d0de..28bc8e09f4 100644 --- a/lua/UserSync.lua +++ b/lua/UserSync.lua @@ -142,4 +142,8 @@ function OnSync() if Sync.LobbyOptions then import('/lua/ui/game/gamemain.lua').LobbyOptions = table.deepcopy(Sync.LobbyOptions) end + + if Sync.MassFabs then + import('/lua/ui/game/massfabs.lua').Update(table.deepcopy(Sync.MassFabs)) + end end diff --git a/lua/aibrain.lua b/lua/aibrain.lua index 71da5fcc44..e77ff14669 100644 --- a/lua/aibrain.lua +++ b/lua/aibrain.lua @@ -54,6 +54,12 @@ AIBrain = Class(moho.aibrain_methods) { self:CreateBrainShared(planName) self.BrainType = 'Human' + -- for mass fabs tracking + self.totalEnergyConsumed = 0 + self.totalEnergyRequired = 0 + + self.totalMassProduced = 0 + -- human-only behavior self.EnergyExcessThread = ForkThread(self.ToggleEnergyExcessUnitsThread, self) end, @@ -333,7 +339,10 @@ AIBrain = Class(moho.aibrain_methods) { -- @param unit The unit to keep track of AddEnabledEnergyExcessUnit = function (self, unit) self.EnergyExcessUnitsEnabled[unit.EntityId] = unit - self.EnergyExcessUnitsDisabled[unit.EntityId] = nil + self.EnergyExcessUnitsDisabled[unit.EntityId] = nil + local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + self.totalEnergyConsumed = self.totalEnergyConsumed + energyRequired + self.totalMassProduced = self.totalMassProduced + unit.Blueprint.Economy.ProductionPerSecondMass end, --- Adds a unit that is enabled / disabled depending on how much energy storage we have. The unit starts disabled @@ -341,15 +350,22 @@ AIBrain = Class(moho.aibrain_methods) { -- @param unit The unit to keep track of AddDisabledEnergyExcessUnit = function (self, unit) self.EnergyExcessUnitsEnabled[unit.EntityId] = nil - self.EnergyExcessUnitsDisabled[unit.EntityId] = unit + self.EnergyExcessUnitsDisabled[unit.EntityId] = unit + local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + self.totalEnergyRequired = self.totalEnergyRequired + energyRequired + self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass end, --- Removes a unit that is enabled / disabled depending on how much energy storage we have -- @param self The brain itself -- @param unit The unit to forget about RemoveEnergyExcessUnit = function (self, unit) - self.EnergyExcessUnitsEnabled[unit.EntityId] = nil - self.EnergyExcessUnitsDisabled[unit.EntityId] = nil + self.EnergyExcessUnitsEnabled[unit.EntityId] = nil + self.EnergyExcessUnitsDisabled[unit.EntityId] = nil + local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired + self.totalEnergyRequired = self.totalEnergyRequired - energyRequired + self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass end, --- A continious thread that across the life span of the brain. Is the heart and sole of the enabling and disabling of units that are designed to eliminate excess energy. @@ -369,7 +385,11 @@ AIBrain = Class(moho.aibrain_methods) { -- localize scope for better performance local pcall = pcall + local TableSize = table.getsize local ok, msg + + local energyRequired + local CoroutineYield = CoroutineYield local EnergyExcessUnitsDisabled = self.EnergyExcessUnitsDisabled local EnergyExcessUnitsEnabled = self.EnergyExcessUnitsEnabled @@ -386,10 +406,16 @@ AIBrain = Class(moho.aibrain_methods) { for id, unit in EnergyExcessUnitsEnabled do if not unit:BeenDestroyed() then - -- update internal state - EnergyExcessUnitsDisabled[unit.EntityId] = unit - EnergyExcessUnitsEnabled[unit.EntityId] = nil + energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired + self.totalEnergyRequired = self.totalEnergyRequired + energyRequired + self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass + + -- update internal state + EnergyExcessUnitsDisabled[id] = unit + EnergyExcessUnitsEnabled[id] = nil + -- try to disable unit ok, msg = pcall(ProtectedOnNoExcessEnergy, unit) @@ -408,11 +434,17 @@ AIBrain = Class(moho.aibrain_methods) { -- while we have units to retrieve for id, unit in EnergyExcessUnitsDisabled do if not unit:BeenDestroyed() then - if unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy < energyTrend then - + energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + if energyRequired < energyTrend then + + + self.totalEnergyConsumed = self.totalEnergyConsumed + energyRequired + self.totalEnergyRequired = self.totalEnergyRequired - energyRequired + self.totalMassProduced = self.totalMassProduced + unit.Blueprint.Economy.ProductionPerSecondMass + -- update internal state - EnergyExcessUnitsDisabled[unit.EntityId] = nil - EnergyExcessUnitsEnabled[unit.EntityId] = unit + EnergyExcessUnitsDisabled[id] = nil + EnergyExcessUnitsEnabled[id] = unit -- try to enable unit ok, msg = pcall(ProtectedOnExcessEnergy, unit) @@ -427,7 +459,15 @@ AIBrain = Class(moho.aibrain_methods) { end end end - + if self:GetArmyIndex() == GetFocusArmy() then + Sync.MassFabs = { + on = TableSize(EnergyExcessUnitsEnabled), + off = TableSize(EnergyExcessUnitsDisabled), + totalEnergyConsumed = self.totalEnergyConsumed, + totalEnergyRequired = self.totalEnergyRequired, + totalMassProduced = self.totalMassProduced + } + end CoroutineYield(1) end end, diff --git a/lua/ui/game/gamemain.lua b/lua/ui/game/gamemain.lua index 73043d16f9..0b3782d117 100644 --- a/lua/ui/game/gamemain.lua +++ b/lua/ui/game/gamemain.lua @@ -232,6 +232,8 @@ function CreateUI(isReplay) mfdControl = import('/lua/ui/game/multifunction.lua').Create(controlClusterGroup) controls.mfd = mfdControl + controls.mfp = import('/lua/ui/game/massfabs.lua').Create(statusClusterGroup) + if not isReplay then ordersControl = import('/lua/ui/game/orders.lua').SetupOrdersControl(controlClusterGroup, mfdControl) controls.ordersControl = ordersControl diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua new file mode 100644 index 0000000000..bfcf797a89 --- /dev/null +++ b/lua/ui/game/massfabs.lua @@ -0,0 +1,116 @@ +local UIUtil = import("/lua/ui/uiutil.lua") +local LayoutHelpers = import("/lua/maui/layouthelpers.lua") +local Bitmap = import("/lua/maui/bitmap.lua").Bitmap +local Group = import("/lua/maui/group.lua").Group +local Dragger = import('/lua/maui/dragger.lua').Dragger +local Prefs = import('/lua/user/prefs.lua') + +local panel + +function Create(parent) + panel = MassFabPanel(parent) + + return panel +end + +function Update(data) + if not IsDestroyed(panel) then + panel:Update(data) + end +end + +MassFabPanel = Class(Group) { + __init = function(self, parent) + Group.__init(self, parent) + self._panel = Bitmap(self) + self._leftBrace = Bitmap(self) + self._rightBrace = Bitmap(self) + self._activeCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) + self._inactiveCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) + self._energyRequiredText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) + self._energyConsumedText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) + self._massProducedText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) + self:_Layout() + local pos = self:_LoadPosition() + LayoutHelpers.AtLeftTopIn(self, parent, pos.left, 3) + end, + + _Layout = function(self) + self._panel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-mini-panel_bmp.dds")) + self._leftBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-l_bmp.dds")) + self._rightBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) + + self._panel:DisableHitTest() + self._leftBrace:DisableHitTest() + self._rightBrace:DisableHitTest() + + self.Height:Set(self._panel.Height) + self.Width:Set(self._panel.Width) + -- self._leftBrace.Width:Set(self._leftBrace.Width() / 2.5) + -- self._rightBrace.Width:Set(self._rightBrace.Width() / 2.5) + + LayoutHelpers.FillParent(self._panel, self) + + LayoutHelpers.AnchorToLeft(self._leftBrace, self, -11) + LayoutHelpers.AtTopIn(self._leftBrace, self) + + LayoutHelpers.AnchorToRight(self._rightBrace, self, -12) + LayoutHelpers.AtTopIn(self._rightBrace, self) + + LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 5) + LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 5) + + LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 10, 5) + LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 10, 5) + + LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText) + self._massProducedText.Right:Set(self._energyConsumedText.Right) + + end, + + Update = function(self, data) + if data.on == 0 and data.off == 0 then + self:Hide() + return + end + self:Show() + self._activeCountText:SetText(tostring(data.on)) + self._inactiveCountText:SetText(tostring(data.off)) + self._energyRequiredText:SetText(tostring(data.totalEnergyRequired)) + self._energyConsumedText:SetText(tostring(data.totalEnergyConsumed)) + self._massProducedText:SetText(tostring(data.totalMassProduced)) + end, + + HandleEvent = function(self, event) + if event.Type == 'ButtonPress' and event.Modifiers.Middle then + local drag = Dragger() + local offX = event.MouseX - self.Left() + drag.OnMove = function(dragself, x, y) + self.Left:Set(x - offX) + GetCursor():SetTexture(UIUtil.GetCursor('W_E')) + end + drag.OnRelease = function(dragself) + self:_SavePosition() + GetCursor():Reset() + drag:Destroy() + end + PostDragger(self:GetRootFrame(), event.KeyCode, drag) + return true + end + return false + end, + + _LoadPosition = function(self) + return Prefs.GetFromCurrentProfile('MassFabsPanelPos') or { + left = 500, + } + end, + + _SavePosition = function(self) + Prefs.SetToCurrentProfile("MassFabsPanelPos", { + left = self.Left(), + }) + end + +} + diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-mini-panel_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-mini-panel_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..34ebc1fbc8161decf097095e7ab0203995bbd824 GIT binary patch literal 6176 zcmeI0Z%i9y9LImHfE{F6w~Ew3O{oV25g9f9S>muI&Fq;04RCAY2-Lbnj3eS+lx`T( zQ4=xhR_dQ^sdLS`7i6wUO>ilh3neyL`wnAfj5ArqyJfF7!^R2-JAc>f(?84R!03xM zdvY!L-nHEGeER+UxyNAWQoj!XkIH3W#J`>R@>Sp)4hgJr^^8Koc=S6)7=sDU=4G{e^&{BXP z>d1uf`8?HaIRBt9|3#or)k>c`MAnz_m$<&QYtf%yCi#6`R2++h7^b}ZDlGk}ca;RV zu+0L_xFfVzd475ICgmSf%YBQz<`4Q{_8fnb!mBdi87ANK;XaSm%b#4aS;hG$_Hx#t zDerG=NUbbwnqEyn+o-^o3#*kYCLMZ5j9;?e`)LyIw;|@%e`xRLqW-bc(YST0$8ur$ z)=zbQceOn3=IQUTigj ztmX@bS$O06pn3Y}c{U_bmNo!?p+H-mS0SI#)JQu5Hww}cU{pl3^`8J)) zv)!1>v+%TY^1CdaZX@#CKCbYm{JCD9e2t_shzH^Mrar~fBF6hpJ@U+o_d?W?to41Y z7yWtKP2yejC%49U=QT;5Ak-tYC-5yD^HhfvieqZI*=z>>Wud;I{t<-sqF^;Qn_AzF zCGYpKGUNde2n2wKE^SShloE6@eWvO?;c<68T2ZI{=@#PMqD6o1*VMWCMSs4e&5id$ z)Z;H4PuE+QR`e&vyKEzlxm5mKt3Q{YBs?R>1fHe_A>O5Ru0fIKwg#;4S^ZI=>yd`$ z&B^@f7J2@@PM(WZX`ViT=WA4or$gjfPvz#%Leo!ETXderj6V-jVm)GmAQSqf_42&E zHHT+>r%J3xerJ-WZ-j z)1K1@hAYsIu&{8U=}P@nV(5m+#)fRxjkv{k1zM%G!}C;eELq>XNj)duCz?EOwgT=R zA)lfc7oEnFe}ViRk#8h47zVgpKGMmb{q$Qlq~CVX2k_Qo^gO?>3~=`a7~Jhk>Vf>x zb~(;}pne1HF3B$8{8?&g_~^4UhgjVIX+(Z3{BU?jk{?!Noex(j^ot&ftoMGJ@FdrH vo{M6834|}vJj`B|;Qz~LYJ+f#{MBqp?)(*-TC&!2H;=XJhx^I@#eVwVo%tf8 literal 0 HcmV?d00001 From 0555d2a5c4fd0dfd36c0d4ef0b206d3c82198854 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 17:50:02 +0300 Subject: [PATCH 02/15] colors and some logic --- lua/ui/game/massfabs.lua | 41 ++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index bfcf797a89..2c4f27c586 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -2,14 +2,14 @@ local UIUtil = import("/lua/ui/uiutil.lua") local LayoutHelpers = import("/lua/maui/layouthelpers.lua") local Bitmap = import("/lua/maui/bitmap.lua").Bitmap local Group = import("/lua/maui/group.lua").Group -local Dragger = import('/lua/maui/dragger.lua').Dragger -local Prefs = import('/lua/user/prefs.lua') +local Dragger = import("/lua/maui/dragger.lua").Dragger +local Prefs = import("/lua/user/prefs.lua") local panel function Create(parent) panel = MassFabPanel(parent) - + return panel end @@ -22,14 +22,15 @@ end MassFabPanel = Class(Group) { __init = function(self, parent) Group.__init(self, parent) + self._parent = parent self._panel = Bitmap(self) self._leftBrace = Bitmap(self) self._rightBrace = Bitmap(self) self._activeCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) self._inactiveCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) - self._energyRequiredText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) - self._energyConsumedText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) - self._massProducedText = UIUtil.CreateText(self, "0", 12, UIUtil.bodyFont) + self._energyRequiredText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) + self._energyConsumedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) + self._massProducedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) self:_Layout() local pos = self:_LoadPosition() LayoutHelpers.AtLeftTopIn(self, parent, pos.left, 3) @@ -57,15 +58,19 @@ MassFabPanel = Class(Group) { LayoutHelpers.AnchorToRight(self._rightBrace, self, -12) LayoutHelpers.AtTopIn(self._rightBrace, self) - LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 5) - LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 5) + LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 9) + LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 9) - LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 10, 5) - LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 10, 5) + LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 12, 9) + LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 12, 9) LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText) self._massProducedText.Right:Set(self._energyConsumedText.Right) + self._energyRequiredText:SetColor("fff8c000") + self._energyConsumedText:SetColor("fff8c000") + self._massProducedText:SetColor("ffb7e75f") + end, Update = function(self, data) @@ -77,17 +82,17 @@ MassFabPanel = Class(Group) { self._activeCountText:SetText(tostring(data.on)) self._inactiveCountText:SetText(tostring(data.off)) self._energyRequiredText:SetText(tostring(data.totalEnergyRequired)) - self._energyConsumedText:SetText(tostring(data.totalEnergyConsumed)) - self._massProducedText:SetText(tostring(data.totalMassProduced)) + self._energyConsumedText:SetText(tostring(-data.totalEnergyConsumed)) + self._massProducedText:SetText("+" .. tostring(data.totalMassProduced)) end, HandleEvent = function(self, event) - if event.Type == 'ButtonPress' and event.Modifiers.Middle then + if event.Type == "ButtonPress" and event.Modifiers.Middle then local drag = Dragger() local offX = event.MouseX - self.Left() drag.OnMove = function(dragself, x, y) - self.Left:Set(x - offX) - GetCursor():SetTexture(UIUtil.GetCursor('W_E')) + self.Left:Set(math.min(math.max(x - offX, self._parent.Left()), self._parent.Right() - self.Width())) + GetCursor():SetTexture(UIUtil.GetCursor("W_E")) end drag.OnRelease = function(dragself) self:_SavePosition() @@ -101,14 +106,14 @@ MassFabPanel = Class(Group) { end, _LoadPosition = function(self) - return Prefs.GetFromCurrentProfile('MassFabsPanelPos') or { - left = 500, + return Prefs.GetFromCurrentProfile("MassFabsPanelPos") or { + left = 500 } end, _SavePosition = function(self) Prefs.SetToCurrentProfile("MassFabsPanelPos", { - left = self.Left(), + left = self.Left() }) end From 3067d7e8b72307c12076959bb718aecab72487f2 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 19:42:03 +0300 Subject: [PATCH 03/15] textures for panel --- lua/ui/game/massfabs.lua | 2 +- .../filter-ping-panel01_bmp.dds | Bin 0 -> 5312 bytes ...panel_bmp.dds => filter-ping-panel01_bmp.dds} | Bin .../filter-ping-panel01_bmp.dds | Bin 0 -> 5312 bytes .../filter-ping-panel01_bmp.dds | Bin 0 -> 5312 bytes 5 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds rename textures/ui/CYBRAN/game/filter-ping-panel/{filter-mini-panel_bmp.dds => filter-ping-panel01_bmp.dds} (100%) create mode 100644 textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_bmp.dds create mode 100644 textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_bmp.dds diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index 2c4f27c586..d1aeb656d4 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -37,7 +37,7 @@ MassFabPanel = Class(Group) { end, _Layout = function(self) - self._panel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-mini-panel_bmp.dds")) + self._panel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_bmp.dds")) self._leftBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-l_bmp.dds")) self._rightBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) diff --git a/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..e110c3b89d0d1b5be80613843bd72f10f1c88b2a GIT binary patch literal 5312 zcmeI0VN6?96vs~sbA6Bv9F}%*6^4}x4Z(G(nGh6c2YqXR;rcADbuFVshF;Tb$wszj z83SixG!v3$A=?yPW~P1sOdy(>5HZ_qqRBq2$xMtc6a<2cLPjt%<$3OVy$B1=e&i*) zx$iaq*EYH5m-9d8zH7Jd%MSy<#%v8Z@RMGZPv8xQ3a?teZf}X*zE1^d(zA!%^6|@b zyzEUb>zcpIUh65}Ys4wy_#6koBmFQQ@5+4Am&DgyAPBKVHQ(E@A)O=^KQ@CX`hEmn z4bYFenrh((Ne?PUi@;l6-11djVsUIIu0NKb@iwSUiN$6qK9(OWKBigz%mUYA+n(FT zlU7^C>G6ZtgZiuY7viQVXQ!tBuagJ5eWz}Xh#wh^#rXhBf^fpmiT3mm+Gr2x# zy`zFKa&R(q?CbMCpTT%CN{3^jrrNS&+t_D3sj;auxlN1*i-&2(=kBxLcD#4JeUK-U zWg#3VJXcD^BVU@n+YZp=^?H3CsO&}L)Tz{uO4Elu$L3B%`?|Zf0$7J5k@4dL`i8me ztaf5AF2TWgu=to}e5RXJhMPF~;AM%=Tf+3&rTJ1*7xF+l zBs`9_Sc~J=BM1lQA(EaFpWpXa8E)a^$u)^jTiuoSDW6M8KCXHgBqJA>`6x~M>XDCl zF06iB=JN|-e2l5_d95n%9!}=3mRgw)^%u>bddF%$O4F}89^lg^^Fe=EQt{W!GM~rF zY5nn3qrXB0rg)N1O%?K4;V-4>#;T*uPl}On0oEVtuZgx7dU9~KlR!#*{&qL!Ei~pi zcv5IXJn&Ox!#wss;DVJJx7!W3E9m}+YQXj{C{LI3A5QR_VI}|&i^U+`LiwnGCzmN7 zEX(r#kHyC{tIv~e=C4-DCse;v&L3m3?5|yx)&5eNwpoajKh??niF;Z8Tq{e(UsKJU zIlFN3=&i$hf-xC{0_9wEpyXX+M_u>}7mvY^m^>^e{eC&XC{luXqaiVE#;& z$@%lNVYR=Mrgs=Hf5b?D_8W=M9>(WPN_-}o7@v(U#N&TnKb<9p)TTmPzSQ5h=~nL# zm8Oez$Y(U-rS(*+wOZr5Wj;m0Po0}Mj$`%szxL0f_7xJ-8SwqWfqd@VsnvzYOvg_b z-f&iGyxyjc+#I>Yv;QkiTeZ=?3(<4>RvW5H>N-v=&j?dS*aZ{g>~H#2#Mt63x52XN(}CYfMzVZX=I zk@cp1biKsPIb8V~VF2J8T{Lm^sC)AaI&9dih6VLA^(9?hg*=IRximbQNcMLY57Vr_ zrvd+geEv}sr2Cscp*uGV`;{p2gzCFsLN-1K{dW_tXDlt*N5i|Y<)|r3t(Ll XPb)Z*=U;L>|MGZHKRO><>wNGZ*U72k literal 0 HcmV?d00001 diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-mini-panel_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds similarity index 100% rename from textures/ui/CYBRAN/game/filter-ping-panel/filter-mini-panel_bmp.dds rename to textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds diff --git a/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..5e7733c5a7295a9fc51c0acb2be1d688a930e8ca GIT binary patch literal 5312 zcmeI0e@I(b6vvOLoB5$LYy1W3)XptyowGVJ6lSSEI*pR(Y#&KYrbaE3b&*uNR;HA; zD!7rdX$`K_ZEjTPtWq5)8>Pq`1OnZV(hN3+E3^KXQ=dx5Ysc)}xp}!(!FBnw4|+N8 zg>PPXocrN>?zy@7`3DnQ03bvyheG_M*Zv5+;RwR3KyN5b&Cfp=1Ur1+J?fT-4}3mCM+VjNOjro@| zf3W#5&HVExC_3|!qUx5G$DGQu6V>h`G1vb7Yg*ed`lY(>-l>YV%G0;T$mhum)k$)A zz;UN5VUlW3IcoCw=`;TPeEE)Z+*tLD)7MF3{2)mmwR{auKhRw}JWsp$sG z$<=1hg|?7f0Ntp|_51r*V@g)l;RYeKCKU(c!RE&_<1=p#il4*?<$r8OJdS#9{-XzL zX<9A55Aj&bIrNMD;szh7=~~Wivy8i1@^=G7;`pr*;b6QXES3ktXR$md{uV|k&$m)O zb%x95D4zoK59M>n2*dWVPdE5TO;;L`59!(9Gi4X~7=*BZ{ImF0PQqP`P(Hkk@~J5h z`PBLO7z?-Zk(xeSDDpYt_s>)v<6}4)h=2ar;Ir3B`B-wXz8t%>9c7|_-pD~do9aty z`pujZwpik7X-^mH>rP!(rv}3y)HepghnPDP?sp~xsf1(QhzH2)C2QFKKqXYmO(qj+ zx<8VEQUGlKob+_I{xh2Y!g3IJy?Z1?3A%pi^o+<`#bGl)104=Q0feX&uj(bqv@x7@{+~=KG-Po z*`2&~{gIm1CDZk%(^^oJDDo*4`Ap81I2AZpJ^k1IXU4+#93P^5vY$gf=%27Qk;6z` zdQUX+8FyLfdKww2(@h^>e0KH+!e=S`Y5QbI>|m&n>2_4zzI`C7IYZlUcHgu8Hnr7k zc0_5!C7$_DYC1F0bD`JM6RYmek-J89sXrIs{%7RwgqnYENTEG9t^m<9kWRNGacLCrme`fXo+DT)ZU zO-}Q>8SPoWcH;0euAkglsYv6Wpcjnk-?zS~6n>csQ{mBszrVBjFwOe=L!CK?+Z(tC z?cFBqSA>M}UK0R;WCeW%A!?pJmzrJxO-Gh5f0a<_1<*pF|NP6dyiRCU;KNPxd#InB Jk8O88_%DiP$O!-d literal 0 HcmV?d00001 diff --git a/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..11d7009a57633ed54036f59e38b24ff984e8f873 GIT binary patch literal 5312 zcmeI0ZA@Eb6vqz*wG>>tKpEpj3wGedZW2Qx61T2vWJMba<*uE~@){FuSa70i6Id9c zE@r4{){*csw~!G9Y1j<+L#LN5nh;{5L{dM{C3XyzL}P`C9pHF8_g)@e5^(jCG})8q zw)ywoHs|^Ef6jUC)$7fwMgVw7A%#Qu&L7%De8CZgN1?%J(&+W(D2Nt5`?nVro{Ygm zZ!OE)@H)jtpBh|hoCHT74uJbQJRZrtz%UFEcy*-_!fW5$T`)`aX!Y+CHFFnQaJ_le;j!G!GR7o-VDtF$53VR)rF>6^_A8h#f3XIOY;#JW68(r zcyopn2*XhQTj|!&1Gb;)+ef>n6b)5U$=)H~JVbwf>W1lY@$7Nr5pdXS)r{5XM;_`7fTI?MIl_R} zg?|a3xqN=9;_{SK8Cqy`n~?daOaOfd$knt_~sz`>5E-o8#>r3sa7JB zQ66+XRIl(!xt@Fmr zkqg>|^0U1EqwAyfh}P$YN2q@i+W7n`%@O_MsS*8?o3lQ@B28;^#Qb{vSvrLo=?3}f&N+3zamXPv7NY&j=Ixsw`NG)?xDQNLXnS`W!jKW+`a10 z-!PJVI`?d{pL2RD11+*|6Hb=y@0b7ZjOUkJN1z$9;z^J+wd^ZvJ0N8&HitZJ{r$yO z(>vp_^B6i3zq6~b-@135*aJ6THl+b%mj?-w~P0Mx`AW=UNfSUt!KpN>?oXzc%6KzB<= z?_S+A66^HD>>Q8*+=4wNEiv+aer`vvMkcv-4ji-mdYv8s(j8BM{@}TjqS+5ZP=KB8g Jv5lS&{sVwW0X_f# literal 0 HcmV?d00001 From bc5820a9367d0c3ace0c0a2bfaa41e0e6a8ddb56 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 20:05:39 +0300 Subject: [PATCH 04/15] layout --- lua/ui/game/massfabs.lua | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index d1aeb656d4..f5ae9f92fa 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -26,19 +26,19 @@ MassFabPanel = Class(Group) { self._panel = Bitmap(self) self._leftBrace = Bitmap(self) self._rightBrace = Bitmap(self) - self._activeCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) - self._inactiveCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont) - self._energyRequiredText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) - self._energyConsumedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) - self._massProducedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont) + self._activeCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont, true) + self._inactiveCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont, true) + self._energyRequiredText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont, true) + self._energyConsumedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont, true) + self._massProducedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont, true) self:_Layout() local pos = self:_LoadPosition() - LayoutHelpers.AtLeftTopIn(self, parent, pos.left, 3) + LayoutHelpers.AtLeftTopIn(self, parent, pos.left, 4) end, _Layout = function(self) self._panel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_bmp.dds")) - self._leftBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-l_bmp.dds")) + self._leftBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) self._rightBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) self._panel:DisableHitTest() @@ -52,25 +52,31 @@ MassFabPanel = Class(Group) { LayoutHelpers.FillParent(self._panel, self) - LayoutHelpers.AnchorToLeft(self._leftBrace, self, -11) + LayoutHelpers.AtLeftIn(self._leftBrace, self, 11) LayoutHelpers.AtTopIn(self._leftBrace, self) - LayoutHelpers.AnchorToRight(self._rightBrace, self, -12) + self._leftBrace.Right:Set(function() + return self._leftBrace.Left() - self._leftBrace.Width() + end) + + LayoutHelpers.AnchorToRight(self._rightBrace, self, -11) LayoutHelpers.AtTopIn(self._rightBrace, self) - LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 9) - LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 9) + LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 10) + LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 10) - LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 12, 9) - LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 12, 9) + LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 12, 8) + LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 12, 8) - LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText) + LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText, -1) self._massProducedText.Right:Set(self._energyConsumedText.Right) self._energyRequiredText:SetColor("fff8c000") self._energyConsumedText:SetColor("fff8c000") self._massProducedText:SetColor("ffb7e75f") + self._activeCountText:SetColor("ffffffff") + self._inactiveCountText:SetColor("ffffffff") end, Update = function(self, data) From d233a5adf4c36b00365439ab78b40d424dd3d6dd Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 20:36:16 +0300 Subject: [PATCH 05/15] collapse feature --- lua/ui/game/massfabs.lua | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index f5ae9f92fa..24dade0c79 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -3,6 +3,7 @@ local LayoutHelpers = import("/lua/maui/layouthelpers.lua") local Bitmap = import("/lua/maui/bitmap.lua").Bitmap local Group = import("/lua/maui/group.lua").Group local Dragger = import("/lua/maui/dragger.lua").Dragger +local Checkbox = import("/lua/maui/checkbox.lua").Checkbox local Prefs = import("/lua/user/prefs.lua") local panel @@ -23,6 +24,7 @@ MassFabPanel = Class(Group) { __init = function(self, parent) Group.__init(self, parent) self._parent = parent + self._collapseArrow = Checkbox(parent) self._panel = Bitmap(self) self._leftBrace = Bitmap(self) self._rightBrace = Bitmap(self) @@ -32,6 +34,7 @@ MassFabPanel = Class(Group) { self._energyConsumedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont, true) self._massProducedText = UIUtil.CreateText(self, "0", 10, UIUtil.bodyFont, true) self:_Layout() + self:_Logic() local pos = self:_LoadPosition() LayoutHelpers.AtLeftTopIn(self, parent, pos.left, 4) end, @@ -45,6 +48,18 @@ MassFabPanel = Class(Group) { self._leftBrace:DisableHitTest() self._rightBrace:DisableHitTest() + self._collapseArrow:SetTexture(UIUtil.SkinnableFile("/game/tab-t-btn/tab-close_btn_up.dds")) + self._collapseArrow:SetNewTextures(UIUtil.SkinnableFile("/game/tab-t-btn/tab-close_btn_up.dds"), + UIUtil.SkinnableFile("/game/tab-t-btn/tab-open_btn_up.dds"), + UIUtil.SkinnableFile("/game/tab-t-btn/tab-close_btn_over.dds"), + UIUtil.SkinnableFile("/game/tab-t-btn/tab-open_btn_over.dds"), + UIUtil.SkinnableFile("/game/tab-t-btn/tab-close_btn_dis.dds"), + UIUtil.SkinnableFile("/game/tab-t-btn/tab-open_btn_dis.dds")) + LayoutHelpers.AtTopIn(self._collapseArrow, self._parent, -3) + LayoutHelpers.AtHorizontalCenterIn(self._collapseArrow, self) + + LayoutHelpers.DepthOverParent(self._collapseArrow, self, 10) + self.Height:Set(self._panel.Height) self.Width:Set(self._panel.Width) -- self._leftBrace.Width:Set(self._leftBrace.Width() / 2.5) @@ -79,6 +94,62 @@ MassFabPanel = Class(Group) { self._inactiveCountText:SetColor("ffffffff") end, + _Logic = function(self) + -- self._collapseArrow.OnHide = function(control, hidden) + -- if import('/lua/ui/game/gamemain.lua').gameUIHidden and not hidden then + -- control:Hide() + -- return + -- end + -- if control:IsHidden() then + -- control:Show() + -- end + -- end + self._collapseArrow.OnCheck = function(_, checked) + if UIUtil.GetAnimationPrefs() then + if checked or self:IsHidden() then + PlaySound(Sound({ + Cue = "UI_Score_Window_Open", + Bank = "Interface" + })) + self:Show() + self:SetNeedsFrameUpdate(true) + self.OnFrame = function(control, delta) + local newTop = control.Top() + (500 * delta) + if newTop > control._parent.Top() then + newTop = control._parent.Top() + control:SetNeedsFrameUpdate(false) + end + control.Top:Set(newTop + 4) + end + else + PlaySound(Sound({ + Cue = "UI_Score_Window_Close", + Bank = "Interface" + })) + + self:SetNeedsFrameUpdate(true) + self.OnFrame = function(control, delta) + local newTop = control.Top() - (500 * delta) + if newTop < control._parent.Top() - control.Height() then + newTop = control._parent.Top() - control.Height() + control:Hide() + control:SetNeedsFrameUpdate(false) + end + control.Top:Set(newTop) + end + end + else + if checked or self:IsHidden() then + self:Show() + self._collapseArrow:SetCheck(false, true) + else + self:Hide() + self._collapseArrow:SetCheck(true, true) + end + end + end + end, + Update = function(self, data) if data.on == 0 and data.off == 0 then self:Hide() From d19726be7e358dcbfbf630db0f4b3c7e2283b16a Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 21:01:49 +0300 Subject: [PATCH 06/15] fix logic --- lua/aibrain.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lua/aibrain.lua b/lua/aibrain.lua index e77ff14669..aa2f78dd1d 100644 --- a/lua/aibrain.lua +++ b/lua/aibrain.lua @@ -353,19 +353,21 @@ AIBrain = Class(moho.aibrain_methods) { self.EnergyExcessUnitsDisabled[unit.EntityId] = unit local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy self.totalEnergyRequired = self.totalEnergyRequired + energyRequired - self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass end, --- Removes a unit that is enabled / disabled depending on how much energy storage we have -- @param self The brain itself -- @param unit The unit to forget about RemoveEnergyExcessUnit = function (self, unit) - self.EnergyExcessUnitsEnabled[unit.EntityId] = nil - self.EnergyExcessUnitsDisabled[unit.EntityId] = nil local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy - self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired - self.totalEnergyRequired = self.totalEnergyRequired - energyRequired - self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass + if self.EnergyExcessUnitsEnabled[unit.EntityId] then + self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired + self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass + self.EnergyExcessUnitsEnabled[unit.EntityId] = nil + elseif self.EnergyExcessUnitsDisabled[unit.EntityId] then + self.totalEnergyRequired = self.totalEnergyRequired - energyRequired + self.EnergyExcessUnitsDisabled[unit.EntityId] = nil + end end, --- A continious thread that across the life span of the brain. Is the heart and sole of the enabling and disabling of units that are designed to eliminate excess energy. From ffec36e36818b044ef0de6d2e947bb93a7ae93ba Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 21:28:01 +0300 Subject: [PATCH 07/15] tooltips --- loc/RU/strings_db.lua | 11 +++++++++++ loc/US/strings_db.lua | 12 ++++++++++++ lua/ui/game/massfabs.lua | 21 ++++++++++----------- lua/ui/help/tooltips.lua | 25 +++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 11 deletions(-) diff --git a/loc/RU/strings_db.lua b/loc/RU/strings_db.lua index 28f11c4ca7..f452b1e54b 100644 --- a/loc/RU/strings_db.lua +++ b/loc/RU/strings_db.lua @@ -8670,6 +8670,17 @@ tooltipui0704="Выберите название для новой конфиг tooltipui0705="Настройки" tooltipui0706="Это окно позволяет Вам сохранить текущую конфигурацию игры и загрузить ее позже.\n\nЧтобы сохранить конфигурацию нажмите на кнопку \"Создать\" в этом окне. Вы можете загрузить сохранённую конфигурацию путём её выбора и нажимания \"Загрузить\".\n\nКнопка \"Сохранить\" перезапишет выбранную существующую конфигурацию на текущую." +tooltipui1000="Mass Income" +tooltipui1001="Mass being generated with mass fabricators per second" +tooltipui1002="Energy Expense" +tooltipui1003="Energy being spent per with mass fabricators second" +tooltipui1004="Active mass fabricators" +tooltipui1005="Amount of active mass fabricators" +tooltipui1006="Inactive mass fabricators" +tooltipui1007="Amount of inactive mass fabricators" +tooltipui1008="Energy Required" +tooltipui1009="Amount of required energy for mass fabricators to work" + LOADING = "Загрузка..." sorian_0001="ИИ: Сориан" sorian_0002="Сбалансированный ИИ. Хорош для 20x20+ карт." diff --git a/loc/US/strings_db.lua b/loc/US/strings_db.lua index 362a6d3e71..e12094517f 100644 --- a/loc/US/strings_db.lua +++ b/loc/US/strings_db.lua @@ -7559,6 +7559,18 @@ tooltipui0640 = "Removes units which hover" tooltipui0696 = "Rehost" tooltipui0800 = "Pin Minimap Window" tooltipui0801 = "Locks the position and layout of the minimap window" + +tooltipui1000="Mass Income" +tooltipui1001="Mass being generated with mass fabricators per second" +tooltipui1002="Energy Expense" +tooltipui1003="Energy being spent with mass fabricators per second" +tooltipui1004="Active mass fabricators" +tooltipui1005="Amount of active mass fabricators" +tooltipui1006="Inactive mass fabricators" +tooltipui1007="Amount of inactive mass fabricators" +tooltipui1008="Energy Required" +tooltipui1009="Amount of required energy for mass fabricators to work" + LOADING = "Loading..." lobui_0427 = "FAF Game Lobby" lobui_0428 = "Kick Player" diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index 24dade0c79..1e23f35893 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -5,6 +5,7 @@ local Group = import("/lua/maui/group.lua").Group local Dragger = import("/lua/maui/dragger.lua").Dragger local Checkbox = import("/lua/maui/checkbox.lua").Checkbox local Prefs = import("/lua/user/prefs.lua") +local Tooltip = import('/lua/ui/game/tooltip.lua') local panel @@ -86,6 +87,13 @@ MassFabPanel = Class(Group) { LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText, -1) self._massProducedText.Right:Set(self._energyConsumedText.Right) + + Tooltip.AddControlTooltip(self._energyRequiredText, "mf_energy_required") + Tooltip.AddControlTooltip(self._energyConsumedText, "mf_energy_expense_display") + Tooltip.AddControlTooltip(self._massProducedText, "mf_mass_income_display") + Tooltip.AddControlTooltip(self._activeCountText, "mf_active_amount") + Tooltip.AddControlTooltip(self._inactiveCountText, "mf_inactive_amount") + self._energyRequiredText:SetColor("fff8c000") self._energyConsumedText:SetColor("fff8c000") self._massProducedText:SetColor("ffb7e75f") @@ -95,18 +103,9 @@ MassFabPanel = Class(Group) { end, _Logic = function(self) - -- self._collapseArrow.OnHide = function(control, hidden) - -- if import('/lua/ui/game/gamemain.lua').gameUIHidden and not hidden then - -- control:Hide() - -- return - -- end - -- if control:IsHidden() then - -- control:Show() - -- end - -- end self._collapseArrow.OnCheck = function(_, checked) if UIUtil.GetAnimationPrefs() then - if checked or self:IsHidden() then + if not checked or self:IsHidden() then PlaySound(Sound({ Cue = "UI_Score_Window_Open", Bank = "Interface" @@ -139,7 +138,7 @@ MassFabPanel = Class(Group) { end end else - if checked or self:IsHidden() then + if not checked or self:IsHidden() then self:Show() self._collapseArrow:SetCheck(false, true) else diff --git a/lua/ui/help/tooltips.lua b/lua/ui/help/tooltips.lua index 3d301413e8..9e67e3770a 100644 --- a/lua/ui/help/tooltips.lua +++ b/lua/ui/help/tooltips.lua @@ -546,6 +546,31 @@ Tooltips = { title = "Build Efficiency", description = "Your overall Economic Efficiency", }, + -- ********************** + -- ** Mass Fabs panel Strings + -- ********************** + mf_mass_income_display = { + title = "Mass Income", + description = "Mass being generated with mass fabricators per second", + }, + mf_energy_expense_display = { + title = "Energy Expense", + description = "Energy being spent with mass fabricators per second", + }, + mf_active_amount = { + title = "Active mass fabricators", + description = "Amount of active mass fabricators", + }, + mf_inactive_amount = { + title = "Inactive mass fabricators", + description = "Amount of inactive mass fabricators", + }, + mf_energy_required = { + title = "Energy Required", + description = "Amount of required energy for mass fabricators to work", + }, + + -- ********************** From 0d271f2081c4d1c18d1cc1784a74038cb3dcb272 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 21:45:18 +0300 Subject: [PATCH 08/15] russian translation --- loc/RU/strings_db.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/loc/RU/strings_db.lua b/loc/RU/strings_db.lua index f452b1e54b..6ce69344a7 100644 --- a/loc/RU/strings_db.lua +++ b/loc/RU/strings_db.lua @@ -8670,16 +8670,16 @@ tooltipui0704="Выберите название для новой конфиг tooltipui0705="Настройки" tooltipui0706="Это окно позволяет Вам сохранить текущую конфигурацию игры и загрузить ее позже.\n\nЧтобы сохранить конфигурацию нажмите на кнопку \"Создать\" в этом окне. Вы можете загрузить сохранённую конфигурацию путём её выбора и нажимания \"Загрузить\".\n\nКнопка \"Сохранить\" перезапишет выбранную существующую конфигурацию на текущую." -tooltipui1000="Mass Income" -tooltipui1001="Mass being generated with mass fabricators per second" -tooltipui1002="Energy Expense" -tooltipui1003="Energy being spent per with mass fabricators second" -tooltipui1004="Active mass fabricators" -tooltipui1005="Amount of active mass fabricators" -tooltipui1006="Inactive mass fabricators" -tooltipui1007="Amount of inactive mass fabricators" -tooltipui1008="Energy Required" -tooltipui1009="Amount of required energy for mass fabricators to work" +tooltipui1000="Приход материи" +tooltipui1001="Масса произведенная фабрикаторами в секунду" +tooltipui1002="Расход энергии" +tooltipui1003="Энергия потребляемая фабрикаторами в секунду" +tooltipui1004="Активные фабрикаторы" +tooltipui1005="Количество активных фабрикаторов" +tooltipui1006="Неактивные фабрикаторы" +tooltipui1007="Количество неактивных фабрикаторов" +tooltipui1008="Необходимая энергия" +tooltipui1009="Энергия необходимая для работы всех фабрикатров" LOADING = "Загрузка..." sorian_0001="ИИ: Сориан" From 2b35da194e2fcddc6efbbc4dcf59743eb176574d Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 21:45:31 +0300 Subject: [PATCH 09/15] cleanup --- lua/ui/game/massfabs.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index 1e23f35893..343a220c93 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -63,8 +63,6 @@ MassFabPanel = Class(Group) { self.Height:Set(self._panel.Height) self.Width:Set(self._panel.Width) - -- self._leftBrace.Width:Set(self._leftBrace.Width() / 2.5) - -- self._rightBrace.Width:Set(self._rightBrace.Width() / 2.5) LayoutHelpers.FillParent(self._panel, self) From 119fe63b464e1a1af7422c5dec283c4aba57c747 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 21:46:08 +0300 Subject: [PATCH 10/15] change texture for cybran skin --- .../filter-ping-panel01_bmp.dds | Bin 6176 -> 5312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds index 34ebc1fbc8161decf097095e7ab0203995bbd824..5895dc551120ab2ebd9674fccdb6ab5e57e3ca3c 100644 GIT binary patch delta 689 zcmYk)UuaTM90%~Gy55t^{ZrR}a@3sfxDn-8&k7-aKB zdWhlWwg{HNa}v)3@LZvxNrf54x#Pif9#T*?Z+HDkhP z-xqcx+=#5n>AI8vy>a89+6M2%7f-qAMtLRRH97L_Zc(EGR?N?G0;jbKQSDdu_PisQ z!q4pt1>mgm{Oh^B$o==Jop=QFq)t45J`z;&H_D)QYm7!It3%8pztoz?V%Rf6ifEdy zE$67g7B#5b4h07f-hNXi%x zGwUgIlDepNw};}3O1HO7BSNPp{Lk!u4UjpZTCD=U;}U0FI?!#$BZ|3l1R>_?xYCZy zeW}x~cIz-Hsw7FPM-g-Re4#ZYi$1TrgLZH9kQ7tVj{(HE>;#dd5cyfk;Jep5s8N(+ z267~pLd^I{75PG37fl_ago0+eqGF((FLG`0(T73Ec;>J7jwV#@u8xl>B#V?6aZ1X`|ka z0@Puz5>${}S|>H`ClKAYlU*uh0l0MlAwXM&1pV#AcWsP(#<)@Dc>t9OqQ#keWI_J` Dbc_4A delta 890 zcmZ{jZ%7ky7{{OAP3JjXyX{c-MmWYzS?WBE3JGP2FC1tb>Q(Prqn8QmMYCFjx;JHD z+kS+|l1B4|2m?if*&kdbrM=plLL#v22GI)}!dQZG{kGfulk|h*ICwsMp6~PgE@6uZ z)m>fv++6@DV`%6m?>_QGYUZn_QE*JaFVK6OM)g&_in1~Xk|g~B=d(KM)QFfCfd9ve#0sp{4LwInJ4N&C7dP=pD_$sRU=<6&(~# zYRq_D^Aigt)^iW0c%p_`a)vH$xqQoeA3D2%wmz1m%+)Q=rR9m2avYg;4Y61TdPeK| zEY{R2z$1ssbI70J{Xz;-G@Vx4p4isBdU8zEg z3!ZX>@O*iFeJTmLiG$L<6MnT;0lBoXSPT^CZ?*PQeD0fMT6m-*z&9P=7(6q%AIaaU zYDjOio}A4>q@pG|SAjy60(Y;W#hA|!Q0u<`TbHavnA3B@N#5iLH5~}<@M?H@4(Qyd zkAZ1D*~y8cU3qI&n;icS#2Cna44hC~V@iIBO|2JigtwN=xy{I~%y1-*p<+LdIs*|4 zOd1CmOGiR`-5FjiVm(#P(DZFz4e>!H^SXJ%wv-+EExP5n+ojh4Y(OVf=iBB>*Ycwr zz@jmY6Gl$(GR|#f&{j?^J^g7GK<0OR6ZSVFa>9MNiGVV^8*k5peh)YzGuUG?<6EX* k_^pX!Wi2>EyrQI5$@a*)SVITC$)3hzEHghQkpHUsFD5NAG5`Po From 93dc233b637a309da1cc9e075421e30f47982e07 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Mon, 23 May 2022 22:01:59 +0300 Subject: [PATCH 11/15] additional logic --- lua/ui/game/massfabs.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index 343a220c93..ef73bef47f 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -149,10 +149,16 @@ MassFabPanel = Class(Group) { Update = function(self, data) if data.on == 0 and data.off == 0 then - self:Hide() + if not self:IsHidden() then + self:Hide() + self._collapseArrow:Disable() + end return end - self:Show() + if self:IsHidden() then + self:Show() + self._collapseArrow:Enable() + end self._activeCountText:SetText(tostring(data.on)) self._inactiveCountText:SetText(tostring(data.off)) self._energyRequiredText:SetText(tostring(data.totalEnergyRequired)) From c7da06a9bf1906bd025879e6cd3ac507f771b5ab Mon Sep 17 00:00:00 2001 From: 4z0t Date: Tue, 24 May 2022 14:01:41 +0300 Subject: [PATCH 12/15] reuse table for sync --- lua/aibrain.lua | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/lua/aibrain.lua b/lua/aibrain.lua index aa2f78dd1d..dcb6c66c16 100644 --- a/lua/aibrain.lua +++ b/lua/aibrain.lua @@ -385,14 +385,21 @@ AIBrain = Class(moho.aibrain_methods) { end -- localize scope for better performance - local pcall = pcall local TableSize = table.getsize + local CoroutineYield = CoroutineYield + local ok, msg local energyRequired + local syncTable = { + on = 0, + off = 0, + totalEnergyConsumed = 0, + totalEnergyRequired = 0, + totalMassProduced = 0 + } - local CoroutineYield = CoroutineYield local EnergyExcessUnitsDisabled = self.EnergyExcessUnitsDisabled local EnergyExcessUnitsEnabled = self.EnergyExcessUnitsEnabled @@ -462,13 +469,13 @@ AIBrain = Class(moho.aibrain_methods) { end end if self:GetArmyIndex() == GetFocusArmy() then - Sync.MassFabs = { - on = TableSize(EnergyExcessUnitsEnabled), - off = TableSize(EnergyExcessUnitsDisabled), - totalEnergyConsumed = self.totalEnergyConsumed, - totalEnergyRequired = self.totalEnergyRequired, - totalMassProduced = self.totalMassProduced - } + syncTable.on = TableSize(EnergyExcessUnitsEnabled) + syncTable.off = TableSize(EnergyExcessUnitsDisabled) + syncTable.totalEnergyConsumed = self.totalEnergyConsumed + syncTable.totalEnergyRequired = self.totalEnergyRequired + syncTable.totalMassProduced = self.totalMassProduced + + Sync.MassFabs = syncTable end CoroutineYield(1) end From d242c00c2e14311d507d70eccbbdf715850d5b5b Mon Sep 17 00:00:00 2001 From: Willem Bart Wijnia Date: Tue, 24 May 2022 20:57:08 +0200 Subject: [PATCH 13/15] Add Pascal case, revert changes to threshold --- lua/aibrain.lua | 55 ++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/lua/aibrain.lua b/lua/aibrain.lua index dcb6c66c16..8159a351d5 100644 --- a/lua/aibrain.lua +++ b/lua/aibrain.lua @@ -55,10 +55,9 @@ AIBrain = Class(moho.aibrain_methods) { self.BrainType = 'Human' -- for mass fabs tracking - self.totalEnergyConsumed = 0 - self.totalEnergyRequired = 0 - - self.totalMassProduced = 0 + self.TotalEnergyConsumed = 0 + self.TotalEnergyRequired = 0 + self.TotalMassProduced = 0 -- human-only behavior self.EnergyExcessThread = ForkThread(self.ToggleEnergyExcessUnitsThread, self) @@ -261,6 +260,7 @@ AIBrain = Class(moho.aibrain_methods) { -- end of engi mod + self.Army = self:GetArmyIndex() self.Result = nil -- No-op, just to be explicit it starts as nil self.StatsSent = false self.UnitStats = {} @@ -340,9 +340,10 @@ AIBrain = Class(moho.aibrain_methods) { AddEnabledEnergyExcessUnit = function (self, unit) self.EnergyExcessUnitsEnabled[unit.EntityId] = unit self.EnergyExcessUnitsDisabled[unit.EntityId] = nil - local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy - self.totalEnergyConsumed = self.totalEnergyConsumed + energyRequired - self.totalMassProduced = self.totalMassProduced + unit.Blueprint.Economy.ProductionPerSecondMass + + local ecobp = unit.Blueprint.Economy + self.TotalEnergyConsumed = self.TotalEnergyConsumed + ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalMassProduced = self.TotalMassProduced + ecobp.ProductionPerSecondMass end, --- Adds a unit that is enabled / disabled depending on how much energy storage we have. The unit starts disabled @@ -351,21 +352,20 @@ AIBrain = Class(moho.aibrain_methods) { AddDisabledEnergyExcessUnit = function (self, unit) self.EnergyExcessUnitsEnabled[unit.EntityId] = nil self.EnergyExcessUnitsDisabled[unit.EntityId] = unit - local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy - self.totalEnergyRequired = self.totalEnergyRequired + energyRequired + self.TotalEnergyRequired = self.TotalEnergyRequired + unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy end, --- Removes a unit that is enabled / disabled depending on how much energy storage we have -- @param self The brain itself -- @param unit The unit to forget about RemoveEnergyExcessUnit = function (self, unit) - local energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy + local ecobp = unit.Blueprint.Economy if self.EnergyExcessUnitsEnabled[unit.EntityId] then - self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired - self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass + self.TotalEnergyConsumed = self.TotalEnergyConsumed - ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalMassProduced = self.TotalMassProduced - ecobp.ProductionPerSecondMass self.EnergyExcessUnitsEnabled[unit.EntityId] = nil elseif self.EnergyExcessUnitsDisabled[unit.EntityId] then - self.totalEnergyRequired = self.totalEnergyRequired - energyRequired + self.TotalEnergyRequired = self.TotalEnergyRequired - ecobp.MaintenanceConsumptionPerSecondEnergy self.EnergyExcessUnitsDisabled[unit.EntityId] = nil end end, @@ -415,11 +415,10 @@ AIBrain = Class(moho.aibrain_methods) { for id, unit in EnergyExcessUnitsEnabled do if not unit:BeenDestroyed() then - - energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy - self.totalEnergyConsumed = self.totalEnergyConsumed - energyRequired - self.totalEnergyRequired = self.totalEnergyRequired + energyRequired - self.totalMassProduced = self.totalMassProduced - unit.Blueprint.Economy.ProductionPerSecondMass + local ecobp = unit.Blueprint.Economy + self.TotalEnergyConsumed = self.TotalEnergyConsumed - ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalEnergyRequired = self.TotalEnergyRequired + ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalMassProduced = self.TotalMassProduced - ecobp.ProductionPerSecondMass -- update internal state EnergyExcessUnitsDisabled[id] = unit @@ -443,13 +442,12 @@ AIBrain = Class(moho.aibrain_methods) { -- while we have units to retrieve for id, unit in EnergyExcessUnitsDisabled do if not unit:BeenDestroyed() then - energyRequired = unit.Blueprint.Economy.MaintenanceConsumptionPerSecondEnergy - if energyRequired < energyTrend then + if energyTrend > 100 then - - self.totalEnergyConsumed = self.totalEnergyConsumed + energyRequired - self.totalEnergyRequired = self.totalEnergyRequired - energyRequired - self.totalMassProduced = self.totalMassProduced + unit.Blueprint.Economy.ProductionPerSecondMass + local ecobp = unit.Blueprint.Economy + self.TotalEnergyConsumed = self.TotalEnergyConsumed + ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalEnergyRequired = self.TotalEnergyRequired - ecobp.MaintenanceConsumptionPerSecondEnergy + self.TotalMassProduced = self.TotalMassProduced + ecobp.ProductionPerSecondMass -- update internal state EnergyExcessUnitsDisabled[id] = nil @@ -468,12 +466,13 @@ AIBrain = Class(moho.aibrain_methods) { end end end - if self:GetArmyIndex() == GetFocusArmy() then + + if self.Army == GetFocusArmy() then syncTable.on = TableSize(EnergyExcessUnitsEnabled) syncTable.off = TableSize(EnergyExcessUnitsDisabled) - syncTable.totalEnergyConsumed = self.totalEnergyConsumed - syncTable.totalEnergyRequired = self.totalEnergyRequired - syncTable.totalMassProduced = self.totalMassProduced + syncTable.totalEnergyConsumed = self.TotalEnergyConsumed + syncTable.totalEnergyRequired = self.TotalEnergyRequired + syncTable.totalMassProduced = self.TotalMassProduced Sync.MassFabs = syncTable end From c0d704da85257f48f9169ae4ba2d7b45d98dfb98 Mon Sep 17 00:00:00 2001 From: Willem Bart Wijnia Date: Thu, 26 May 2022 12:31:22 +0200 Subject: [PATCH 14/15] Make UI element stretchable --- lua/ui/game/massfabs.lua | 34 +++++++++++++----- .../filter-ping-panel01_bmp.dds | Bin 5312 -> 0 bytes .../filter-ping-panel01_c_bmp.dds | Bin 0 -> 1024 bytes .../filter-ping-panel01_l_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_r_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_bmp.dds | Bin 5312 -> 0 bytes .../filter-ping-panel01_c_bmp.dds | Bin 0 -> 1024 bytes .../filter-ping-panel01_l_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_r_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_bmp.dds | Bin 5312 -> 0 bytes .../filter-ping-panel01_c_bmp.dds | Bin 0 -> 1024 bytes .../filter-ping-panel01_l_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_r_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_bmp.dds | Bin 5312 -> 0 bytes .../filter-ping-panel01_c_bmp.dds | Bin 0 -> 1024 bytes .../filter-ping-panel01_l_bmp.dds | Bin 0 -> 1744 bytes .../filter-ping-panel01_r_bmp.dds | Bin 0 -> 1744 bytes 17 files changed, 26 insertions(+), 8 deletions(-) delete mode 100644 textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds create mode 100644 textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds create mode 100644 textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds create mode 100644 textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds delete mode 100644 textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds create mode 100644 textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds create mode 100644 textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds create mode 100644 textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds delete mode 100644 textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_bmp.dds create mode 100644 textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds create mode 100644 textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds create mode 100644 textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds delete mode 100644 textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_bmp.dds create mode 100644 textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds create mode 100644 textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds create mode 100644 textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index ef73bef47f..15c20a7d95 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -22,11 +22,17 @@ function Update(data) end MassFabPanel = Class(Group) { + + DefaultHeight = 72, + DefaultWidth = 104, + __init = function(self, parent) Group.__init(self, parent) self._parent = parent self._collapseArrow = Checkbox(parent) - self._panel = Bitmap(self) + self._leftPanel = Bitmap(self) + self._rightPanel = Bitmap(self) + self._centerPanel = Bitmap(self) self._leftBrace = Bitmap(self) self._rightBrace = Bitmap(self) self._activeCountText = UIUtil.CreateText(self, "0", 18, UIUtil.bodyFont, true) @@ -41,11 +47,16 @@ MassFabPanel = Class(Group) { end, _Layout = function(self) - self._panel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_bmp.dds")) + self._leftPanel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds")) + self._rightPanel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds")) + self._centerPanel:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds")) self._leftBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) self._rightBrace:SetTexture(UIUtil.SkinnableFile("/game/filter-ping-panel/bracket-energy-r_bmp.dds")) - self._panel:DisableHitTest() + self._centerPanel:DisableHitTest() + self._leftPanel:DisableHitTest() + self._rightPanel:DisableHitTest() + self._leftBrace:DisableHitTest() self._rightBrace:DisableHitTest() @@ -61,10 +72,17 @@ MassFabPanel = Class(Group) { LayoutHelpers.DepthOverParent(self._collapseArrow, self, 10) - self.Height:Set(self._panel.Height) - self.Width:Set(self._panel.Width) + self.Height:Set(LayoutHelpers.ScaleNumber(self.DefaultHeight)) + self.Width:Set(LayoutHelpers.ScaleNumber(self.DefaultWidth)) + + self._leftPanel.Top:Set(self.Top) + self._rightPanel.Top:Set(self.Top) + self._centerPanel.Top:Set(self.Top) - LayoutHelpers.FillParent(self._panel, self) + self._leftPanel.Left:Set(self.Left) + self._rightPanel.Right:Set(self.Right) + self._centerPanel.Left:Set(self._leftPanel.Right) + self._centerPanel.Right:Set(self._rightPanel.Left) LayoutHelpers.AtLeftIn(self._leftBrace, self, 11) LayoutHelpers.AtTopIn(self._leftBrace, self) @@ -76,8 +94,8 @@ MassFabPanel = Class(Group) { LayoutHelpers.AnchorToRight(self._rightBrace, self, -11) LayoutHelpers.AtTopIn(self._rightBrace, self) - LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 10, 10) - LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 10, 10) + LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 12, 10) + LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 12, 10) LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 12, 8) LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 12, 8) diff --git a/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_bmp.dds deleted file mode 100644 index e110c3b89d0d1b5be80613843bd72f10f1c88b2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5312 zcmeI0VN6?96vs~sbA6Bv9F}%*6^4}x4Z(G(nGh6c2YqXR;rcADbuFVshF;Tb$wszj z83SixG!v3$A=?yPW~P1sOdy(>5HZ_qqRBq2$xMtc6a<2cLPjt%<$3OVy$B1=e&i*) zx$iaq*EYH5m-9d8zH7Jd%MSy<#%v8Z@RMGZPv8xQ3a?teZf}X*zE1^d(zA!%^6|@b zyzEUb>zcpIUh65}Ys4wy_#6koBmFQQ@5+4Am&DgyAPBKVHQ(E@A)O=^KQ@CX`hEmn z4bYFenrh((Ne?PUi@;l6-11djVsUIIu0NKb@iwSUiN$6qK9(OWKBigz%mUYA+n(FT zlU7^C>G6ZtgZiuY7viQVXQ!tBuagJ5eWz}Xh#wh^#rXhBf^fpmiT3mm+Gr2x# zy`zFKa&R(q?CbMCpTT%CN{3^jrrNS&+t_D3sj;auxlN1*i-&2(=kBxLcD#4JeUK-U zWg#3VJXcD^BVU@n+YZp=^?H3CsO&}L)Tz{uO4Elu$L3B%`?|Zf0$7J5k@4dL`i8me ztaf5AF2TWgu=to}e5RXJhMPF~;AM%=Tf+3&rTJ1*7xF+l zBs`9_Sc~J=BM1lQA(EaFpWpXa8E)a^$u)^jTiuoSDW6M8KCXHgBqJA>`6x~M>XDCl zF06iB=JN|-e2l5_d95n%9!}=3mRgw)^%u>bddF%$O4F}89^lg^^Fe=EQt{W!GM~rF zY5nn3qrXB0rg)N1O%?K4;V-4>#;T*uPl}On0oEVtuZgx7dU9~KlR!#*{&qL!Ei~pi zcv5IXJn&Ox!#wss;DVJJx7!W3E9m}+YQXj{C{LI3A5QR_VI}|&i^U+`LiwnGCzmN7 zEX(r#kHyC{tIv~e=C4-DCse;v&L3m3?5|yx)&5eNwpoajKh??niF;Z8Tq{e(UsKJU zIlFN3=&i$hf-xC{0_9wEpyXX+M_u>}7mvY^m^>^e{eC&XC{luXqaiVE#;& z$@%lNVYR=Mrgs=Hf5b?D_8W=M9>(WPN_-}o7@v(U#N&TnKb<9p)TTmPzSQ5h=~nL# zm8Oez$Y(U-rS(*+wOZr5Wj;m0Po0}Mj$`%szxL0f_7xJ-8SwqWfqd@VsnvzYOvg_b z-f&iGyxyjc+#I>Yv;QkiTeZ=?3(<4>RvW5H>N-v=&j?dS*aZ{g>~H#2#Mt63x52XN(}CYfMzVZX=I zk@cp1biKsPIb8V~VF2J8T{Lm^sC)AaI&9dih6VLA^(9?hg*=IRximbQNcMLY57Vr_ zrvd+geEv}sr2Cscp*uGV`;{p2gzCFsLN-1K{dW_tXDlt*N5i|Y<)|r3t(Ll XPb)Z*=U;L>|MGZHKRO><>wNGZ*U72k diff --git a/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds b/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..8047238644b38b12c85402de06b72371cd2a50dc GIT binary patch literal 1024 zcma)5J4gdT5FJG{YGJ_mDO7?vix5RI2tia5iJwD^NV5J?MA29X7b~%`uudV8RwQL0 zjaI3w>;wz35>nY%h$z@tD2#6t40j`f1IzJt-@JV@I~R?{y+=gU zu~HJJk`&IFIYaAeeTg>|@~yMlxx|SWE-#(e&Lxh`JI^JajgZ&0=}Y`D33DiM&mvMv zk;I`DQ*QqaYPnWYl5_h(vv9|jqj(f~^wpuBZM}445{6edcSo zW~@e?_ir0je{%`UBm50@Sf31umlMrav`;9eQcv}N*qOy4{4j61G-06+`LN(mSL&ls bs8UL;KLKUlm$1eB=mwvb2c3FTQ%?Rj;Rj6( literal 0 HcmV?d00001 diff --git a/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds b/textures/ui/AEON/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..839162fc40b00ee015a8749154ab2cb03ac43b76 GIT binary patch literal 1744 zcmbtU4NO~A6h3q~?3jXKmXcWMx|cnb1P088D8zQ_M(bP)?zJUw*A*sd#XZwF!NzTb zB8zj`fT0U6W+}-uG`OV9EF{K6tBGWrm@e9>3o$l|40T&s?SPD~*Yo;#Gm2|8emO5M z=broBbME=M2Ez{ZegMeHUj;_|=i}Fv4Ui?Q;rDM~wsDohJ~e(w1w#Y(IR2L5-hAD% zHEDq&MiBp3KMbY;#x#&k>3xHER%l*k8t~qe&8Mh-BScfXCcq>E7~&~iQ4N$@|L*Ts zkRRK;R^h%)jjf(K!hPPV{OH!rpV;$6Q#7>D>3GfA6&a&`X62JkfRuF^{~G(L_sDqL zX#882BgEm@*AytDdp}^`s{m*qgzRbp-2jFt`2DB*Ua@DXE~3PSbC6HSi`JRGRJ@FJ z?Er8f8m(|~jDP2@{Hu+6RRkp#6#Nt7-X1tA@XsyrIWvs%V<+#*|BdL26DZe*-2$EL zt`+%@aH4;+F*AQ==Mq2oMw;KW3FG%@*h56*Z`Fg^lp+2_TYd4(`eI`^75OZ?!4c8=p--pq*g%foII>h~y<`TkRl zB0m;9%tsQ5M9ss|%>6^x*!W9@ zs?oV0e&OflB9X0y`#)n}?Otyg^pz7*=T;P8<7T-34LG6PEkE8v>9$Ue)afp1I-h;& z{k}7?;33Yf$qhOmFvaPfT+@x9>j~>DESvWgVCu*DWu$t>phuCH*3~t10pKbyayWC6 zxjjG3Q)@sNqco)b|5aai=e-d7=YpV@%Z-$t!;S^}IL5Q){9Eo69p^$irzhZWe$SfY zjFD4Az+t!do$7GC(&5aZbei)ZTo!l9>>+Ft!(hwDvk%RWjq=GkZn{0~}wWDdx_5&RRilKWr0J99e+Sg=G9e6*m(R$Na&dc1AEDyPns#HtXB|P*2Xw z%f07)?)SWV&b`&u>($!Wsc|HiC!wo3jxH9m+!wZlf^Ylh9u zu9`8Im>_6+f*qUJj9fcFxmofPTCEeDjUh+fE<+KJ23MGs@2de*-sVl2sNxAeLrD8m$!bFFT>C z8zuO8KL2-|Z82x3fBPp!fMS}aZ|N2f{8-=`nD|y_qv>E!%-7rDa)>>clAvF05>ztLpYUb-Bg{>@r z-EN2Ps+c3A%zPN~pUsOzB7OJkxQSAZDjMRBZ$|wU;{980OwHd~Dd?YU74&b^3HniP zZ0!m(G5`1y-2Z9ydv-}X*3aj7ZLh$Oxhrxt=(l?--%RG@Yg=3qKnl{Ir3(^TV%fAfQr-_1!tl z1Yz~^7}xTYJq!9GRQT|hZ5!rCIj>Fcy>>4KSB%S>2Jrl?eNRcJ@z+Y+68$?4S~-OF zYaiV0Wr@8MqOidGB<4ei+Dyv%18c$l;K%>(eh}-4$AkROAJa$(xriML5l!;G5cG~W z7`nb<4vkuDYA6jxA{W5oDXBLWPm&8ZnMAH=S;sayiGSzGcM(S0cl5-WVeg)+gpAn~ zXwFqa{1)~TAK!HhgYmd-BOl+hlqdk#Pv_4Y_`mo~Yj|lFS{AABR{%n(`qhC+7uq u_UPL$eG?*NXDJRV4KUZEMo)bIT*=5B&>l$Ezor5{)S@TiCX-On#P}Z?o3GOV literal 0 HcmV?d00001 diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_bmp.dds deleted file mode 100644 index 5895dc551120ab2ebd9674fccdb6ab5e57e3ca3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5312 zcmeI0Urbw79LIljR0|}o$*9&9OpA9iMU-JkM&hs~%|^}m6X33mAS;Nj1AM6Ot)p-1Ehv5E3wIX-&jn2;eif&mpx7C{uEJm{GEGy3N_&BTW_+H zd)s__o163d-0$!AJLg)hJ;q}I@VHh3ZTL-3b0vP@D8ci9t-Y(>YV9e3ZPIW5^h8&^#iai+5Frn)4zgE1rSCZ zJ4gRtY&s3LnjZq;b~fJ?8qY!1b2#5Ho$tCIvT8a&p#~Q z$1aM|AqRMp?#Qryc6IFz7xEdkQ!4}Z&kw`=3^~i;RSgiHFE)K?Sah8dCQ~6FXv#0$ zOJtz+mG4e>b%^nCXKO|MbSBG7oCiJOd%GAP77x=bzwU$Jw|p@+BF00$^6{ker+&wk z)w{pchWsXN(mgOR(&uPjKprL|K);>m5BGsNfRBV`F3rzk({K0H4^H5GjaXZn5v1q1Tk*N`bUvRC zI&YnL;Ht^->FvN`Gc%dvqcrX87#lQX`5+$MZyzF@|G{U)G`I5t9_Swr_0JJoKA(=Z zd_GFk{cSVopHst@1^|hVi}4vR$UkIPi6M*!G}xub&%Sl;`Bb-89INg$B;-Q zfV|Tj>}ghGJYJVnex&{#;8=XD9 z3+wYf0sFdXlG?fi*EENn5llOA|+2l<`c^|sLa^Y#JvlRMCf8|qQ9X;UR3i^4=D?x(Qd z26qMY!sP6ynI}?V)9&f|3e_S^MnC)c>wW4uj00btJd95(;O-pbEfvK0Rcva1f%ZL_ zS1jU+0xal`casZWT~0+T4WCQ_yjy8YllLnCcfY{n+Yw2R7LT6N3Tv}3T`NmPOxi0i z0Homd{2=9l`GI)MC&8Vj@#1bCx-bUDhsDD*>+kDYjMLpe<3)(93C!Ot!TYUiu8jJp bc=bZ5XT$s$4>sR_$Gf$D^nPr!_k;fcxjyuP diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..1f069c974c6d208da8615f3502a9e1b8bc025ff7 GIT binary patch literal 1024 zcma)5Jxc>Y5FJHh)WU%Aqfj~ZEHr`=30eq=;gDQmBASiS6o#OrkONB*JO4mPD{5gQ zsjLo5OYPLcCY43NbYf>A>)Q(ncM}8$mgVifdGoQehOw=k5m8T|j}qAZSg}r`4t0k0 zA4_J^ONysqbzvFVbOc+Q`2(@Gv*v+>RbU*yk%?^XEGcUbB!uAjJWtQIyw-0{C_qvO zj`wpEE1P9q=_-AW_XPZ{i`G5I=_G>Nm#uq_lL_xV$LnjPnJ#^fks4{o#0c5RG-k=eQU&zogYqx8JA_RE{O-y~X!4nDKJerzD+uxLQW@ z5x@2U=ZX*uGnf|_e`*xi_5P`#N_K#Xb@g6EPlVu&{OhW|TnS|8OF5}2#*X2QZ_UxC z1ix?$G9ElKWdBH{P*nYa;DOR}>S_Fk#36vAhxrC!a{~3DrT7hglt4mVwzqXrFU-1sMs1^|3&OB@hKK(po>tjdc>#cc8{#r z^7pJM3rO+>$^UI5*gocLCpIG*rvQ@SC9wT&i*O;tvPp0{ovZiTG?WPC5<8zm>?l$^ zKMTb<%b|5=hH*CObvvD7LETr>yU!RfrHVYVRCF)1xG7m9nHZ781i{l#SP(xX&`!Scx z1^7HWPqHWB@5cwq{M>$2-ajUlO)}oIjrQMXG)3t&S^dv8m9Af^miY%Ung^ILD#OtJm9>#ouK^t9~01Rw~4fAb@y=jRSw(DiK_)a9}Ml3NsojQ+rm7fv6& z*jv=R!-KlKVI%&DHx9L=DWB8j@v}ZKQTpEs^mb8y5Fe0uT9-h(hvh@c=X8p~&zlbH zz|n!TpBL*+wE|QymWjg4){4E7?`n}}age>NTF$?Y@+r|P@yg0t`Tos+nSC$%kGCRf zXktNl{MSTCZw`EkcsL8dhco6>-^J6f=PH+g?|Q@S?2VcOwWN7GoDP$O9PuY}x6X6p zeE>ACu7MNeT-d!gkHIYS`z#$5Iq5t%b4>Q9Av5$~X6Wra?wVr$XGYW!PHlkk2+b>q z;)h4}2TW%FeTb*#>HLJ3>f!@P{F?=t@9QTgh2-(uImS0v#?Rn;pK4r}5Zc-M&@l2)p*%LNK8Gqlv-{y-^`dIn{~M~hz20zAv&$UFkt*l0<^2y1 z8vYog?{7^b{VA-Xv8Qq3yA2x3@3&g5Pz4sPhE$2Sn?e=9eM<8r{~um#f(S>d*v-xI HGbr|7SC_?= literal 0 HcmV?d00001 diff --git a/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds b/textures/ui/CYBRAN/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..bd07ff0b466a3789baeadc52905ef7c69589e0ee GIT binary patch literal 1744 zcmbuAZ){Ul6u?hepKL&v*5zf4w&AsV-JI4ir$w^}ZaQJ_OSj;vh52W&MlkV3G?C3j zL)Q>TjV7@0#H9@Og;@Ns43ZVd6d4q469~mvQ>a>JTFs0hG)ACL;dovjowRGB#*_2X z+|NTt4Q z!CYYiNj@R@ujAVwSTBrB3W&@laJgIv!U*s5H6mIQ02R7_+V6OOX8S-ckWL5txFxHm z;u%QP|621+)gjEBcEnvS_QQ~voHQp9x8-O*B`tX=_`9w5YF_{k@%@y%DY8HD{MGFP zCr3X`pV-1JeQ;{(I=HR&nzgej%)}Tr9xvrLxgZu21H3Y?#6S4l&b@BGG5LJ2PZ5ynlq8vVLCMo6dajKWF2&j5W`2g1n z2h&0|Ff-o!BuN5PVA~>YLe4~3l2ZP$mSX?i4=LwM?jTi5@&C`2>iH8gbEzEP`~c;j zTu}B^^5138`@g(l1}c^O%Vw3oD7Qz-#oxpi$1m9K@Rzwff74jtEwOTZy}8)`b!Ihx z!*h9_xn8I8*W~iNskXR()-V5DqW-CUc@}_Sn5r8qRDRVTmPEPp?KOz0lcTi}vUf?g zs;DtKHa+lj^>9x6x(2-Cx4`7I_$nGx*f1MsS*A4qSJ>#S=^Y!ZKhD{X3<3Ng!{N3W zvPZI~+rvBwomAfu9AKs{w&wS^>;CUTy5!IcR}go_=#|uoU7^jrxZe}r4M6=W4F`wJ z3DOkqis(pQY!^2hQSzieQrAB?K#PITE~l_RrmR0Y4*Ph}wuSdlzXHofpx0;XJ!VUx zC!wrAZ3|^r62Em$<==bXKbG+75{O5#R9~jGE|h&KDs?FJmRQ!Y+fR#RlEQP>6#h%2 za9}VSv&>}ybQJ*iUN~${Op5fLHDooEV8gdfuO{hPq`1OnZV(hN3+E3^KXQ=dx5Ysc)}xp}!(!FBnw4|+N8 zg>PPXocrN>?zy@7`3DnQ03bvyheG_M*Zv5+;RwR3KyN5b&Cfp=1Ur1+J?fT-4}3mCM+VjNOjro@| zf3W#5&HVExC_3|!qUx5G$DGQu6V>h`G1vb7Yg*ed`lY(>-l>YV%G0;T$mhum)k$)A zz;UN5VUlW3IcoCw=`;TPeEE)Z+*tLD)7MF3{2)mmwR{auKhRw}JWsp$sG z$<=1hg|?7f0Ntp|_51r*V@g)l;RYeKCKU(c!RE&_<1=p#il4*?<$r8OJdS#9{-XzL zX<9A55Aj&bIrNMD;szh7=~~Wivy8i1@^=G7;`pr*;b6QXES3ktXR$md{uV|k&$m)O zb%x95D4zoK59M>n2*dWVPdE5TO;;L`59!(9Gi4X~7=*BZ{ImF0PQqP`P(Hkk@~J5h z`PBLO7z?-Zk(xeSDDpYt_s>)v<6}4)h=2ar;Ir3B`B-wXz8t%>9c7|_-pD~do9aty z`pujZwpik7X-^mH>rP!(rv}3y)HepghnPDP?sp~xsf1(QhzH2)C2QFKKqXYmO(qj+ zx<8VEQUGlKob+_I{xh2Y!g3IJy?Z1?3A%pi^o+<`#bGl)104=Q0feX&uj(bqv@x7@{+~=KG-Po z*`2&~{gIm1CDZk%(^^oJDDo*4`Ap81I2AZpJ^k1IXU4+#93P^5vY$gf=%27Qk;6z` zdQUX+8FyLfdKww2(@h^>e0KH+!e=S`Y5QbI>|m&n>2_4zzI`C7IYZlUcHgu8Hnr7k zc0_5!C7$_DYC1F0bD`JM6RYmek-J89sXrIs{%7RwgqnYENTEG9t^m<9kWRNGacLCrme`fXo+DT)ZU zO-}Q>8SPoWcH;0euAkglsYv6Wpcjnk-?zS~6n>csQ{mBszrVBjFwOe=L!CK?+Z(tC z?cFBqSA>M}UK0R;WCeW%A!?pJmzrJxO-Gh5f0a<_1<*pF|NP6dyiRCU;KNPxd#InB Jk8O88_%DiP$O!-d diff --git a/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds b/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..ce0fe98681048977d6110fb2be53c1c3fb3c2422 GIT binary patch literal 1024 zcma)5Jxc>Y5FJG{#=@ZZ0V+g|_>n@11T7@Q5JIjnM$Gz^LQ%21+CmG#P7oxmsJ)Fg zrqeEkU}2xXp!m_GP#NEx815zr4lKvpoqhA(>|8Rr7~ChKrhuQ)`1-Ko^+a{DhxMPx zEafI8FNoEEm0Zb1@u>-4AYQZgyTOP{gvJkKLCv-O#cw6LWTWxHIz1NoBJ{ks86Y-B zXn!$bhw0f>_E`#F5v+B9VnY8y@GWJOgpC=&ukNV@Tua zh?igEi7@oL{AoNI^48aQu+Ph{ac`HmKN@$oqp_~~8t2=rceY!I8UB!}F;l2n?lWgA zj0BD4-6Z~+kDaTcU8WPdm$>4VY268#+t#6OfDn4iQPWU| literal 0 HcmV?d00001 diff --git a/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds b/textures/ui/SERAPHIM/game/filter-ping-panel/filter-ping-panel01_l_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..95d1c78408a6c6d538294dc4e65e30fea807a4b1 GIT binary patch literal 1744 zcmbtVeN0ZKZ_Gx zjn#DtrcMo4eqHgP-EIf0mg=j9RU&}xZu&u~_s@3Oe>Y^XYWTr%`W1G%~JditxMlOx7V)pMKjkA zA@(3!X?S$|1MTH(>%qt4IBIfQEFNtxHEx>w-%)+k-<%zM1Mwv0^;?W{>kmAOL*1tl zwKF52e#D!@C$METkEqYGE02d}rGCniqR&HDpM(4%hVdJL?10IZ{3BXK{O9#8&rdxs zRWDBYUR;*+&Dphxmqy7pIR<RqD1T%5IFl*55a2!6mclRrM zJ()?gj7#rjcb&I1_UAQblKRs@=sHH5B#1dP7DB^TdH+-&0QIwd|EGq=3PWS=5BRbe zwM3%>mDKFi@;8ssdjqSr?Wn@Pg~Nm`jCXZx;R5sOoXqzPDEkQv5c10>wfqq)*v5g_ zF4yO9sK4b8;i%Ey|Z)}JJM zfGMHo-Ja>%o+)2j-rE`u3h;ulEjid9LGT^m^2wAiv80YVk?1pkLoS|A8N`Wz>p|< Kb+vp4MgJQ%kH-()aAD%(W@_N2g;l;inFXqqC!PQa0nvsF^I;BhG-# zCE~yV^Cz2|(qw216GxWNy(A=!UBWbE8d0RA#>vDC5h2lcH{pCmKkC|xVH|OT& z+pB{fVUTRmZ9q7LeH6~An%Q%=&`^tHk*|?}rT?6oPB#@_*HT zVAkKdmG>qGsAgfHQ%DxfbIet&`Ay?K9%KevzPf2}UOX(DS&WVfs!iQ`w4r}I0@c>Y8$ zKtE|}``S4ZSsRWF+%5j&C179{g0l$tUo4 zkDq-n&A4d&o3e&F4>q$oag3H&WisWo##R@x#*K(?ZI3 zk_@%%#ixS-KX$(HJ>B0C(($wB2FBiO9Zh28F!x^k8~Oh8?*Pz!W{-ALCmEuCQby`3 zrpr!O{&qLLH^|C*?NX>>a9* zcNmCvyMtXq{~RtSeUd|y4^8Rkk^2t-u0YiV>)s2r-*dQ3l>ve4Odu8x#yCGq*j%cG z{XGdxll4Tzm?R!xg}SWsnFpekD?cA4pIcuD@@}pP*E;TCDEA)nk3vzsx%le`$Ejbb zlt9_8*Ml)KVZN6nD~|-;3kMO+c5vx*TTI%CL)*R$C(*t~r_+H06io&)Vf<6J*mAI( UTKK=qoX}<=6Z$>tKpEpj3wGedZW2Qx61T2vWJMba<*uE~@){FuSa70i6Id9c zE@r4{){*csw~!G9Y1j<+L#LN5nh;{5L{dM{C3XyzL}P`C9pHF8_g)@e5^(jCG})8q zw)ywoHs|^Ef6jUC)$7fwMgVw7A%#Qu&L7%De8CZgN1?%J(&+W(D2Nt5`?nVro{Ygm zZ!OE)@H)jtpBh|hoCHT74uJbQJRZrtz%UFEcy*-_!fW5$T`)`aX!Y+CHFFnQaJ_le;j!G!GR7o-VDtF$53VR)rF>6^_A8h#f3XIOY;#JW68(r zcyopn2*XhQTj|!&1Gb;)+ef>n6b)5U$=)H~JVbwf>W1lY@$7Nr5pdXS)r{5XM;_`7fTI?MIl_R} zg?|a3xqN=9;_{SK8Cqy`n~?daOaOfd$knt_~sz`>5E-o8#>r3sa7JB zQ66+XRIl(!xt@Fmr zkqg>|^0U1EqwAyfh}P$YN2q@i+W7n`%@O_MsS*8?o3lQ@B28;^#Qb{vSvrLo=?3}f&N+3zamXPv7NY&j=Ixsw`NG)?xDQNLXnS`W!jKW+`a10 z-!PJVI`?d{pL2RD11+*|6Hb=y@0b7ZjOUkJN1z$9;z^J+wd^ZvJ0N8&HitZJ{r$yO z(>vp_^B6i3zq6~b-@135*aJ6THl+b%mj?-w~P0Mx`AW=UNfSUt!KpN>?oXzc%6KzB<= z?_S+A66^HD>>Q8*+=4wNEiv+aer`vvMkcv-4ji-mdYv8s(j8BM{@}TjqS+5ZP=KB8g Jv5lS&{sVwW0X_f# diff --git a/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds b/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_c_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..d887f5d30129f3e69d0b4273f6c2b03cfa65e5e7 GIT binary patch literal 1024 zcma))ze^)g5XVOmU5%0mdK{<_W&MQ+{=h~>Rtf5}h<7F<5u12tAxJ94D#iT+2eKge zgJ{2nSgl=p8x_H7i)*eFa@brs&Ll*3$HoVb$7kOB_|BV`N@bEo0BA|H!785?Z>JHU zL2SG~v(lT{Y4J<)ZsMKFWoP*Ku&jjh!B#gAFOQez(`UbAn?|7j?jd-DntyGK*1#={KHlmA0{TL>|;#{Gr#&##yzH)yV=k^gW$ z!H>`NFCRo7V&6#gzNeG>3(eoeL~I<+{6!0q;10NWT|Z}aL58{P68-%u0=_Rq>+cP~ zKVtu*lbXKv@nFbsijvev^mZj*wV&Lj2Oi`dzXMqR{GT059M-zzzrND_&uTnOP1Rnc oTq#$ipWzMjOfSTrzN@!O%FUl~BxJK)cr^$VxZkA~van;UfX; zDr%i}vhGLb07qiRnr<|x@x|2Gg_vxAY;HKRE#aBi$aIY+(vVFGaXX&dm**1Z&_usE zH!tU&`?=@7bAOmjO}cIXSjMG84ShLk?o!bE>RJX&jnT^v?BNR+FOBsD0P#RbH zK%d%yq#)`4^R**jwOSF(e%?Hoi^%+IckY7uM{_^##F%>5 zM=-cy!!*pttKNEa^n|pc3EWZfi(T5U7J6p+&-y;$h7&EqV*U<1w$k{n=nYH$?sQMo zE?I3~FWjCio}}?nv8BafwQZB}B+usqGz(ViV*d7;aqS0WVX36UPHJz6Z7OarD85)r z<4Kn7V3+Ba825MeN)(K*JxdmrwkP>lYhxeYbKU3b%`oPah91fzugMuB3rnwev;2FW zSNLBWmHaivrTM#sD(_G7FBuemW0S&HR)Egz9C&zsU6O|>>1rRP2P~_fCiO_0eEX^8Qa*~|vkEPux&dnajX<}H>LW+O5<8#sz_qFKi8SBjMFtkUq;{;55P{RZ|LsPm~l!o<%Snji6SGJb#je|@fC^( z1;Kkj<>!W6q^;`$qe%SKK7bvh-h-X?Wu5j{5X(ncd~@d5DAsy-?ll05#nPO4N#9l| zwaSR?TZT#JSJgdJd_3#y&d@j7X1iN0AJxC#FihUc@2hvq^aLXM4eT+_I4n5}tA9Cy zcry(GF|o>j`DV?*DB#>Q$Ijy*jAvgvlsAu<4+&8ey|Dkugyy6hu@yuy7D(NrcgSRj zwvhk?;Hfv>*{_@a(%JmO3;A%#WNOIqlw7&ko@=;qdOf+`wNS;Sk|7S=`i)duOV literal 0 HcmV?d00001 diff --git a/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds b/textures/ui/UEF/game/filter-ping-panel/filter-ping-panel01_r_bmp.dds new file mode 100644 index 0000000000000000000000000000000000000000..e73901726ce6181e3ab9b66c6b5dc0508622db42 GIT binary patch literal 1744 zcmbW1eN01|&3L0rwyqnAfh|pJh)JKZXcxaQM5YMoR(U3i!onY#Els8{Be|Z(vlP1ip`M(V zmvhhk-E;1_=ia)yR{bCVJV7a-9{&`6!%~39gfaa7jWoV&s}$zx@k12q95yrl9uXO3 zd1NdxKu`iG|JB|CtMMi~VOs8vTG$l!cK(zF4< z9JSjy`@PfspIrQO8P`)Xq0j^9FqY>u{v77m!AX}=p32*rpo7Phg>hm3-OWSejxn#} z+Xh?@<-tMi7Y5WYSKcE>N#$R%!i&F70#BHH|qBCFX%+RxkoSX1%Dh&@V(x2@wK^o^S9)R`LlQ_3s4>! z3OkLce1!9-<24k<-&OzGY)pR4o3lKs7kJg?Hs6B$#uW0()cz^VAmq-xZ@q941hvivv_i{V(HN916-#J?{l>92TsM09A6=%?_IT8t$NMsJdt<9+toG= zfc+YEUmMZICXW6{$agO)Q5@CiC*H0V>~Fz8&W`zG!>Sk|luhuL`(T0wspZP|=nq7r zo^OVAqW_jxrBnA*D_MXfzu0JMX(aG52S< ze$}+#pUbgcemlNsXbXOMz$}+Q*20u7Hsj<8={~GL$^5DK6pv3FA#BagW{|> z>hqi~rdpUIWK9O966Of|O6k{48DEi&RZ8g3%aHeriR&&Q!~kUs!?@w;?);)!JkJxr zFeN5w*NBrxCB!jp0uvnSFV{-7A3I;Y^Sl8nGc%j>sI`H%_f~6eUn@q__$0_&dQ?LE t>$4~gg-#{V7isP7-l+gS-zX1zFfj0mE literal 0 HcmV?d00001 From 701c7933731a439eb7d7712227365580c33768f8 Mon Sep 17 00:00:00 2001 From: 4z0t Date: Thu, 26 May 2022 14:06:04 +0300 Subject: [PATCH 15/15] align layout of text --- lua/ui/game/massfabs.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/ui/game/massfabs.lua b/lua/ui/game/massfabs.lua index 15c20a7d95..f0c849b8fe 100644 --- a/lua/ui/game/massfabs.lua +++ b/lua/ui/game/massfabs.lua @@ -95,13 +95,13 @@ MassFabPanel = Class(Group) { LayoutHelpers.AtTopIn(self._rightBrace, self) LayoutHelpers.AtLeftTopIn(self._activeCountText, self, 12, 10) - LayoutHelpers.AtLeftBottomIn(self._inactiveCountText, self, 12, 10) + LayoutHelpers.AtLeftTopIn(self._inactiveCountText, self, 12, 39) - LayoutHelpers.AtRightTopIn(self._energyConsumedText, self, 12, 8) - LayoutHelpers.AtRightBottomIn(self._energyRequiredText, self, 12, 8) + LayoutHelpers.AtRightTopIn(self._massProducedText, self, 12, 8) + LayoutHelpers.AtRightTopIn(self._energyRequiredText, self, 12, 49) - LayoutHelpers.AnchorToBottom(self._massProducedText, self._energyConsumedText, -1) - self._massProducedText.Right:Set(self._energyConsumedText.Right) + LayoutHelpers.AnchorToBottom(self._energyConsumedText, self._massProducedText, -1) + self._energyConsumedText.Right:Set(self._massProducedText.Right) Tooltip.AddControlTooltip(self._energyRequiredText, "mf_energy_required")