From 1809fb516aeb913939b592683f59d4b4ff4e4d0f Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 29 Aug 2021 01:00:49 +0400 Subject: [PATCH] * GUI: added card hints with current and next rooms in card rules (#8012); --- .../java/org/mage/card/arcane/ManaSymbols.java | 6 ++++++ .../hint/arrow-down-right-square fill-yellow.png | Bin 0 -> 3577 bytes .../hint/arrow-right-square-fill-green.png | Bin 0 -> 4091 bytes .../main/java/mage/abilities/hint/HintUtils.java | 4 +++- .../src/main/java/mage/game/command/Dungeon.java | 15 ++++++++++++++- 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 Mage.Client/src/main/resources/hint/arrow-down-right-square fill-yellow.png create mode 100644 Mage.Client/src/main/resources/hint/arrow-right-square-fill-green.png diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java b/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java index 350d87fd3e8..071c252e6f4 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/ManaSymbols.java @@ -667,6 +667,12 @@ public final class ManaSymbols { if (replaced.contains(HintUtils.HINT_ICON_REQUIRE)) { replaced = replaced.replace(HintUtils.HINT_ICON_REQUIRE, GuiDisplayUtil.getHintIconHtml("require", symbolSize) + " "); } + if (replaced.contains(HintUtils.HINT_ICON_DUNGEON_ROOM_CURRENT)) { + replaced = replaced.replace(HintUtils.HINT_ICON_DUNGEON_ROOM_CURRENT, GuiDisplayUtil.getHintIconHtml("arrow-right-square-fill-green", symbolSize) + " "); + } + if (replaced.contains(HintUtils.HINT_ICON_DUNGEON_ROOM_NEXT)) { + replaced = replaced.replace(HintUtils.HINT_ICON_DUNGEON_ROOM_NEXT, GuiDisplayUtil.getHintIconHtml("arrow-down-right-square fill-yellow", symbolSize) + " "); + } // ignored data restore replaced = replaced diff --git a/Mage.Client/src/main/resources/hint/arrow-down-right-square fill-yellow.png b/Mage.Client/src/main/resources/hint/arrow-down-right-square fill-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..528a795d8615d9a49e4dc4ddef0ba781383fd34f GIT binary patch literal 3577 zcmcgv4Nwzj8s6|z1EL0L)hd>4;QXm>b~pdKB?>0UPYob)74~2U(vb*kv5TqWl zUMaSYQae~}wd&loSF|cU$Fr7tz<9Mi?a^M@F)xub>g6G+KqV>KFA<_;OJKkMp zvh035-~02t&-?C|b%puaW8x>rLl873H^){4{s!f*@&Rx?I)^#|K?;-GYAwuUcn1p? zWzU0W-~?fw2|+VnY}nY6ceL=q=US#@y}#>8<=?x6=?e=zr`y)&E_)s>*<;TU3j1hX{3k7+ zHa>vIe6(}NQ>t;n#{9DeRY6AM%l%Ud9hZwkUq8s zYCTqP>*}Jp9|9)hgq$T31dUFTzY6G;ZIi&-AKb+yz7qQalIFb{O6FG+@CpD8LFsb? z0!5dzKG?yQxjBovx4A_PyBUjmvB8en1uN@v=d2RhMXU0Q=~d-4!KmlXfztydFyLi< z6ddq+IEf5c)FHbhxR;kvH5`KY$}Q@Ff|l3|VJk1Put8%)Xk4#_O@szFVuV&d8`fgD z3B^n(u0t@K#EhhlfWsd(@Fp@&vdA_+>SUiFiT)dB$T>M>3NB;c-2Y_0;J>p~7SiIhd3(1$| z2Wf-}85S)SR|zay#7caHNV8df5N7INHj=N1y~F1{YzOerW`VSdEal_HVxIR5R=IF6 zU)XAeXDoJe3|}eDlzoNatc~)q7PS`B;s|C&v_vt6k+_-EnPy>n62k_dcAjxNtA>Lb z^rTk*11L}%L;0u?!3<40dC^M&uH0U#j70^mObtgWKw5bZF9OFPI$bCVyPeGCBp=1m zY_83s1}SLVZiXaGT7so095G`?3NdT-;9?-0h|y`ljYgdbGccyX{WhMikVPTyALtK; zr-6+-UX4bl(`hi85i>zE2<_0D5r+=bB09`y)MHKxGZ7JM1)>|YDCHSyRgQ`Q7M(gm zZ`A9Z2yJGJ2%*zsh}pqnhy!Dtj6-KKQU<-;2qA5eIc^CQt}5JGi`bRnJC7R<$%&+B zxlJr;S}rlmsKd+dVfeTw&*A-*E*2R5iQ*4GQiyk(n9YVI?wr8aY*n2 zB~oBEv7%&AJ4N0LM`Qr|c$g9dkDI3Cv{66Dg!?~IDD_?aNRkP!x01|j}e2C|M>)ksi$2OSH^<5j^0NqG(}^2lNn5D z%Iri~Mo%CP+KeGU|0aXMftxTV=-`1E?~=-$?){&pLXTMe5ehDAA|jBxQ^v5Odr19< zYAg~098%kV$KQx*ySMT5e=ZR!zi$V|4Eo~s870i^72P%m&u--99Z%8o9II?WvzI_{rt-Q zYhRCUI`ggn)`gFI5AE$;cH-K~4Vvtlu3KN~{*utTCi%v{U-|fgsx}o$zBy@m PQ zvB9+|2c{{jO>4&1+%%TG6We;_Xp z@F4X<*W0yg!5p$>4GdN>i7_$HIwitIfbf_oD#yPHk*`9lRzw#}*t_-;}8A;)`RV zwq)7hV6#gZ(^NR?nRr!9)A+CY;uIcR1{~bJJ5`loZAer?zn*#aq07g2EZ;h&tFQmD z=++zKp>##-tmv)-6~qWby`_Y`*(`2)ry^OZu`Z4!P_kV PvdGQKx9yu(`pka-W6{(= literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/hint/arrow-right-square-fill-green.png b/Mage.Client/src/main/resources/hint/arrow-right-square-fill-green.png new file mode 100644 index 0000000000000000000000000000000000000000..aad1afd64b6dd749fc1b793ac3d975c81a855031 GIT binary patch literal 4091 zcmcgv2~-nj9-nXsO(}w+rlmp}d==k1WO8Q)!fg?2ARJZDB1~o`kTuD~WH=ioyR8&k z3szUriWTei@W8TbrFfAR4_dl_T8mXIwCaLw6%nOXQTI!LllsG>+(O>vXsqPf8W6qV0_ zpx}4cmN(34RQbKx;6Lm5mU*7vbs488sdQ&QSsB0ZEpFQGnALmZW7euC7;1{|`ji=_ zzS^D1>ySV7LMgkg;dJ#lf!h~VoB!-H z-dde-UgDD&SzU3@U&S^(gywvH+v1aH{o1SuT#4GeOqr~?Q!^G@7p(UFGQBsoc^8#_ z`udAe)5<+Il(mTJ1K(URXX4pYNmH77U9$v%I@#3vc^~aLa=Z9}!neJjGHj0XjGU>M zk{(sCC8YQjPUxB+)F+M4diUZ*spKJNj<4d!8*0Ac(B+{hP%Aoh?PK$39c zjJYPA!#GLsDIKM!42&6I1x~Cnhh}JV4*dw#&d0wp0H{?eoi@hwMXz_7Ff+6AKp4Y> zjEOd<78)sjGG(T7O$0S754agL5{;Qjrheh`3B&>1A#B8AOcc)0rc|2NjbvFh5-&F< zh8sLzYar=-^9;MKVK^0wGn9fSM1%quk;6hX6+tk82$RVEgorT&8GLRc;p$?eJ{QUn*N5fNf<1V?RQv$bZBxWeJqN}-kvuXI|jqnt3D zu(yeVN7z$Lfp~_twPWz{M3#r;^K&Sm^f!_}WX4Qun0(wsMP&o-9#dNUN4icM@+i|N z=Z&}t2eXMXnH4;ZiPm$SWx!=%id;h1Q5Rc9NV-jw!31@*k znlh3yX-DOMbd5P(;5w@9zhm#Q)%IlL>HnM}zWseWG-mk!Ie~`mV~2Qr$=;WaR}wbX zta;M<1MesdOj_sc{asUX*gpM7r>%WrI07Ga@EF+wry2Xwd5i)#&Vv|b09|SV$E<0) zcFcw#w>|N(QKgY+LRSr-ctKj2YpOTnV$R*I{de@0Satz zd`5L$5i{@L8xhcqzE9_&UQ<_naE$HcwWZAOxmCQ3H{Vb4`sosS@A~^ETf6(u-&lUh ze`#mO@iNyaPKnQ=&T|2gKPE$${UFpm(y+aB4O8;TbJil??g_-!WkHoQi&kfSlg-+M zt6baM+uS~^@8Jq71lFa{k!3+)o4VcVT}vlNKp!ev1B17tZf!08(KY*6SYy@GU2Y4G zzI}jI85=6pSloNOUT0b7U9UY>0_1cXEmfx`MK)(*dvmfk2wh75X6#0RT1T%iM_^Ldlk6qPpe^LBl_O=Yx!R;$~Qf7_!Hutuf7O&dv z8yN1uWS=7k9wrv{m%4YJSlY|I%2x4n{c5)a{8V*x>f8j@s+8dnpK!^(u_U7q*huI|_NZn)xV zD_#>^JF8DFEeEUYlNps6WyujI zx;=YbKR$TWc4mI)e&03^$QV}z@%H!zTm3mfDkwAS?MT+KthXXr)3R1XvbJTFMzY8o z3K#b*Teqj5^@U7;L4W4_#ii-9I!`~_^A>>o;#n%6ZR^Xy1FLUl#rR{Auw2r z&e_+k9DszN!$1nUeUs&$bt{3i3qyN4cWn>&sSs$MedQi_V6EsKS6eQ!Ybm&67|;J^ zKojtqVo7h@$De<9d1LhMf$qMLMTf6lZCHs9Jh;T^jVRNXC!u#2LZR-FPgp^Yh631^ z*;%Pqe3Dlrb-Z57y5;|^8`K#(?Y^We@9x_D3vJ70Y%P7}UcAR?m!3)CCFf4RjIH8C zHu%2pBAahyx}0BL#*^+p_U?FUfkbsAM$wvUthSc1>rzB zlSFG$$$g!k7t#aCThS`!gCp)9tH0;KflYmLvY6pF{-8NA3~R_qdLDTRMgr3TgJ~yh^>jv`s=>|4UE)G literal 0 HcmV?d00001 diff --git a/Mage/src/main/java/mage/abilities/hint/HintUtils.java b/Mage/src/main/java/mage/abilities/hint/HintUtils.java index 372b4208a4d..e7b7452107a 100644 --- a/Mage/src/main/java/mage/abilities/hint/HintUtils.java +++ b/Mage/src/main/java/mage/abilities/hint/HintUtils.java @@ -18,6 +18,8 @@ public class HintUtils { public static final String HINT_ICON_BAD = "ICON_BAD"; public static final String HINT_ICON_RESTRICT = "ICON_RESTRICT"; public static final String HINT_ICON_REQUIRE = "ICON_REQUIRE"; + public static final String HINT_ICON_DUNGEON_ROOM_CURRENT = "ICON_DUNGEON_ROOM_CURRENT"; + public static final String HINT_ICON_DUNGEON_ROOM_NEXT = "ICON_DUNGEON_ROOM_NEXT"; // public static final String HINT_START_MARK = "
"; // workaround to find hint text in rules list and shows it in html @@ -34,7 +36,7 @@ public class HintUtils { String hex = colorToHtml(color); res = String.format("%s", hex, text); } else { - res = text; + res = (text == null ? "" : text); } // icon diff --git a/Mage/src/main/java/mage/game/command/Dungeon.java b/Mage/src/main/java/mage/game/command/Dungeon.java index 96c7fe0a9a3..7b0841f9220 100644 --- a/Mage/src/main/java/mage/game/command/Dungeon.java +++ b/Mage/src/main/java/mage/game/command/Dungeon.java @@ -11,6 +11,7 @@ import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.Effect; +import mage.abilities.hint.HintUtils; import mage.abilities.text.TextPart; import mage.cards.FrameStyle; import mage.choices.Choice; @@ -125,7 +126,19 @@ public class Dungeon implements CommandObject { "Currently in " + currentRoom.getName() : "Not currently in a room" ) + ")"); - dungeonRooms.stream().map(DungeonRoom::toString).forEach(rules::add); + dungeonRooms.stream() + .map(room -> { + // mark useful rooms by icons + String prefix = ""; + if (room.equals(currentRoom)) { + prefix += HintUtils.prepareText(null, null, HintUtils.HINT_ICON_DUNGEON_ROOM_CURRENT); + } + if (currentRoom != null && currentRoom.getNextRooms().stream().anyMatch(room::equals)) { + prefix += HintUtils.prepareText(null, null, HintUtils.HINT_ICON_DUNGEON_ROOM_NEXT); + } + return prefix + room; + }) + .forEach(rules::add); return rules; }