From a8fd5a24f54609533098ab3531417964406941fc Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Thu, 10 Nov 2022 01:17:53 +0100 Subject: [PATCH] Add flag textures and logic for 3 or more flags Only check if FCVAR_DEVELOPMENTONLY or FCVAR_CHEAT is set and return a blue/red colored checkered texture. Return a rainbow checkered if 3 or more flags are encountered which are not indexed. Return half texture if 2 flags are encountered, but the second bit is not indexed. --- r5dev/core/resource.h | 5 + r5dev/gameui/IConsole.cpp | 88 +++++++++++------- r5dev/gameui/IConsole.h | 2 +- r5dev/resource/png/vf_cheat_unknown.png | Bin 0 -> 1846 bytes r5dev/resource/png/vf_cheat_unknown_e.png | Bin 0 -> 1953 bytes .../png/vf_developmentonly_unknown.png | Bin 0 -> 1846 bytes .../png/vf_developmentonly_unknown_e.png | Bin 0 -> 1953 bytes .../png/{vf_default.png => vf_unknown.png} | Bin r5dev/resource/png/vf_unknown_e.png | Bin 0 -> 2040 bytes r5dev/resource/r5dev.rc | 49 +++++----- 10 files changed, 88 insertions(+), 56 deletions(-) create mode 100644 r5dev/resource/png/vf_cheat_unknown.png create mode 100644 r5dev/resource/png/vf_cheat_unknown_e.png create mode 100644 r5dev/resource/png/vf_developmentonly_unknown.png create mode 100644 r5dev/resource/png/vf_developmentonly_unknown_e.png rename r5dev/resource/png/{vf_default.png => vf_unknown.png} (100%) create mode 100644 r5dev/resource/png/vf_unknown_e.png diff --git a/r5dev/core/resource.h b/r5dev/core/resource.h index 1e21eb5a..7636f872 100644 --- a/r5dev/core/resource.h +++ b/r5dev/core/resource.h @@ -26,6 +26,11 @@ #define IDB_PNG22 122 #define IDB_PNG23 123 #define IDB_PNG24 124 +#define IDB_PNG25 125 +#define IDB_PNG26 126 +#define IDB_PNG27 127 +#define IDB_PNG28 128 +#define IDB_PNG29 129 #define DEV 256 #define PNG 256 diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp index f4561f3c..af9988fb 100644 --- a/r5dev/gameui/IConsole.cpp +++ b/r5dev/gameui/IConsole.cpp @@ -368,7 +368,7 @@ void CConsole::SuggestPanel(void) if (con_suggestion_showflags->GetBool()) { - const int k = GetFlagColorIndex(suggest.m_nFlags); + const int k = GetFlagTextureIndex(suggest.m_nFlags); ImGui::Image(m_vFlagIcons[k].m_idIcon, ImVec2(m_vFlagIcons[k].m_nWidth, m_vFlagIcons[k].m_nHeight)); ImGui::SameLine(); } @@ -667,7 +667,7 @@ bool CConsole::LoadFlagIcons(void) bool ret = false; // Get all image resources for displaying flags. - for (int i = IDB_PNG3, k = NULL; i <= IDB_PNG24; i++, k++) + for (int i = IDB_PNG3, k = NULL; i <= IDB_PNG29; i++, k++) { m_vFlagIcons.push_back(MODULERESOURCE(GetModuleResource(i))); MODULERESOURCE& rFlagIcon = m_vFlagIcons[k]; @@ -681,57 +681,79 @@ bool CConsole::LoadFlagIcons(void) } //----------------------------------------------------------------------------- -// Purpose: returns flag image index for CommandBase (must be aligned with resource.h!) +// Purpose: returns flag texture index for CommandBase (must be aligned with resource.h!) +// this will be refactored to build the image procedurally with use of popcnt // Input : nFlags - //----------------------------------------------------------------------------- -int CConsole::GetFlagColorIndex(int nFlags) const +int CConsole::GetFlagTextureIndex(int nFlags) const { - switch (nFlags) + switch (nFlags) // All indices for single/dual flag textures. { - case FCVAR_NONE: - return 1; case FCVAR_DEVELOPMENTONLY: - return 2; - case FCVAR_GAMEDLL: - return 3; - case FCVAR_CLIENTDLL: - return 4; - case FCVAR_REPLICATED: - return 5; - case FCVAR_CHEAT: - return 6; - case FCVAR_RELEASE: return 7; - case FCVAR_MATERIAL_SYSTEM_THREAD: + case FCVAR_GAMEDLL: return 8; - case FCVAR_DEVELOPMENTONLY | FCVAR_GAMEDLL: + case FCVAR_CLIENTDLL: return 9; - case FCVAR_DEVELOPMENTONLY | FCVAR_CLIENTDLL: + case FCVAR_REPLICATED: return 10; - case FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED: + case FCVAR_CHEAT: return 11; - case FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT: + case FCVAR_RELEASE: return 12; - case FCVAR_DEVELOPMENTONLY | FCVAR_MATERIAL_SYSTEM_THREAD: + case FCVAR_MATERIAL_SYSTEM_THREAD: return 13; - case FCVAR_REPLICATED | FCVAR_CHEAT: + case FCVAR_DEVELOPMENTONLY | FCVAR_GAMEDLL: return 14; - case FCVAR_REPLICATED | FCVAR_RELEASE: + case FCVAR_DEVELOPMENTONLY | FCVAR_CLIENTDLL: return 15; - case FCVAR_GAMEDLL | FCVAR_CHEAT: + case FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED: return 16; - case FCVAR_GAMEDLL | FCVAR_RELEASE: + case FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT: return 17; - case FCVAR_CLIENTDLL | FCVAR_CHEAT: + case FCVAR_DEVELOPMENTONLY | FCVAR_MATERIAL_SYSTEM_THREAD: return 18; - case FCVAR_CLIENTDLL | FCVAR_RELEASE: + case FCVAR_REPLICATED | FCVAR_CHEAT: return 19; - case FCVAR_MATERIAL_SYSTEM_THREAD | FCVAR_CHEAT: + case FCVAR_REPLICATED | FCVAR_RELEASE: return 20; - case FCVAR_MATERIAL_SYSTEM_THREAD | FCVAR_RELEASE: + case FCVAR_GAMEDLL | FCVAR_CHEAT: return 21; - default: - return 0; + case FCVAR_GAMEDLL | FCVAR_RELEASE: + return 22; + case FCVAR_CLIENTDLL | FCVAR_CHEAT: + return 23; + case FCVAR_CLIENTDLL | FCVAR_RELEASE: + return 24; + case FCVAR_MATERIAL_SYSTEM_THREAD | FCVAR_CHEAT: + return 25; + case FCVAR_MATERIAL_SYSTEM_THREAD | FCVAR_RELEASE: + return 26; + + default: // Hit when flag is non-indexed or 3+ bits are set. + + int v = __popcnt(nFlags); + switch (v) + { + case 0: + return 0; // Pink checkered texture (FCVAR_NONE) + case 1: + return 1; // Yellow checkered texture (non-indexed). + default: + int ret = NULL; + bool mul = v > 2; // If 3 or more bits are set we display a checkered texture. + + if (nFlags & FCVAR_DEVELOPMENTONLY) + { + return ret = mul ? 4 : 3; + } + else if (nFlags & FCVAR_CHEAT) + { + return ret = mul ? 6 : 5; + } + + return 2; // Rainbow checkered texture (user needs to manually check flags). + } } } diff --git a/r5dev/gameui/IConsole.h b/r5dev/gameui/IConsole.h index 884e316c..f6eb1012 100644 --- a/r5dev/gameui/IConsole.h +++ b/r5dev/gameui/IConsole.h @@ -39,7 +39,7 @@ private: void ClampHistorySize(void); bool LoadFlagIcons(void); - int GetFlagColorIndex(int nFlags) const; + int GetFlagTextureIndex(int nFlags) const; int TextEditCallback(ImGuiInputTextCallbackData* pData); static int TextEditCallbackStub(ImGuiInputTextCallbackData* pData); diff --git a/r5dev/resource/png/vf_cheat_unknown.png b/r5dev/resource/png/vf_cheat_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..4878c22e13ee7ef67e0675ea3fb5bdb36dafa0bd GIT binary patch literal 1846 zcmb_d&u`pB6gC_xTG5I#C*y!rD6^jNkM(-!5{2EAtc24jU8&&&{s6@D{%|9jmZ)MSugCT`-+S+S-^{$f zwfXA#b5EbsH0^wEqq`0F3)S_+xHH@R;uf<>8;g0O*`{x+}|m8 zg4ZZlNrMR$%EmOw0Ig}4SEm`{yRy_nIf&D?@#pRD4LufZUJB#twQ1-xNV(fK)~bN|POznSR4#S5(L|g$ zuI~8_(zG4le^IwEX_>fX5*v{wbuhIoeep9OS}r2G-MzAi1y5~bSe6+z&BDTRb|Sjy?`P87 zmW3MUT(0jy#Fb@Y*-(|L7^(-ld%bsZf*R z`6|$2j_k5hwhaq|+}J@@vyUz6I@Go=!2shqGyp3IRs`X+9$1Mu z+W$|e;51Ts!a%4vVFPJq>0lNu2xu=YN|tij>$VL@wGqdH%CLo{0B3nDa*>Ul2!+HF zs3lv{lZ}ih2p?bOGiNvr)i52*_?6YxDG+S7d25BdW1Wc=Wxeg zvR%z%SW;|soVChI0An+9S?GHn@@>hGFPs+gBOfE1c`ZkXu*F-_(C@|VsFBJ8B|vk# zGW5(?bR#aHd;5zea!tOy7>#0m<|WE_W%stht3FF%EMCVa=ybY_=CqTc1k#5ze-0~D zR8Ckf*9M^JY5ZkADF1@(Jv@6Say;xyf-IW|#D(L7vd|o2Vb}L8%j2Z3{{HN3>blgm zmezg5>=)wlAxj4mc2LuJ^moKdnb8a>B-!7beJGRe4J7=$8^R9;V zsR0l5xg%4MDu+|$>swcUgA?hcUU#j3@#imoynR;FpZejKC&SLw@Iv!)NarM<0!E{Po=h>y2IQ@Ym0;R3}?+eY5-JD{sE@ E4-H{Q1^@s6 literal 0 HcmV?d00001 diff --git a/r5dev/resource/png/vf_cheat_unknown_e.png b/r5dev/resource/png/vf_cheat_unknown_e.png new file mode 100644 index 0000000000000000000000000000000000000000..898290424ec4c2ad8f78ade0c58205d44868b6ee GIT binary patch literal 1953 zcmb_dO>g5w7&hzySZUz|2TqoI*=2D&!szBty9Bz1t;U9>L~hva+P+NP!ri% zra7PuV{>bnGkz>9b0Vin*0=ur=@-jPMBjQ8L@3IKa+d6#7xLlx{+OR1b0Vy*2j=FI z0zoP(W-iltR?=nPs(C4_^=rp6Ye;q6w+7mvc@!O(LsdvK=yYw4{lE-K2X{T6katZN z;huwf4)$!^r9PsrYc@X%tQ8`rhokozTkzDkW>u9_$5|{EorTv?#ni!s5C^%A>)L>@ z%d@OvOFJt!)(j(A@*>HrL}jLCWD|8#^)2vp6+)V~v{~7t2@>WkS?=Ht(jnDA!CPE@ zQp{`Pf;)09Q<+sIU~!9uEJaZZzmhghTXb3NoPtM9Y*(Vo@mVgNLs_bmg3Fy#u(+{y zET5@Ll{58>INHx`G&vm>l2xi0D>Yvi>R`=c4u`rh#Ju|`$%I;z_q3sAj~uZ|_AM7d zx{+_Y-7#`$;8V}L4-14=&D?{XDO`ab#g_XZsyU7b}^GcdQI_Huu{dR2xx&&^c(R5h;duKzV2N1vT5sX6~v;e}q;njb(nYK@jnWw+V1t?`5BX@PUOM;Jn_-yfWjn>-p`C*=gVGgx$_;M)0Tc4Az0qKN_f7uS@4tTj_=hh) gdh*?G+dm%~_%rtH-}%>X=pnkdvp@QN`;#yJ0fl#AZU6uP literal 0 HcmV?d00001 diff --git a/r5dev/resource/png/vf_developmentonly_unknown.png b/r5dev/resource/png/vf_developmentonly_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..76c2b893792f251cec3927458945a9f5bbaf5a8a GIT binary patch literal 1846 zcmb_dO>Epm6gHLkX{91SoZw;{3AMDd9*^x^d*~8{-9RGMAtWm$Q7_ESjCZYFdyMVP zZo&m|sKf#BBLoLdmFO+1IB_Tv^oHQl3-=y5a_JfIygzP4(-Kvzs!Uu$o{{rU2G?hO2Y@y6}za66l>?d6(QTPm-oCO4P&HSL)jQD?W< z4X#qI;u;gGD{GTD1+=DJS)Qbf4`iWtWiLva#$P}EV(5`*8ar-)gR~|4(b{1qw+}Zu z{BXd1VJyF;Uzt!Kh-Ja_Njyw)I%yhHUJB##wQ1;6NHJ&{D`h}^H`vr$DwDcft0QhX zuHNu#R^4`d|FTZ7<(b$sEgM;N>R?KUKK~gIEfXQ#YQHm&1y4<*Ulb`d&GC3#8{0LN z^-Rn6eG?Ot5CjO6A0!2vpd?>fFtlaPvnVYhmFOiS>#9-FG$7Mi32|D{Ciz?@5X_vg z)U;~2ENKc9yuziUY&Z=rxG9G+mPwHV)~c|eQV>+|6KUhPLg&TmK4dhn?L>6mIY_0s zC37{(xLn_|EM(yh#?*Exwk~1o0a%GB zJorzj;51ZO%s{9pW<6=9NpBi02)EzXxP@#?B;uYUP*+$C)ul`PdINi* zOBUI@mqoCo*zh=OnUw&>dg!vQ-)JD;mJIpA@sJ<-7}=}=oTBS-Pa67zxGgnQS)c@H zZkL9h8jG$)Idtz}zC^a=hx5@e(x+acjF)zA8ocbY6vq5@bb?N&%VXLi2LWy}90A>0G$`+3&xd)$|wc+`0efy}t)PoOznP___Pq z-5Ygd|Vdq>~Byz}hG*KS_LU;li$JlWP)H`=$} I{@{~;042&nga7~l literal 0 HcmV?d00001 diff --git a/r5dev/resource/png/vf_developmentonly_unknown_e.png b/r5dev/resource/png/vf_developmentonly_unknown_e.png new file mode 100644 index 0000000000000000000000000000000000000000..f6597389f897f100ca67b77588c15622154e5320 GIT binary patch literal 1953 zcmb_dO>f*p7wZNUau3;G=z$kydK-nJnzTz%*>1Zy`8nYAKle7ZEdtW zJb?TA)%ET>@c-k-zx@EW_p;qD3r*{+SJ$n@tIZQlyJN-U!}2hALb*yhOsG(H7D)zZ zP21R9WQ-rlQV-=MPW#56zyD$AvFIDmyZ{H;Ku+V`vs^ws+Z*$jRZb-RpD_w_H#6Nyq9sE+L=jHnw^u z?wOW@tS)siwQarm84xWO5j_}w+QfpVzA-J!jGE?rKJUz(j>;#dMF=smZQ3>h1S(F` zk}XhLtgje`vfz1~m9a|oijjrtxa=E{>9T|*YiZM>X%jTeT(HcvI=CvS1`6Kdvg3SK z2N&FwGnvS=EC6e@Sm;s^wD2owlcYr#<@O0=)YNt*x)`5k(marbI?lP=K7okqtHiRY zDpfI6Z>XdF+*Xs(K`vRT^0890l~DUD7JV?NgdzIU$AU&Av?4(w6uN{Xhqxgk#1beBNysBF>h^qRHGio1 zaV26kf9YqTIB>MBqr&w)A}x%-xfrp~<%qDJgE+T&H|j|llJ1J_^E`$n#b%dTtE>bt zb|a64#P<<#Btt~FJwzgck;D9+D@54iJ!$9{aR+Lq@<0jbxl$R6CBwp_RbI_p}Y5W%f;T`IMy-2|K81 zynQ`4bM0$tT)n#f*Luuq?_65V{HF^q{JQe|7Ocj~qeY|aV>W3ue)L}!!$uu<7Q^g% zv?MaGk60rw?fa|AaF|rX_7sDM_8gQcNSDJYxAx(8Kfww4!DzTOzJHHD|K+dq+w9KI gpY446{q&VqzC1sF^2OIX)ge0C-W&e<`1v<~0|j?qtN;K2 literal 0 HcmV?d00001 diff --git a/r5dev/resource/png/vf_default.png b/r5dev/resource/png/vf_unknown.png similarity index 100% rename from r5dev/resource/png/vf_default.png rename to r5dev/resource/png/vf_unknown.png diff --git a/r5dev/resource/png/vf_unknown_e.png b/r5dev/resource/png/vf_unknown_e.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d1f91629462a2e340fc3fdd544110a61e3951c GIT binary patch literal 2040 zcmb_d&u`pB6gFIds_m^p;$)ml+c0a7f6pk}DBTTYC7gzIrG{H)XJ&V;tUbndvYSX; zDpaXAkT`HhJ;EOV2mS&MocSX-B5^6tUau3;G=zwiyq@)b^S$rA_l@6+z1>f4-T2^! zrfIhZJN$BA--hq6@Bj21ZtrC~pBI|eS*xzM7B4rCHSL`*?8h`x!i=oG&YdrBHE6RFu8tNA#IYh=%U;{21QM77ov;dNhZyGS*W9&%k5)` zxV93OO;xFisd_^m?cZ%S8SUkgl`0=9HCr`mZ^febdR1eHe)mb73ND{ zHEavYZMn$yhn7t}mpaZmEG%mYjlc?mmFyfCV`Pz`ZBqvWe%-=nU?t-5$-hDcr(=~T z3L1LXOxk3t7aL_&vzHV(*W zWUu!36+fz)SnXf>Stt%1ZRx0R1CK~-A#kpR*vRFGu+TxA+uR?AQjUnfVtbUwaHQDm zJZq&&0HZ(l*oXuHB93H;2scDzOf2NEAasQog*=poeipZev^{=s{Uf$f ztC+=ST>s@@o!edWEJc}@tFMvgW(b6?AHiU%mhD7@AMH$)DcB%~iTP{a{T-(5hlBps z@a`SHSpWXni*NnEo*K_TdwKKDEBxE5M>oHl4)1Ay?!W()|HC)aYBmqHcl$p+eERHf Dce{G+ literal 0 HcmV?d00001 diff --git a/r5dev/resource/r5dev.rc b/r5dev/resource/r5dev.rc index 5bed4e7b..be5eaad0 100644 --- a/r5dev/resource/r5dev.rc +++ b/r5dev/resource/r5dev.rc @@ -55,28 +55,33 @@ IDB_PNG2 DEV "png\\lockedserver.png" // // PNG // -IDB_PNG3 PNG "png\\vf_default.png" -IDB_PNG4 PNG "png\\vf_none.png" -IDB_PNG5 PNG "png\\vf_developmentonly.png" -IDB_PNG6 PNG "png\\vf_gamedll.png" -IDB_PNG7 PNG "png\\vf_clientdll.png" -IDB_PNG8 PNG "png\\vf_replicated.png" -IDB_PNG9 PNG "png\\vf_cheat.png" -IDB_PNG10 PNG "png\\vf_release.png" -IDB_PNG11 PNG "png\\vf_msthread.png" -IDB_PNG12 PNG "png\\vf_developmentonly_gamedll.png" -IDB_PNG13 PNG "png\\vf_developmentonly_clientdll.png" -IDB_PNG14 PNG "png\\vf_developmentonly_replicated.png" -IDB_PNG15 PNG "png\\vf_developmentonly_cheat.png" -IDB_PNG16 PNG "png\\vf_developmentonly_msthread.png" -IDB_PNG17 PNG "png\\vf_replicated_cheat.png" -IDB_PNG18 PNG "png\\vf_replicated_release.png" -IDB_PNG19 PNG "png\\vf_gamedll_cheat.png" -IDB_PNG20 PNG "png\\vf_gamedll_release.png" -IDB_PNG21 PNG "png\\vf_clientdll_cheat.png" -IDB_PNG22 PNG "png\\vf_clientdll_release.png" -IDB_PNG23 PNG "png\\vf_msthread_cheat.png" -IDB_PNG24 PNG "png\\vf_msthread_release.png" +IDB_PNG3 PNG "png\\vf_none.png" +IDB_PNG4 PNG "png\\vf_unknown.png" +IDB_PNG5 PNG "png\\vf_unknown_e.png" +IDB_PNG6 PNG "png\\vf_developmentonly_unknown.png" +IDB_PNG7 PNG "png\\vf_developmentonly_unknown_e.png" +IDB_PNG8 PNG "png\\vf_cheat_unknown.png" +IDB_PNG9 PNG "png\\vf_cheat_unknown_e.png" +IDB_PNG10 PNG "png\\vf_developmentonly.png" +IDB_PNG11 PNG "png\\vf_gamedll.png" +IDB_PNG12 PNG "png\\vf_clientdll.png" +IDB_PNG13 PNG "png\\vf_replicated.png" +IDB_PNG14 PNG "png\\vf_cheat.png" +IDB_PNG15 PNG "png\\vf_release.png" +IDB_PNG16 PNG "png\\vf_msthread.png" +IDB_PNG17 PNG "png\\vf_developmentonly_gamedll.png" +IDB_PNG18 PNG "png\\vf_developmentonly_clientdll.png" +IDB_PNG19 PNG "png\\vf_developmentonly_replicated.png" +IDB_PNG20 PNG "png\\vf_developmentonly_cheat.png" +IDB_PNG21 PNG "png\\vf_developmentonly_msthread.png" +IDB_PNG22 PNG "png\\vf_replicated_cheat.png" +IDB_PNG23 PNG "png\\vf_replicated_release.png" +IDB_PNG24 PNG "png\\vf_gamedll_cheat.png" +IDB_PNG25 PNG "png\\vf_gamedll_release.png" +IDB_PNG26 PNG "png\\vf_clientdll_cheat.png" +IDB_PNG27 PNG "png\\vf_clientdll_release.png" +IDB_PNG28 PNG "png\\vf_msthread_cheat.png" +IDB_PNG29 PNG "png\\vf_msthread_release.png" #endif // English (United States) resources /////////////////////////////////////////////////////////////////////////////