From dc67aa1ad0d9cd287ab7560d165b6462e9e3f065 Mon Sep 17 00:00:00 2001 From: Hrusteckiy Date: Sun, 12 Feb 2023 23:56:23 +0300 Subject: [PATCH 1/2] =?UTF-8?q?UIProgressBar:=20=D0=BE=D0=BF=D1=86=D0=B8?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20`middle=5Fcolor`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Это исправит неправильное поведение при отсутствии `middle_color`, особенно актуально на стоковой геймдате, ведь `middle_color` появился и использовался лишь в ЗП. --- ogsr_engine/xrGame/ui/UIProgressBar.cpp | 6 +++++- ogsr_engine/xrGame/ui/UIProgressBar.h | 1 + ogsr_engine/xrGame/ui/UIXmlInit.cpp | 9 ++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ogsr_engine/xrGame/ui/UIProgressBar.cpp b/ogsr_engine/xrGame/ui/UIProgressBar.cpp index 39ef9dbaa9..d2ccf8b1b2 100644 --- a/ogsr_engine/xrGame/ui/UIProgressBar.cpp +++ b/ogsr_engine/xrGame/ui/UIProgressBar.cpp @@ -10,6 +10,7 @@ CUIProgressBar::CUIProgressBar() m_bBackgroundPresent = false; m_bUseColor = false; + m_bUseMidColor = false; m_bUseGradient = true; AttachChild(&m_UIBackgroundItem); @@ -55,7 +56,10 @@ void CUIProgressBar::UpdateProgressBar() if (m_bUseGradient) { Fcolor curr; - curr.lerp(m_minColor, m_middleColor, m_maxColor, fCurrentLength); + if (m_bUseMidColor) + curr.lerp(m_minColor, m_middleColor, m_maxColor, fCurrentLength); + else + curr.lerp(m_minColor, m_maxColor, fCurrentLength); m_UIProgressItem.SetTextureColor(curr.get()); } else diff --git a/ogsr_engine/xrGame/ui/UIProgressBar.h b/ogsr_engine/xrGame/ui/UIProgressBar.h index 17b02274fd..4f5ea8e30d 100644 --- a/ogsr_engine/xrGame/ui/UIProgressBar.h +++ b/ogsr_engine/xrGame/ui/UIProgressBar.h @@ -35,6 +35,7 @@ class CUIProgressBar : public CUIWindow public: bool m_bUseColor; + bool m_bUseMidColor; bool m_bUseGradient; // Alundaio: if false then use only solid color with m_maxColor Fcolor m_minColor; Fcolor m_middleColor; diff --git a/ogsr_engine/xrGame/ui/UIXmlInit.cpp b/ogsr_engine/xrGame/ui/UIXmlInit.cpp index c0461fcbf6..1a155c2e6e 100644 --- a/ogsr_engine/xrGame/ui/UIXmlInit.cpp +++ b/ogsr_engine/xrGame/ui/UIXmlInit.cpp @@ -666,9 +666,12 @@ bool CUIXmlInit::InitProgressBar(CUIXml& xml_doc, LPCSTR path, int index, CUIPro pWnd->m_minColor.set(color); strconcat(sizeof(buf), buf, path, ":middle_color"); - - color = GetColor(xml_doc, buf, index, 0xff); - pWnd->m_middleColor.set(color); + if (xml_doc.NavigateToNode(buf, index)) + { + pWnd->m_bUseMidColor = true; + color = GetColor(xml_doc, buf, index, 0xff); + pWnd->m_middleColor.set(color); + } strconcat(sizeof(buf), buf, path, ":max_color"); From 6ee0ff4c0584be923af16477a072f4916958a4af Mon Sep 17 00:00:00 2001 From: Hrusteckiy Date: Mon, 13 Feb 2023 00:00:07 +0300 Subject: [PATCH 2/2] =?UTF-8?q?UIArtefactPanel:=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D1=82=D0=B8=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B0=D1=80=D1=82=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D0=B2(=D1=81=D0=B2=D0=B5=D1=80=D1=85=D1=83=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B8=D0=B7).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Не уверен, нужно ли использовать поворот через `SetHeading()` вместо вертикального размещения. --- ogsr_engine/xrGame/ui/UIArtefactPanel.cpp | 10 +++++++--- ogsr_engine/xrGame/ui/UIArtefactPanel.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ogsr_engine/xrGame/ui/UIArtefactPanel.cpp b/ogsr_engine/xrGame/ui/UIArtefactPanel.cpp index 110c1938ad..19f956a464 100644 --- a/ogsr_engine/xrGame/ui/UIArtefactPanel.cpp +++ b/ogsr_engine/xrGame/ui/UIArtefactPanel.cpp @@ -9,7 +9,9 @@ void CUIArtefactPanel::InitFromXML(CUIXml& xml, LPCSTR path, int index) CUIXmlInit::InitWindow(xml, path, index, this); m_cell_size.x = xml.ReadAttribFlt(path, index, "cell_width"); m_cell_size.y = xml.ReadAttribFlt(path, index, "cell_height"); - m_fScale = xml.ReadAttribFlt(path, index, "scale"); + m_fScale = xml.ReadAttribFlt(path, index, "scale", 1); + m_iIndent = xml.ReadAttribFlt(path, index, "indent", 1); + m_bVert = xml.ReadAttribInt(path, index, "vert") == 1; } void CUIArtefactPanel::InitIcons(const TIItemContainer& artefacts) @@ -29,7 +31,6 @@ void CUIArtefactPanel::InitIcons(const TIItemContainer& artefacts) void CUIArtefactPanel::Draw() { - const float iIndent = 1.0f; float x = 0.0f; float y = 0.0f; float iHeight; @@ -52,7 +53,10 @@ void CUIArtefactPanel::Draw() m_si.SetRect(0, 0, iWidth, iHeight); m_si.SetPos(x, y); - x = x + iIndent + iWidth; + if (!m_bVert) + x = x + m_iIndent + iWidth; + else + y = y + m_iIndent + iHeight; m_si.Render(); } diff --git a/ogsr_engine/xrGame/ui/UIArtefactPanel.h b/ogsr_engine/xrGame/ui/UIArtefactPanel.h index 6d2abc6d7c..b17499b17d 100644 --- a/ogsr_engine/xrGame/ui/UIArtefactPanel.h +++ b/ogsr_engine/xrGame/ui/UIArtefactPanel.h @@ -18,6 +18,8 @@ class CUIArtefactPanel : public CUIWindow void InitFromXML(CUIXml& xml, LPCSTR path, int index); protected: + bool m_bVert; + float m_iIndent; float m_fScale; Fvector2 m_cell_size; xr_vector m_vRects;