From 01051f1c172b0095a7b15650f462f609206f65e0 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 2 Mar 2022 17:15:06 -0500 Subject: [PATCH] v1.2.0: reorganized icons --- .../com/watabou/gltextures/SmartTexture.java | 4 + core/src/main/assets/interfaces/icons.png | Bin 13430 -> 14263 bytes .../shatteredpixeldungeon/ui/Icons.java | 483 +++++++++--------- 3 files changed, 257 insertions(+), 230 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/gltextures/SmartTexture.java b/SPD-classes/src/main/java/com/watabou/gltextures/SmartTexture.java index 7e76cef11..bafd14177 100644 --- a/SPD-classes/src/main/java/com/watabou/gltextures/SmartTexture.java +++ b/SPD-classes/src/main/java/com/watabou/gltextures/SmartTexture.java @@ -114,4 +114,8 @@ public class SmartTexture extends Texture { right / width, bottom / height ); } + + public RectF uvRectBySize(float left, float top, float width, float height){ + return uvRect(left, top, left+width, top+height); + } } diff --git a/core/src/main/assets/interfaces/icons.png b/core/src/main/assets/interfaces/icons.png index caf84255a9efdc52a38fae0fb2bcacbf806e584c..c66cdd3e7012209fb383c42f13e49d052dd2b3d8 100644 GIT binary patch literal 14263 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

Zob@~h6k$(Y5`x$)4nnBnc_mx{|u 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 literal 13430 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%0AbW zjC=bF@np0LN0TFPG(H0LUM|?}WCL%?`~Fr2%q(F|^tWvwwUciRpsDu$7eWrks|XH; zs(??q+EY!EdE;l>>V%NGf?Ri56nn~{EnE$q;kr0lV1tEf6+F(D!js+7cu}T`KM!&s z+Np|sKSM;@$s*lR9pILs%UkmL}H*c8*QmE=%Ru#)z<|>m6^=u&)$Lv zbQbYZT#|~8z2#`?Y(Ye*FOqhKVraMn2PcmR2-YgA2L=+ALrf9)aApymCHw`igbi{C z)_UB{^*PR_x>Lqli~$(Y4c3ivsW8NNVH7U6rsI4=5)KzeV5jRQgj*Y-EW`oTk;k=&8axFRYat{0(MaZXbVEZ%h>Fvacsxq8N+m6ACWb_noLmL&2^)x4_t4_z5P=JY}A|ynFVF$I$ zoox+Mtu2)tg0%{Bcms*bBNhmJ2sGte8x{@!CNG6j|IZ@>EYJ#O1YF<3(R~Ejo8Tkr zhaZhr;Dx9jua0%$;r6i6Eiq>3A<^rDi^`ROh3{}3a7)hd;0NroS--d?Wu_&v~LSlLh z4ve=#baDiVS<&$D@m%O^t>F=@H!z3wkg)upXM)#=%j)~hUJIwfk57Uv5Lj;jx(_p5 zEmX#M;^mQ6%uUcx=x{r(wPvGgD;G6X09xrWn@DfNKEYhCnPP$d7N21K7*U#%{9se@ zg-|MhhpssMO*bOQR1#qpGRXH~`<)OxCjI~8mj5T^w>`@zQg9I;AM7kJY zD^~}_{#x)dQ^b}{GVnB$fv<()f|I@!pJ4qMpZ)Q3{wLplyzu%TUgFcQUSi?f=Qy;t z0(~`U7-^ukZdU@vY7%g)E*m$qcH>-T3?|c)Fi0VPUw#yta(5uj#TMfOO*nDv zFfiPL-uB{!VPOxSV6BHayaN*nK0F<~!tC7qZ~Da$iU2$^z|^|0dQo?v2?t|cP{D|@ zC^t+Gmf}=(JcN`AMt6n5-`apN%Ub8KCcOGuB=~t>3<}Tl zttSp=D(ZYF8szb`Q61xm2q#S>_*sw%>`@t-Tgb-Nf5nKzgfqnT#Z$Zh}Lw zehyr1F^;2_n1HJ-zU)9FT`q}lt0oR>n(NzAKObeUhN2x?uxpzKDx>U?;cbcpH*Mqx z7$Gmv7`wvF;A5w~?6iq3u+Wg?5UiiW7vF!$dHvnzg0H^+V)^mw`#9ZOg7%^~RM09v zS{YAmVJZ$#(I=v?KT?)}gL|^jloO2doUOQeq662bZsPvKYs<5rJQ2))I>RAY?}It~ z7;7z}@TZ1FuV-KWw|qHNOO0vQgw!1@Z80}s-Wkjebf7*s94Bj%kRR&IjF4$~#Joag zq0bm#iHbiV-QyChUxS_62Cgl8gU~@kY{^=6b)+i}i`B6%RrXdKaoB4~qqjH?Ey+Gq zjq^|tVS&^DgQZ|wRiUY(1eaj_3djf_b3ggrYvG0Q<|ScME~;{)F<8mR)xJHrG1Np; zziM3Wrf5(SiEy!rSVmtg%E%;7^=n;0e&B4UPEBv#f~BxY)w zkNmfNJ)BlI+sRlrIndTvlpX9e)0Y>y*qar)QWoX9669dANL|8=ySaggB0w^Qd^W-Q zEuq!VwonpF-lQZZGF99#W2+^zXs#-@Vy+^wQXChs7-X(KW2r7B^0CoM4s+II6Rh8o zi`{wbGp*UllOrXfhQxrGgY_wk6WwJi7x$H{jMXJ9Hs$kae=J=zSeKAI`{fHZ!TJ#X YFLGpg67yB%GXMYp07*qoM6N<$f_O*xAOHXW diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index 0295061e5..98eec7f49 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -26,71 +26,74 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.watabou.noosa.Image; -//TODO the icons asset is getting pretty bloated, should expand the texture and reorganize public enum Icons { - - //button icons - CHECKED, - UNCHECKED, - INFO, - CHALLENGE_OFF, - CHALLENGE_ON, - PREFS, - LANGS, - EXIT, - CLOSE, - ARROW, - DISPLAY, - DATA, - AUDIO, - TALENT, - MAGNIFY, - BUFFS, - BACKPACK_LRG, - PLUS, - - //ingame UI icons - SKULL, - BUSY, - COMPASS, - SLEEP, - ALERT, - LOST, - TARGET, - BACKPACK, - SEED_POUCH, - SCROLL_HOLDER, - WAND_HOLSTER, - POTION_BANDOLIER, - ENERGY, - COIN_SML, - ENERGY_SML, - - //hero & rankings icons - DEPTH, - WARRIOR, - MAGE, - ROGUE, - HUNTRESS, - - //main menu icons + + //title screen icons, variable sizes, spacing for 17x16 ENTER, GOLD, RANKINGS, BADGES, NEWS, CHANGES, + PREFS, SHPX, - - //misc icons - LIBGDX, - WATA, - WARNING, - //credits icons: - //16x16 + //rankings and hero select icons, spacing for 16x16 + DEPTH, + WARRIOR, + MAGE, + ROGUE, + HUNTRESS, + + //grey icons, mainly used for buttons, spacing for 16x16 + EXIT, + DISPLAY, //2 separate images, changes based on orientation + DATA, + AUDIO, + LANGS, + CONTROLLER, + STATS, + CHALLENGE_OFF, + CHALLENGE_ON, + RENAME_OFF, + RENAME_ON, + LEFTARROW, + RIGHTARROW, + + //misc icons, mainly used for buttons, spacing for 16x16 until the smaller icons at the end + UNCHECKED, + CHECKED, + CLOSE, + PLUS, + ARROW, + INFO, + WARNING, + BACKPACK_LRG, + TALENT, + MAGNIFY, + BUFFS, + ENERGY, + COIN_SML, + ENERGY_SML, + BACKPACK, + SEED_POUCH, + SCROLL_HOLDER, + WAND_HOLSTER, + POTION_BANDOLIER, + + //icons that appear in the game itself, variable spacing + TARGET, + SKULL, + BUSY, + COMPASS, + SLEEP, + ALERT, + LOST, + + //icons that appear in the about screen, variable spacing + LIBGDX, ALEKS, - //32x32 + WATA, CELESTI, KRISTJAN, CUBE_CODE, @@ -104,183 +107,203 @@ public enum Icons { public static Image get( Icons type ) { Image icon = new Image( Assets.Interfaces.ICONS ); switch (type) { - case CHECKED: - icon.frame( icon.texture.uvRect( 0, 0, 12, 12 ) ); - break; - case UNCHECKED: - icon.frame( icon.texture.uvRect( 16, 0, 28, 12 ) ); - break; - case INFO: - icon.frame( icon.texture.uvRect( 32, 0, 46, 14 ) ); - break; - case CHALLENGE_ON: - icon.frame( icon.texture.uvRect( 48, 0, 62, 12 ) ); - break; - case CHALLENGE_OFF: - icon.frame( icon.texture.uvRect( 64, 0, 78, 12 ) ); - break; - case PREFS: - icon.frame( icon.texture.uvRect( 80, 0, 94, 14 ) ); - break; - case LANGS: - icon.frame( icon.texture.uvRect( 96, 0, 110, 11 ) ); - break; - case EXIT: - icon.frame( icon.texture.uvRect( 112, 0, 127, 11 ) ); - break; - case CLOSE: - icon.frame( icon.texture.uvRect( 0, 16, 11, 27 ) ); - break; - case ARROW: - icon.frame( icon.texture.uvRect( 16, 16, 27, 27 ) ); - break; - case DISPLAY: - if (PixelScene.landscape()){ - icon.frame( icon.texture.uvRect( 80, 48, 96, 61 ) ); - } else { - icon.frame( icon.texture.uvRect( 32, 16, 45, 32 ) ); - } - break; - case DATA: - icon.frame( icon.texture.uvRect( 48, 16, 64, 31 ) ); - break; - case AUDIO: - icon.frame( icon.texture.uvRect( 64, 16, 78, 30 ) ); - break; - case TALENT: - icon.frame( icon.texture.uvRect( 80, 16, 93, 29 ) ); - break; - case MAGNIFY: - icon.frame( icon.texture.uvRect( 96, 16, 110, 30 ) ); - break; - case BUFFS: - icon.frame( icon.texture.uvRect( 110, 16, 128, 31 ) ); - break; - case BACKPACK_LRG: - icon.frame( icon.texture.uvRect( 64, 80, 80, 96 ) ); - break; - case PLUS: - icon.frame( icon.texture.uvRect( 80, 80, 91, 91 ) ); - break; - case SKULL: - icon.frame( icon.texture.uvRect( 0, 32, 8, 40 ) ); - break; - case BUSY: - icon.frame( icon.texture.uvRect( 8, 32, 16, 40 ) ); - break; - case COMPASS: - icon.frame( icon.texture.uvRect( 0, 40, 7, 45 ) ); - break; - case SLEEP: - icon.frame( icon.texture.uvRect( 16, 32, 25, 40 ) ); - break; - case ALERT: - icon.frame( icon.texture.uvRect( 16, 40, 24, 48 ) ); - break; - case LOST: - icon.frame( icon.texture.uvRect( 24, 40, 32, 48 ) ); - break; - case TARGET: - icon.frame( icon.texture.uvRect( 32, 32, 48, 48 ) ); - break; - case BACKPACK: - icon.frame( icon.texture.uvRect( 48, 32, 58, 42 ) ); - break; - case SCROLL_HOLDER: - icon.frame( icon.texture.uvRect( 58, 32, 68, 42 ) ); - break; - case SEED_POUCH: - icon.frame( icon.texture.uvRect( 68, 32, 78, 42 ) ); - break; - case WAND_HOLSTER: - icon.frame( icon.texture.uvRect( 78, 32, 88, 42 ) ); - break; - case POTION_BANDOLIER: - icon.frame( icon.texture.uvRect( 88, 32, 98, 42 ) ); - break; - case ENERGY: - icon.frame( icon.texture.uvRect( 96, 80, 112, 96 ) ); - break; - case COIN_SML: - icon.frame( icon.texture.uvRect( 112, 80, 119, 87 ) ); - break; - case ENERGY_SML: - icon.frame( icon.texture.uvRect( 112, 88, 120, 95 ) ); - break; - - case DEPTH: - icon.frame( icon.texture.uvRect( 0, 48, 13, 64 ) ); - break; - case WARRIOR: - icon.frame( icon.texture.uvRect( 16, 48, 25, 63 ) ); - break; - case MAGE: - icon.frame( icon.texture.uvRect( 32, 48, 47, 62 ) ); - break; - case ROGUE: - icon.frame( icon.texture.uvRect( 48, 48, 57, 63 ) ); - break; - case HUNTRESS: - icon.frame( icon.texture.uvRect( 64, 48, 80, 64 ) ); - break; - - case ENTER: - icon.frame( icon.texture.uvRect( 0, 64, 16, 80 ) ); - break; - case RANKINGS: - icon.frame( icon.texture.uvRect( 17, 64, 34, 80 ) ); - break; - case BADGES: - icon.frame( icon.texture.uvRect( 34, 64, 50, 80 ) ); - break; - case NEWS: - icon.frame( icon.texture.uvRect( 51, 64, 67, 79 ) ); - break; - case CHANGES: - icon.frame( icon.texture.uvRect( 68, 64, 83, 79 ) ); - break; - case SHPX: - icon.frame( icon.texture.uvRect( 85, 64, 101, 80 ) ); - break; - case GOLD: - icon.frame( icon.texture.uvRect( 102, 64, 119, 80 ) ); - break; - - case LIBGDX: - icon.frame( icon.texture.uvRect( 0, 81, 16, 94 ) ); - break; - case WATA: - icon.frame( icon.texture.uvRect( 17, 81, 34, 93 ) ); - break; - case WARNING: - icon.frame( icon.texture.uvRect( 34, 81, 48, 95 ) ); - break; + case ENTER: + icon.frame( icon.texture.uvRectBySize( 0, 0, 16, 16 ) ); + break; + case GOLD: + icon.frame( icon.texture.uvRectBySize( 17, 0, 17, 16 ) ); + break; + case RANKINGS: + icon.frame( icon.texture.uvRectBySize( 34, 0, 17, 16 ) ); + break; + case BADGES: + icon.frame( icon.texture.uvRectBySize( 51, 0, 16, 16 ) ); + break; + case NEWS: + icon.frame( icon.texture.uvRectBySize( 68, 0, 15, 15 ) ); + break; + case CHANGES: + icon.frame( icon.texture.uvRectBySize( 85, 0, 15, 15 ) ); + break; + case PREFS: + icon.frame( icon.texture.uvRectBySize( 102, 0, 14, 14 ) ); + break; + case SHPX: + icon.frame( icon.texture.uvRectBySize( 119, 0, 16, 16 ) ); + break; - case ALEKS: - icon.frame( icon.texture.uvRect( 48, 80, 64, 96 ) ); - break; - //32*32 icons are scaled down to match game's size - case CELESTI: - icon.frame( icon.texture.uvRect( 0, 96, 32, 128 ) ); - icon.scale.set(PixelScene.align(0.49f)); - break; - case KRISTJAN: - icon.frame( icon.texture.uvRect( 32, 96, 64, 128 ) ); - icon.scale.set(PixelScene.align(0.49f)); - break; - case ARCNOR: - icon.frame( icon.texture.uvRect( 64, 96, 96, 128 ) ); - icon.scale.set(PixelScene.align(0.49f)); - break; - case PURIGRO: - icon.frame( icon.texture.uvRect( 96, 96, 128, 128 ) ); - icon.scale.set(PixelScene.align(0.49f)); - break; - case CUBE_CODE: - icon.frame( icon.texture.uvRect( 101, 32, 128, 62 ) ); - icon.scale.set(PixelScene.align(0.49f)); - break; + case DEPTH: + icon.frame( icon.texture.uvRectBySize( 0, 16, 13, 16 ) ); + break; + case WARRIOR: + icon.frame( icon.texture.uvRectBySize( 16, 16, 9, 15 ) ); + break; + case MAGE: + icon.frame( icon.texture.uvRectBySize( 32, 16, 15, 14 ) ); + break; + case ROGUE: + icon.frame( icon.texture.uvRectBySize( 48, 16, 9, 15 ) ); + break; + case HUNTRESS: + icon.frame( icon.texture.uvRectBySize( 64, 16, 16, 16 ) ); + break; + + case EXIT: + icon.frame( icon.texture.uvRectBySize( 0, 32, 15, 11 ) ); + break; + case DISPLAY: + if (!PixelScene.landscape()){ + icon.frame( icon.texture.uvRectBySize( 16, 32, 13, 16 ) ); + } else { + icon.frame( icon.texture.uvRectBySize( 32, 32, 16, 13 ) ); + } + break; + case DATA: + icon.frame( icon.texture.uvRectBySize( 48, 32, 16, 15 ) ); + break; + case AUDIO: + icon.frame( icon.texture.uvRectBySize( 64, 32, 14, 14 ) ); + break; + case LANGS: + icon.frame( icon.texture.uvRectBySize( 80, 32, 14, 11 ) ); + break; + case CONTROLLER: + icon.frame( icon.texture.uvRectBySize( 96, 32, 16, 12 ) ); + break; + case STATS: + icon.frame( icon.texture.uvRectBySize( 112, 32, 16, 13 ) ); + break; + case CHALLENGE_OFF: + icon.frame( icon.texture.uvRectBySize( 128, 32, 14, 12 ) ); + break; + case CHALLENGE_ON: + icon.frame( icon.texture.uvRectBySize( 144, 32, 14, 12 ) ); + break; + case RENAME_OFF: + icon.frame( icon.texture.uvRectBySize( 160, 32, 15, 14 ) ); + break; + case RENAME_ON: + icon.frame( icon.texture.uvRectBySize( 176, 32, 15, 14 ) ); + break; + case LEFTARROW: + icon.frame( icon.texture.uvRectBySize( 192, 32, 14, 8 ) ); + break; + case RIGHTARROW: + icon.frame( icon.texture.uvRectBySize( 208, 32, 14, 8 ) ); + break; + + case UNCHECKED: + icon.frame( icon.texture.uvRectBySize( 0, 48, 12, 12 ) ); + break; + case CHECKED: + icon.frame( icon.texture.uvRectBySize( 16, 48, 12, 12 ) ); + break; + case CLOSE: + icon.frame( icon.texture.uvRectBySize( 32, 48, 11, 11 ) ); + break; + case PLUS: + icon.frame( icon.texture.uvRectBySize( 48, 48, 11, 11 ) ); + break; + case ARROW: + icon.frame( icon.texture.uvRectBySize( 64, 48, 11, 11 ) ); + break; + case INFO: + icon.frame( icon.texture.uvRectBySize( 80, 48, 14, 14 ) ); + break; + case WARNING: + icon.frame( icon.texture.uvRectBySize( 96, 48, 14, 14 ) ); + break; + case BACKPACK_LRG: + icon.frame( icon.texture.uvRectBySize( 112, 48, 16, 16 ) ); + break; + case TALENT: + icon.frame( icon.texture.uvRectBySize( 128, 48, 13, 13 ) ); + break; + case MAGNIFY: + icon.frame( icon.texture.uvRectBySize( 144, 48, 14, 14 ) ); + break; + case BUFFS: + icon.frame( icon.texture.uvRectBySize( 160, 48, 16, 15 ) ); + break; + case ENERGY: + icon.frame( icon.texture.uvRectBySize( 176, 48, 16, 16 ) ); + break; + case COIN_SML: + icon.frame( icon.texture.uvRectBySize( 192, 48, 7, 7 ) ); + break; + case ENERGY_SML: + icon.frame( icon.texture.uvRectBySize( 192, 56, 8, 7 ) ); + break; + case BACKPACK: + icon.frame( icon.texture.uvRectBySize( 201, 48, 10, 10 ) ); + break; + case SCROLL_HOLDER: + icon.frame( icon.texture.uvRectBySize( 211, 48, 10, 10 ) ); + break; + case SEED_POUCH: + icon.frame( icon.texture.uvRectBySize( 221, 48, 10, 10 ) ); + break; + case WAND_HOLSTER: + icon.frame( icon.texture.uvRectBySize( 231, 48, 10, 10 ) ); + break; + case POTION_BANDOLIER: + icon.frame( icon.texture.uvRectBySize( 241, 48, 10, 10 ) ); + break; + + case TARGET: + icon.frame( icon.texture.uvRectBySize( 0, 64, 16, 16 ) ); + break; + case SKULL: + icon.frame( icon.texture.uvRectBySize( 16, 64, 8, 8 ) ); + break; + case BUSY: + icon.frame( icon.texture.uvRectBySize( 24, 64, 8, 8 ) ); + break; + case COMPASS: + icon.frame( icon.texture.uvRectBySize( 16, 72, 7, 5 ) ); + break; + case SLEEP: + icon.frame( icon.texture.uvRectBySize( 32, 64, 9, 8 ) ); + break; + case ALERT: + icon.frame( icon.texture.uvRectBySize( 32, 72, 8, 8 ) ); + break; + case LOST: + icon.frame( icon.texture.uvRectBySize( 32, 72, 8, 8 ) ); + break; + + case LIBGDX: + icon.frame( icon.texture.uvRectBySize( 0, 96, 16, 13 ) ); + break; + case ALEKS: + icon.frame( icon.texture.uvRectBySize( 16, 96, 16, 13 ) ); + break; + case WATA: + icon.frame( icon.texture.uvRectBySize( 0, 112, 17, 12 ) ); + break; + + //large icons are scaled down to match game's size + case CELESTI: + icon.frame( icon.texture.uvRectBySize( 32, 96, 32, 32 ) ); + icon.scale.set(PixelScene.align(0.49f)); + break; + case KRISTJAN: + icon.frame( icon.texture.uvRectBySize( 64, 96, 32, 32 ) ); + icon.scale.set(PixelScene.align(0.49f)); + break; + case ARCNOR: + icon.frame( icon.texture.uvRectBySize( 96, 96, 32, 32 ) ); + icon.scale.set(PixelScene.align(0.49f)); + break; + case PURIGRO: + icon.frame( icon.texture.uvRectBySize( 128, 96, 32, 32 ) ); + icon.scale.set(PixelScene.align(0.49f)); + break; + case CUBE_CODE: + icon.frame( icon.texture.uvRectBySize( 160, 96, 27, 30 ) ); + icon.scale.set(PixelScene.align(0.49f)); + break; } return icon;