From b25c611c33ddff1adcdaa3ad56ebc59e632be6f1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 27 Dec 2017 23:05:10 -0500 Subject: [PATCH] More character support, made menus collapsible --- TODO.md | 3 + .../sprites/ui/icons/icon-arrow-down.png | Bin 167 -> 170 bytes .../sprites/ui/icons/icon-arrow-up.png | Bin 199 -> 198 bytes core/assets/bundles/bundle_en_US.properties | 7 +- core/assets/mindustry-saves/1.mins | Bin 0 -> 12739 bytes core/assets/mindustry-saves/2.mins | Bin 0 -> 10619 bytes core/assets/sprites/sprites.png | Bin 82446 -> 82458 bytes core/assets/ui/prose.fnt | 97 -------- core/assets/ui/prose.png | Bin 2027 -> 0 bytes core/assets/ui/square.fnt | 235 ++++++++++++++++++ core/assets/ui/square.png | Bin 0 -> 3639 bytes core/assets/ui/uiskin.json | 2 +- core/src/io/anuke/mindustry/Mindustry.java | 17 +- core/src/io/anuke/mindustry/Vars.java | 2 +- core/src/io/anuke/mindustry/core/Control.java | 15 +- .../src/io/anuke/mindustry/core/Renderer.java | 2 +- core/src/io/anuke/mindustry/core/UI.java | 5 +- .../mindustry/graphics/BlockRenderer.java | 4 +- .../anuke/mindustry/input/AndroidInput.java | 10 +- .../anuke/mindustry/input/DesktopInput.java | 5 + .../anuke/mindustry/input/InputHandler.java | 5 +- .../io/{BundleUtil.java => BundleGen.java} | 7 +- .../mindustry/mapeditor/MapEditorDialog.java | 2 +- .../ui/fragments/BlocksFragment.java | 109 +++++--- .../mindustry/ui/fragments/HudFragment.java | 127 ++++------ .../ui/fragments/PlacementFragment.java | 160 +++++++----- .../ui/fragments/WeaponFragment.java | 2 +- core/src/io/anuke/mindustry/world/Block.java | 8 +- .../blocks/types/distribution/Conveyor.java | 5 + .../blocks/types/distribution/Junction.java | 2 +- .../blocks/types/distribution/Teleporter.java | 19 +- .../world/blocks/types/production/Drill.java | 13 +- .../production/LiquidPowerGenerator.java | 6 +- .../types/production/NuclearReactor.java | 30 ++- .../world/blocks/types/production/Pump.java | 13 +- 35 files changed, 569 insertions(+), 343 deletions(-) create mode 100644 core/assets/mindustry-saves/1.mins create mode 100644 core/assets/mindustry-saves/2.mins delete mode 100644 core/assets/ui/prose.fnt delete mode 100644 core/assets/ui/prose.png create mode 100644 core/assets/ui/square.fnt create mode 100644 core/assets/ui/square.png rename core/src/io/anuke/mindustry/io/{BundleUtil.java => BundleGen.java} (96%) diff --git a/TODO.md b/TODO.md index c7990e10cf..2bcf9d426e 100644 --- a/TODO.md +++ b/TODO.md @@ -38,6 +38,9 @@ _(not necessarily planned!)_ - Solar panels - Deflector shields - Autosave +- Underground blocks +- Configurable outputs/inputs +- Getting items out of the core ### Balance - Slow down progression slightly diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-down.png b/core/assets-raw/sprites/ui/icons/icon-arrow-down.png index 8c6a7fc3b95c0c37aa8357ea01f92940ae4f48a8..b6403714eca1f53cd0be74378aae8504e38e6422 100644 GIT binary patch delta 94 zcmZ3^xQcN?aJaM>FT+2@f72Nl7|cCg977~7Cnqd0OGrsbNci#pzkQu+PY;hyz_)rQ zHlv9trdNLbw^)Eu=pz{RL7qz@gO8y?ON2>+DbbaIfq}u()z4*}Q$iB}WU?S< delta 91 zcmZ3*xSVl9aEO$UzOsuWTMYvPgNdh$V~E7%t!E9n7!*VfUpVsn{!TqB4*9?fXZpqB x)Ey?}OuXeMe*5azcX6eSqVrbhDDS(@IPZ-Jg9$6wX$A%c22WQ%mvv4FO#s#(A*BES diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-up.png b/core/assets-raw/sprites/ui/icons/icon-arrow-up.png index da89b30c25f702c5ba7a7b81edc93375a0976ec5..ebf5bab7c67381da05b724537704b13c4de0cd5b 100644 GIT binary patch delta 122 zcmX@kc#LsEaIv%)FKeGSmjnX?L$IfdV~E7%%mwE=|5vVVo6s*2nZQ$2<2&b2J^NwF2{s(; a3|Bg2W9pa%k1#MWFnGH9xvXoPQxv%j2hvc;Bk#{n7 zn<;p7Cix9^bPmct)suAI;;J8Nc@-pSVJ;yJ9Tx}UFmh;&9$Pfi{B^VgG;H-sWFtIoZ7%N#4#>$1W=D=BQQZU&9II9QFN|c7lPJpw#WMN|S z;4CXSu$VXlg9DsZ0bxlnFie57H08nSBp4XX6~HWU28Kn7V3q^}!#Oz1R0$?l1!r}^ zS&QJT4RF?JILkyCrneN%(p7

BCt@a8?bRRS##ms={<6!dX+{EMqm8Y#^Lf0cX|1 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 delta 17002 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 diff --git a/core/assets/ui/square.fnt b/core/assets/ui/square.fnt new file mode 100644 index 0000000000..2b1e6be5bc --- /dev/null +++ b/core/assets/ui/square.fnt @@ -0,0 +1,235 @@ +info face="5squared pixel Regular" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2 +common lineHeight=44 base=36 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="square.png" +chars count=230 +char id=0 x=238 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=35 xadvance=8 page=0 chnl=0 +char id=33 x=498 y=38 width=6 height=22 xoffset=-1 yoffset=15 xadvance=8 page=0 chnl=0 +char id=34 x=136 y=146 width=14 height=10 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=35 x=260 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=36 x=352 y=38 width=22 height=30 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0 +char id=37 x=282 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=38 x=304 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=39 x=150 y=146 width=6 height=10 xoffset=-1 yoffset=15 xadvance=8 page=0 chnl=0 +char id=40 x=326 y=72 width=10 height=22 xoffset=-1 yoffset=15 xadvance=12 page=0 chnl=0 +char id=41 x=336 y=72 width=10 height=22 xoffset=-1 yoffset=15 xadvance=12 page=0 chnl=0 +char id=42 x=346 y=72 width=22 height=22 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0 +char id=43 x=368 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=44 x=150 y=146 width=6 height=10 xoffset=-1 yoffset=31 xadvance=8 page=0 chnl=0 +char id=45 x=156 y=146 width=22 height=6 xoffset=-1 yoffset=23 xadvance=24 page=0 chnl=0 +char id=46 x=178 y=146 width=6 height=6 xoffset=-1 yoffset=31 xadvance=8 page=0 chnl=0 +char id=47 x=390 y=72 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=48 x=404 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=49 x=426 y=72 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=50 x=440 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=51 x=462 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=52 x=484 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=53 x=0 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=54 x=22 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=55 x=44 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=56 x=66 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=57 x=88 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=58 x=108 y=146 width=6 height=14 xoffset=-1 yoffset=23 xadvance=8 page=0 chnl=0 +char id=59 x=504 y=38 width=6 height=18 xoffset=-1 yoffset=23 xadvance=8 page=0 chnl=0 +char id=60 x=110 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=61 x=114 y=146 width=22 height=14 xoffset=-1 yoffset=19 xadvance=24 page=0 chnl=0 +char id=62 x=124 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=63 x=138 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=64 x=160 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=65 x=182 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=66 x=204 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=67 x=226 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=68 x=248 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=69 x=270 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=70 x=292 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=71 x=314 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=72 x=336 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=73 x=358 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=74 x=372 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=75 x=394 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=76 x=416 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=77 x=438 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=78 x=460 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=79 x=482 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=80 x=0 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=81 x=216 y=72 width=22 height=26 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=82 x=22 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=83 x=44 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=84 x=66 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=85 x=88 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=86 x=110 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=87 x=132 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=88 x=154 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=89 x=176 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=90 x=198 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=91 x=220 y=124 width=10 height=22 xoffset=-1 yoffset=15 xadvance=12 page=0 chnl=0 +char id=92 x=230 y=124 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=93 x=244 y=124 width=10 height=22 xoffset=-1 yoffset=15 xadvance=12 page=0 chnl=0 +char id=97 x=182 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=98 x=204 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=99 x=226 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=100 x=248 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=101 x=270 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=102 x=292 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=103 x=314 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=104 x=336 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=105 x=358 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=106 x=372 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=107 x=394 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=108 x=416 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=109 x=438 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=110 x=460 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=111 x=482 y=102 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=112 x=0 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=113 x=216 y=72 width=22 height=26 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=114 x=22 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=115 x=44 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=116 x=66 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=117 x=88 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=118 x=110 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=119 x=132 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=120 x=154 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=121 x=176 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=122 x=198 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=123 x=254 y=124 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=124 x=504 y=0 width=6 height=30 xoffset=-1 yoffset=11 xadvance=8 page=0 chnl=0 +char id=125 x=268 y=124 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=161 x=504 y=102 width=6 height=22 xoffset=-1 yoffset=15 xadvance=8 page=0 chnl=0 +char id=162 x=374 y=38 width=22 height=30 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0 +char id=163 x=282 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=164 x=304 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=171 x=326 y=124 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=177 x=352 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=187 x=374 y=124 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=191 x=400 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=192 x=44 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=193 x=66 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=194 x=88 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=195 x=110 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=196 x=396 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=197 x=0 y=0 width=22 height=38 xoffset=-1 yoffset=-1 xadvance=24 page=0 chnl=0 +char id=198 x=422 y=124 width=38 height=22 xoffset=-1 yoffset=15 xadvance=40 page=0 chnl=0 +char id=199 x=418 y=38 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=200 x=132 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=201 x=154 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=202 x=176 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=203 x=440 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=204 x=198 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=205 x=212 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=206 x=226 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=207 x=462 y=38 width=14 height=30 xoffset=-1 yoffset=7 xadvance=16 page=0 chnl=0 +char id=208 x=460 y=124 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=209 x=240 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=210 x=262 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=211 x=284 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=212 x=306 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=213 x=328 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=214 x=476 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=216 x=404 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=217 x=350 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=218 x=372 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=219 x=394 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=220 x=0 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=221 x=416 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=222 x=486 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=223 x=0 y=146 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=224 x=44 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=225 x=66 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=226 x=88 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=227 x=110 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=228 x=396 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=229 x=0 y=0 width=22 height=38 xoffset=-1 yoffset=-1 xadvance=24 page=0 chnl=0 +char id=230 x=422 y=124 width=38 height=22 xoffset=-1 yoffset=15 xadvance=40 page=0 chnl=0 +char id=231 x=418 y=38 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=232 x=132 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=233 x=154 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=234 x=176 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=235 x=440 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=236 x=198 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=237 x=212 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=238 x=226 y=0 width=14 height=34 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=239 x=462 y=38 width=14 height=30 xoffset=-1 yoffset=7 xadvance=16 page=0 chnl=0 +char id=240 x=460 y=124 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=241 x=240 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=242 x=262 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=243 x=284 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=244 x=306 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=245 x=328 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=246 x=476 y=38 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=248 x=404 y=72 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=249 x=350 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=250 x=372 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=251 x=394 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=252 x=0 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=253 x=416 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=254 x=486 y=124 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=255 x=22 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=258 x=438 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=259 x=438 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=260 x=44 y=72 width=26 height=30 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=261 x=44 y=72 width=26 height=30 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=262 x=460 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=263 x=460 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=266 x=70 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=267 x=70 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=268 x=482 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=269 x=482 y=0 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=270 x=0 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=271 x=0 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=278 x=92 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=279 x=92 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=280 x=114 y=72 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=281 x=114 y=72 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=282 x=22 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=283 x=22 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=288 x=136 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=289 x=136 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=302 x=158 y=72 width=14 height=30 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=303 x=158 y=72 width=14 height=30 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=321 x=22 y=146 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=322 x=22 y=146 width=26 height=22 xoffset=-1 yoffset=15 xadvance=28 page=0 chnl=0 +char id=323 x=44 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=324 x=44 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=327 x=66 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=328 x=66 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=336 x=88 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=337 x=88 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=338 x=48 y=146 width=38 height=22 xoffset=-1 yoffset=15 xadvance=40 page=0 chnl=0 +char id=339 x=48 y=146 width=38 height=22 xoffset=-1 yoffset=15 xadvance=40 page=0 chnl=0 +char id=340 x=110 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=341 x=110 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=344 x=132 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=345 x=132 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=346 x=154 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=347 x=154 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=348 x=176 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=349 x=176 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=352 x=198 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=353 x=198 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=354 x=172 y=72 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=355 x=172 y=72 width=22 height=30 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +char id=356 x=220 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=357 x=220 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=366 x=22 y=0 width=22 height=38 xoffset=-1 yoffset=-1 xadvance=24 page=0 chnl=0 +char id=367 x=22 y=0 width=22 height=38 xoffset=-1 yoffset=-1 xadvance=24 page=0 chnl=0 +char id=368 x=242 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=369 x=242 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=372 x=264 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=373 x=264 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=374 x=286 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=375 x=286 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=376 x=22 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=377 x=308 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=378 x=308 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=379 x=194 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=380 x=194 y=72 width=22 height=30 xoffset=-1 yoffset=7 xadvance=24 page=0 chnl=0 +char id=381 x=330 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=382 x=330 y=38 width=22 height=34 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=8216 x=150 y=146 width=6 height=10 xoffset=-1 yoffset=15 xadvance=8 page=0 chnl=0 +char id=8217 x=150 y=146 width=6 height=10 xoffset=-1 yoffset=15 xadvance=8 page=0 chnl=0 +char id=8220 x=136 y=146 width=14 height=10 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=8221 x=136 y=146 width=14 height=10 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=8249 x=110 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=8250 x=124 y=102 width=14 height=22 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0 +char id=8364 x=86 y=146 width=22 height=22 xoffset=-1 yoffset=15 xadvance=24 page=0 chnl=0 +kernings count=0 diff --git a/core/assets/ui/square.png b/core/assets/ui/square.png new file mode 100644 index 0000000000000000000000000000000000000000..b220a601bbccf50b76bc6eac14c44a05c2098370 GIT binary patch literal 3639 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelalc{_}Kk45_&F_U`SXJ3IIs z0{{Q_ugX9_RTeZA>!nsWd-FYi`|iI73d>%6>#f@Bef#sl@4DH)|9$xtpUckp;K-9B zDhzMf`-~YC7+4yFCkszz*dTvnACm(E2ZOrW?Qn)0{5kQA1-T3^e-DQi`*TlQA^S&t zTmFN8(jUId?alk$`1s9*$7^1Fz4xhBn8DA-&xh$i-2)3@1||mv3&WfHu=5fg_3ij_ zJf>LrncvUqXS1^3g%-0m?0m+>P<+-joPmR(_^c?yvsu~e7z7xe&C+H#V|qP?(V);d zRrj62_q%uOb;D+xm7lu5`Tn^%zhAH~IN-W)`TH>oLXexf)(dXLas;SZu#HpmaXSQQQ9~?Y;Z_c%Z!kCqpr714BWh5y%$C1dzM+ z0-kX(Fe)&d5oKUH5L3*0U@PN=ROgx5f(u+5m=4_8&2-?K?;LH2bRF2Ia5tdqOK`SS zu;s~kcmK12XtBDzh-UV?smG7@$NT`9?Z7ZYn}MZ)dlkshI~-<0IADLao(FkKDo2As zp@D$`tNv}!}487L6jgV^{yzN9)$_9d znY&C0U;Vf5jJ$20mG@o#OR`SGB_T*CHq7fTj0q^-o`03G z`1PG=<^xI(jm5>^aV^X~z_86>@+A^_$bB!7aVwauO<<5ugg(@AsIyq#Ti zKqsgDUGZwaAF+LpGrR9^>U(_uT(yWq)58 zeh)hcjt_KK!tHH%$oS#nerQmfuIGBzmbZX+{r=ZwH}}de+NU3>zUSTcb^o5+e<>3Y znkZ=W-Bn}GH|C@7`qjhd9$)$pOfhi8E%-GXYVfAz4g_*<8!vfU70Mw5ZYb7TfeTCui@qU8!m6(_y4PY z?Anlirzna6Vh$pd4D1d7 z&9H0F<_TNt+hqQW>oA?+dbviL$2VH$Z<+l@jsTDa1>gLqAek6Z&5kYS{<2;2_$}wE zY=$|TG@ia>)p_b<{9~c5wH(`(kI4;}&lzvG=UH*P@XFipsL8?VOf5dQ(IeSS#J9~bEd4l5gZ9KA*l@NEd_Al1dh4`D;Y18P7J!nxizcs;=6Va zpWA$z4+C~ooNSeX+5oizVgLsyK`}HiN#|?cdV8(!avp2+C&MEL-o6vt6Zihy=VKkw zllTAKx7SwRr0+xcBw%zh(ie_v!cl`>lDM6YPIb=?jZUa9slyW!P}{tSHEnG13g0-TXr0-Y#!D zF6aIIozc!2VRIvOV$><6RjqI5ZI#^>zhK#1^LcRstG>0bWc={OLX?3QQh|WogA{kr zV1Sq}z`*oi7Q>8fJF;Ik{oh+}cz$g+gY1fD^L9k6f3+u2bW&h^`u7iD7jQ6$XTkMg zEqTNk>vr5&d~ngOJpTR_xAxuSXMVNoZn^x5yZzJGt>12?vua!Z_IAe7|5oL1-S09b zyt&N4ib%A$L-c|^D2^JWb81%a`yJhX`Ciw$S-0P=-JF^Kb@>}}{b%q0i3VL;TM=D% zXUD7ikvH@r?_U?&p2lx8zx|x=pQ)$s%QNdh%QI|A79Khcmzf`I;SRZSyk*z@qzHzZ z-aW0wS2#ahy?=V1{MYYdeYaQ1n{3K!jV@hyYFEJaJ*CBuN|UbeE8q!OgmpX27&eI+ zhRDtcEM|4cVep9-+4XeVs#eB;O?##1@UM~!{{8KbK~i4x<0Vm7UT2loflCfpYCw-K zn6U@8G6rnzP|iL+ug6`g-26ZzW*JC;p<+43naItH{^ja>M zHUdHZ;Gp@MlEW%&2e!C&M~m$*wGLp~c6jym*&jB{d-GF~Uz6+3yvuTIS5kMsv5KEk z6VDt!y`2$nbpngn1+}1PWHA5n?z7=6vHZyL+SM=Yi+AsxdgD{6)h0%8JV3G*Bxf?j zNHK)UFRrXooL6`H#G0K~w~O%dGC*RIfurFubHdBl;tWt79{dffTpMDU7JOYRvs(N* zB%OjAD~t?a4>L3@W>R= view.undo()).get(); ImageButton redo = tools.addIButton("icon-redo", 16*2f, () -> view.redo()).get(); - ImageButton grid = tools.addIButton("toggle", "icon-grid", 16*2f, () -> view.setGrid(!view.isGrid())).get(); + tools.addIButton("toggle", "icon-grid", 16*2f, () -> view.setGrid(!view.isGrid())).get(); undo.setDisabled(() -> !view.getStack().canUndo()); redo.setDisabled(() -> !view.getStack().canRedo()); diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 9a262d59ae..066c9dc29e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -10,8 +10,10 @@ import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Section; @@ -28,11 +30,14 @@ import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.Stack; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.ui.layout.Value; import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Strings; public class BlocksFragment implements Fragment{ - private Table desctable; + private Table desctable, itemtable, blocks; + private Stack stack = new Stack(); private Array statlist = new Array<>(); private boolean shown = true; @@ -42,15 +47,25 @@ public class BlocksFragment implements Fragment{ abottom(); aright(); - visible(() -> !GameState.is(State.menu)); + visible(() -> !GameState.is(State.menu) && shown); - Table blocks = new table(){{ + blocks = new table(){{ - new table("button") {{ - visible(() -> player.recipe != null); - desctable = get(); - fillX(); - }}.end().uniformX(); + itemtable = new Table("button"); + itemtable.setVisible(() -> player.recipe == null); + + desctable = new Table("button"); + desctable.setVisible(() -> player.recipe != null); + desctable.update(() -> { + if(player.recipe == null && desctable.getChildren().size != 0){ + desctable.clear(); + } + }); + + stack.add(itemtable); + stack.add(desctable); + + add(stack).fillX().uniformX(); row(); @@ -83,7 +98,7 @@ public class BlocksFragment implements Fragment{ } }); button.setName("sectionbutton" + sec.name()); - add(button).growX().height(54).padTop(sec.ordinal() <= 2 ? -10 : -5); + add(button).growX().height(54).padRight(-1).padTop(sec.ordinal() <= 2 ? -10 : -5); button.getImageCell().size(40).padBottom(4).padTop(2); group.add(button); @@ -110,7 +125,7 @@ public class BlocksFragment implements Fragment{ } }); - table.add(image).size(size + 8).pad(2); + table.add(image).size(size + 8); image.getImageCell().size(size); image.update(() -> { @@ -146,35 +161,17 @@ public class BlocksFragment implements Fragment{ visible(() -> !GameState.is(State.menu) && shown); }}.end().get(); - - row(); - - ImageButton buttons[] = new ImageButton[2]; - float size = 46f; - - float t = 0.2f; - Interpolation ip = Interpolation.pow3Out; - - //TODO fix glitch when resizing - buttons[0] = new imagebutton("icon-arrow-down", 10*2, () -> { - if(blocks.getActions().size != 0) return; - blocks.actions(Actions.translateBy(0, -blocks.getHeight(), t, ip), Actions.call(() -> shown = false)); - buttons[0].actions(Actions.fadeOut(t)); - buttons[1].actions(Actions.fadeIn(t)); - }).padBottom(-5).visible(() -> shown).height(size).uniformX().fillX() - .update(i -> i.getStyle().imageUp = Core.skin.getDrawable(shown ? "icon-arrow-down" : "icon-arrow-up")).get(); - - buttons[1] = new imagebutton("icon-arrow-up", 10*2, () -> { - if(blocks.getActions().size != 0) return; - blocks.actions(Actions.translateBy(0, blocks.getHeight(), t, ip)); - shown = true; - buttons[0].actions(Actions.fadeIn(t)); - buttons[1].actions(Actions.fadeOut(t)); - }).touchable(() -> shown ? Touchable.disabled : Touchable.enabled).size(size).padBottom(-5).padLeft(-size).get(); - - buttons[1].getColor().a = 0f; }}.end(); } + + public void toggle(boolean show, float t, Interpolation ip){ + if(!show){ + blocks.actions(Actions.translateBy(0, -blocks.getHeight() - stack.getHeight(), t, ip), Actions.call(() -> shown = false)); + }else{ + shown = true; + blocks.actions(Actions.translateBy(0, -blocks.getTranslation().y, t, ip)); + } + } void updateRecipe(){ Recipe recipe = player.recipe; @@ -197,7 +194,7 @@ public class BlocksFragment implements Fragment{ header.addImage(region).size(8*5).padTop(4); Label nameLabel = new Label(recipe.result.formalName); nameLabel.setWrap(true); - header.add(nameLabel).padLeft(2).width(130f); + header.add(nameLabel).padLeft(2).width(120f); //extra info if(recipe.result.fullDescription != null){ @@ -288,4 +285,40 @@ public class BlocksFragment implements Fragment{ desctable.add(label).width(200).padTop(4).padBottom(2); } + + public void updateItems(){ + + itemtable.clear(); + itemtable.left(); + + if(control.getMode().infiniteResources){ + return; + } + + Item[] items = Item.values(); + + for(int i = 0; i < control.getItems().length; i ++){ + int amount = control.getItems()[i]; + if(amount == 0) continue; + String formatted = amount > 99999999 ? "inf" : format(amount); + Image image = new Image(Draw.region("icon-" + items[i].name())); + Label label = new Label(formatted); + label.setFontScale(fontscale*1.5f); + itemtable.add(image).size(8*3); + itemtable.add(label).expandX().left(); + if(i % 2 == 1 && i > 0) itemtable.row(); + } + } + + String format(int number){ + if(number > 1000000) { + return Strings.toFixed(number/1000000f, 1) + "[gray]mil"; + }else if(number > 10000){ + return number/1000 + "[gray]k"; + }else if(number > 1000){ + return Strings.toFixed(number/1000f, 1) + "[gray]k"; + }else{ + return number + ""; + } + } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 68b464b98f..d0564654e3 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -5,12 +5,14 @@ import static io.anuke.mindustry.Vars.*; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Interpolation; import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.GameMode; +import io.anuke.ucore.UCore; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Settings; @@ -20,16 +22,21 @@ import io.anuke.ucore.scene.builders.label; import io.anuke.ucore.scene.builders.table; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.Image; +import io.anuke.ucore.scene.ui.ImageButton; import io.anuke.ucore.scene.ui.Label; import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Bundles; public class HudFragment implements Fragment{ - private Table itemtable, respawntable; - private Cell itemcell; + private ImageButton menu, flip, pause; + private Table respawntable; + private Table wavetable; + private boolean shown = true; + private BlocksFragment blockfrag = new BlocksFragment(); public void build(){ + //menu at top left new table(){{ atop(); @@ -37,41 +44,50 @@ public class HudFragment implements Fragment{ new table(){{ left(); - defaults().size(68).left(); + float dsize = 58; + defaults().size(dsize).left(); float isize = 40; - - new imagebutton("icon-menu", isize, ()->{ - ui.showMenu(); - }); - - new imagebutton("icon-settings", isize, ()->{ - ui.showPrefs(); - }); - new imagebutton("icon-pause", isize, ()->{ + menu = new imagebutton("icon-menu", isize, ()->{ + ui.showMenu(); + }).get(); + + flip = new imagebutton("icon-arrow-up", isize, ()->{ + if(wavetable.getActions().size != 0) return; + + float dur = 0.3f; + Interpolation in = Interpolation.pow3Out; + + flip.getStyle().imageUp = Core.skin.getDrawable(shown ? "icon-arrow-down" : "icon-arrow-up"); + + if(shown){ + blockfrag.toggle(false, dur, in); + wavetable.actions(Actions.translateBy(0, wavetable.getHeight() + dsize, dur, in), Actions.call(() -> shown = false)); + }else{ + shown = true; + blockfrag.toggle(true, dur, in); + wavetable.actions(Actions.translateBy(0, -wavetable.getTranslation().y, dur, in)); + } + + }).get(); + + pause = new imagebutton("icon-pause", isize, ()->{ GameState.set(GameState.is(State.paused) ? State.playing : State.paused); - }){{ - get().update(()->{ - get().getStyle().imageUp = Core.skin.getDrawable(GameState.is(State.paused) ? "icon-play" : "icon-pause"); - }); - }}; + }).update(i -> i.getStyle().imageUp = Core.skin.getDrawable(GameState.is(State.paused) ? "icon-play" : "icon-pause")).get(); + }}.end(); - + row(); new table(){{ - get().setTouchable(Touchable.enabled); + touchable(Touchable.enabled); + visible(() -> shown); addWaveTable(); }}.fillX().end(); row(); - - itemtable = new table("button").end().top().left().fillX().size(-1).get(); - itemtable.setTouchable(Touchable.enabled); - itemtable.setVisible(()-> !control.getMode().infiniteResources); - itemcell = get().getCell(itemtable); - get().setVisible(()->!GameState.is(State.menu)); + visible(()->!GameState.is(State.menu)); Label fps = new Label(()->(Settings.getBool("fps") ? (Gdx.graphics.getFramesPerSecond() + " FPS") : "")); row(); @@ -79,7 +95,7 @@ public class HudFragment implements Fragment{ }}.end(); - //ui table + //tutorial ui table new table(){{ control.getTutorial().buildUI(this); @@ -95,28 +111,11 @@ public class HudFragment implements Fragment{ new label("[orange]< "+ Bundles.get("text.paused") + " >").scale(0.75f).pad(6); }}.end(); }}.end(); - - //wave table... - new table(){{ - - if(!Vars.android){ - atop(); - aright(); - }else{ - abottom(); - aleft(); - } - - //addWaveTable(); - - visible(()->!GameState.is(State.menu)); - }}.end(); //respawn background table new table("white"){{ respawntable = get(); respawntable.setColor(Color.CLEAR); - }}.end(); //respawn table @@ -148,6 +147,8 @@ public class HudFragment implements Fragment{ new label("[red]DEBUG MODE").scale(0.5f).left(); }}.end(); } + + blockfrag.build(); } private String getEnemiesRemaining() { @@ -159,12 +160,12 @@ public class HudFragment implements Fragment{ private void addWaveTable(){ float uheight = 66f; - new table("button"){{ + wavetable = new table("button"){{ aleft(); new table(){{ aleft(); - new label(() -> Bundles.format("text.wave", control.getWave())).scale(fontscale*1.5f).left(); + new label(() -> Bundles.format("text.wave", control.getWave())).scale(fontscale*1.5f).left().padLeft(-6); row(); @@ -172,15 +173,15 @@ public class HudFragment implements Fragment{ getEnemiesRemaining() : (control.getTutorial().active() || Vars.control.getMode().toggleWaves) ? "$text.waiting" : Bundles.format("text.wave.waiting", (int) (control.getWaveCountdown() / 60f))) - .minWidth(140).left(); + .minWidth(140).padLeft(-6).padRight(-12).left(); - margin(12f); + margin(10f); get().marginLeft(6); }}.left().end(); playButton(uheight); - }}.height(uheight).fillX().expandX().end(); - + }}.height(uheight).fillX().expandX().end().get(); + wavetable.getParent().getParent().swapActor(wavetable.getParent(), menu.getParent()); } private void playButton(float uheight){ @@ -196,36 +197,12 @@ public class HudFragment implements Fragment{ l.setTouchable(!paused ? Touchable.enabled : Touchable.disabled); }); } - - public void updateItems(){ - - itemtable.clear(); - itemtable.left(); - - if(control.getMode().infiniteResources){ - return; - } - - Item[] items = Item.values(); - for(int i = 0; i < control.getItems().length; i ++){ - int amount = control.getItems()[i]; - if(amount == 0) continue; - String formatted = Mindustry.platforms.format(amount); - if(amount > 99999999){ - formatted = "inf"; - } - Image image = new Image(Draw.region("icon-" + items[i].name())); - Label label = new Label(formatted); - label.setFontScale(fontscale*1.5f); - itemtable.add(image).size(8*3); - itemtable.add(label).left(); - itemtable.row(); - } + public void updateItems(){ + blockfrag.updateItems(); } public void fadeRespawn(boolean in){ - respawntable.addAction(Actions.color(in ? new Color(0, 0, 0, 0.3f) : Color.CLEAR, 0.3f)); } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index e410cf5780..6ee22be3d4 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -3,105 +3,141 @@ package io.anuke.mindustry.ui.fragments; import static io.anuke.mindustry.Vars.*; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Align; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.input.PlaceMode; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.builders.*; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.ImageButton; +import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Mathf; public class PlacementFragment implements Fragment{ + boolean shown = false; + Table breaktable, next; public void build(){ if(android){ //placement table + + float s = 50f; + new table(){{ - visible(()->player.recipe != null && !GameState.is(State.menu)); + visible(() -> !GameState.is(State.menu)); + abottom(); aleft(); - + + ButtonGroup group = new ButtonGroup<>(); + new table(){{ + visible(() -> player.recipe != null); touchable(Touchable.enabled); - + aleft(); new label("$text.placemode"); row(); - + new table("pane"){{ margin(5f); aleft(); - ButtonGroup group = new ButtonGroup<>(); - - defaults().size(54, 58).pad(0); - - for(PlaceMode mode : PlaceMode.values()){ - if(!mode.shown || mode.delete) continue; - - defaults().padBottom(-5.5f); - - new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{ - control.getInput().resetCursor(); - player.placeMode = mode; - }).group(group); - } - - row(); - - Color color = Color.GRAY;//Colors.get("accent"); //Color.valueOf("4d4d4d") - + + defaults().size(s, s + 4).padBottom(-5.5f); + + Color color = Color.GRAY; + new imagebutton("icon-cancel", 14*3, ()->{ player.recipe = null; }).imageColor(color) - .visible(()->player.recipe != null); - - new button("", ()->{}).get().setTouchable(Touchable.disabled);; - + .visible(()->player.recipe != null); + + for(PlaceMode mode : PlaceMode.values()){ + if(!mode.shown || mode.delete) continue; + + new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{ + control.getInput().resetCursor(); + player.placeMode = mode; + }).group(group); + } + new imagebutton("icon-arrow", 14*3, ()->{ player.rotation = Mathf.mod(player.rotation + 1, 4); }).imageColor(color).visible(() -> player.recipe != null).update(image ->{ image.getImage().setRotation(player.rotation*90); image.getImage().setOrigin(Align.center); }); - - }}.left().end(); - }}.end(); - }}.end(); - - new table(){{ - visible(()->player.recipe == null && !GameState.is(State.menu)); - abottom(); - aleft(); - - new label("$text.breakmode"); + + }}.padBottom(-5).left().end(); + }}.left().end(); + row(); - - new table("pane"){{ - margin(5f); - touchable(Touchable.enabled); - aleft(); - ButtonGroup group = new ButtonGroup<>(); - - defaults().size(54, 58).pad(0); - - for(PlaceMode mode : PlaceMode.values()){ - if(!mode.shown || !mode.delete) continue; - - defaults().padBottom(-5.5f); - - new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{ - control.getInput().resetCursor(); - player.breakMode = mode; - }){{ - group.add(get()); - }}; - } - - }}.end(); - }}.end(); + + new table(){{ + abottom(); + aleft(); + + height(s+5+4); + + next = new table("pane"){{ + margin(5f); + + defaults().padBottom(-5.5f); + + new imagebutton("icon-arrow-right", 10 * 3, () -> { + float dur = 0.3f; + Interpolation in = Interpolation.pow3Out; + if(breaktable.getActions().size != 0) return; + + breaktable.getParent().swapActor(breaktable, next); + + if(shown){ + breaktable.actions(Actions.translateBy(-breaktable.getWidth() - 5, 0, dur, in), Actions.call(() -> shown = false)); + }else{ + shown = true; + breaktable.actions(Actions.translateBy(-breaktable.getTranslation().x - 5, 0, dur, in)); + } + }).size(s, s+4); + + }}.end().get(); + + breaktable = new table("pane"){{ + visible(() -> shown); + margin(5f); + marginLeft(0f); + touchable(Touchable.enabled); + aleft(); + + defaults().size(s, s+4); + + for(PlaceMode mode : PlaceMode.values()){ + if(!mode.shown || !mode.delete) continue; + + defaults().padBottom(-5.5f); + + new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{ + control.getInput().resetCursor(); + player.breakMode = mode; + player.placeMode = mode; + }).group(group); + } + + }}.end().get(); + + breaktable.getParent().swapActor(breaktable, next); + + breaktable.getTranslation().set(-breaktable.getPrefWidth(), 0); + + }}.end().get(); + + //one.getParent().swapActor(one, two); + + }}.end(); } } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java b/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java index 0ed2654e16..65b43635eb 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/WeaponFragment.java @@ -52,7 +52,7 @@ public class WeaponFragment implements Fragment{ String description = weapon.description; tiptable.background("button"); - tiptable.add("weapon."+weapon.name()+".name", 0.5f).left().padBottom(3f); + tiptable.add("$weapon."+weapon.name()+".name", 0.5f).left().padBottom(3f); tiptable.row(); tiptable.row(); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 2479b544fa..154702b16f 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -48,7 +48,7 @@ public class Block{ /**whether you can break this with rightclick*/ public boolean breakable; /**whether this block can be drowned in*/ - public boolean liquid; + public boolean liquid; /**time it takes to break*/ public float breaktime = 18; /**tile entity health*/ @@ -91,12 +91,15 @@ public class Block{ this.id = lastid++; } - + + public boolean isLayer(Tile tile){return true;} + public boolean isLayer2(Tile tile){return true;} public void drawLayer(Tile tile){} public void drawLayer2(Tile tile){} public void drawSelect(Tile tile){} public void drawPlace(int x, int y, int rotation, boolean valid){} public void postInit(){} + public void placed(Tile tile){} public void getStats(Array list){ list.add("[gray]size: " + width + "x" + height); @@ -124,6 +127,7 @@ public class Block{ } public void handleItem(Item item, Tile tile, Tile source){ + if(tile.entity == null) return; tile.entity.addItem(item, 1); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java index e1cae1bace..e1d9c82ff1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java @@ -56,6 +56,11 @@ public class Conveyor extends Block{ (Timers.time() % ((20 / 100f) / speed) < (10 / 100f) / speed && acceptItem(Item.stone, tile, null) ? "" : "move"), tile.worldx(), tile.worldy(), rotation * 90); } + + @Override + public boolean isLayer(Tile tile){ + return tile.entity().convey.size > 0; + } @Override public void drawLayer(Tile tile){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java index 8bbfb3bf6b..159a1008ab 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java @@ -25,7 +25,7 @@ public class Junction extends Block{ Tile to = tile.getNearby()[dir]; Timers.run(15, ()->{ - if(to == null || to.entity == null) return; + if(to == null) return; to.block().handleItem(item, to, tile); }); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index e705a69204..0b681d6e1b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -21,11 +21,13 @@ import io.anuke.ucore.util.Mathf; public class Teleporter extends Block implements Configurable{ public static final Color[] colorArray = {Color.ROYAL, Color.ORANGE, Color.SCARLET, Color.FOREST, Color.PURPLE, Color.GOLD, Color.PINK}; public static final int colors = colorArray.length; - - private static Array removal = new Array<>(); - private static Array returns = new Array<>(); + private static ObjectSet[] teleporters = new ObjectSet[colors]; - + private static byte lastColor = 0; + + private Array removal = new Array<>(); + private Array returns = new Array<>(); + static{ for(int i = 0; i < colors; i ++){ teleporters[i] = new ObjectSet<>(); @@ -38,6 +40,11 @@ public class Teleporter extends Block implements Configurable{ solid = true; health = 80; } + + @Override + public void placed(Tile tile){ + tile.entity().color = lastColor; + } @Override public void draw(Tile tile){ @@ -70,12 +77,14 @@ public class Teleporter extends Block implements Configurable{ table.addIButton("icon-arrow-left", 10*3, ()->{ entity.color = (byte)Mathf.mod(entity.color - 1, colors); + lastColor = entity.color; }); table.add().size(40f); table.addIButton("icon-arrow-right", 10*3, ()->{ entity.color = (byte)Mathf.mod(entity.color + 1, colors); + lastColor = entity.color; }); } @@ -100,7 +109,7 @@ public class Teleporter extends Block implements Configurable{ return new TeleporterEntity(); } - static Array findLinks(Tile tile){ + private Array findLinks(Tile tile){ TeleporterEntity entity = tile.entity(); removal.clear(); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java index 9fa7a5fe72..e972907dd8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java @@ -52,14 +52,17 @@ public class Drill extends Block{ tryDump(tile); } } + + @Override + public boolean isLayer(Tile tile){ + return tile.floor() != resource && resource != null && !(resource.drops.equals(tile.floor().drops)); + } @Override public void drawLayer(Tile tile){ - if(tile.floor() != resource && resource != null && !(resource.drops.equals(tile.floor().drops))){ - Draw.colorl(0.85f + Mathf.absin(Timers.time(), 6f, 0.15f)); - Draw.rect("cross", tile.worldx(), tile.worldy()); - Draw.color(); - } + Draw.colorl(0.85f + Mathf.absin(Timers.time(), 6f, 0.15f)); + Draw.rect("cross", tile.worldx(), tile.worldy()); + Draw.color(); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java index d031b423be..cd87d351dd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java @@ -91,11 +91,7 @@ public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){ LiquidPowerEntity entity = tile.entity(); - if(liquid != generateLiquid){ - return false; - } - - return entity.liquidAmount + amount < liquidCapacity && (entity.liquid == liquid || entity.liquidAmount <= 0.01f); + return liquid == generateLiquid && entity.liquidAmount + amount < liquidCapacity && (entity.liquid == liquid || entity.liquidAmount <= 0.01f); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java index 762841c289..17762f97ee 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java @@ -7,6 +7,7 @@ import java.io.IOException; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.DamageArea; @@ -18,11 +19,16 @@ import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Strings; import io.anuke.ucore.util.Tmp; -public class NuclearReactor extends LiquidItemPowerGenerator{ +//TODO possibly proken +public class NuclearReactor extends LiquidPowerGenerator{ protected final int timerFuel = timers++; - + + protected Item generateItem; + protected int itemInput = 5; + protected int itemCapacity = 30; protected Color coolColor = new Color(1, 1, 1, 0f); protected Color hotColor = Color.valueOf("ff9575a3"); protected int fuelUseTime = 140; //time to consume 1 fuel @@ -44,6 +50,12 @@ public class NuclearReactor extends LiquidItemPowerGenerator{ explosive = true; powerCapacity = 80f; } + + @Override + public void getStats(Array list){ + super.getStats(list); + list.add("[powerinfo]Input Item: " + generateItem); + } @Override public void update(Tile tile){ @@ -139,18 +151,26 @@ public class NuclearReactor extends LiquidItemPowerGenerator{ @Override public void drawSelect(Tile tile){ super.drawSelect(tile); - + NuclearReactorEntity entity = tile.entity(); + Vector2 offset = getPlaceOffset(); + + Vars.renderer.drawBar(Color.GREEN, tile.worldx() + offset.x, tile.worldy() + 6 + + offset.y + height*Vars.tilesize/2f, (float)entity.getItem(generateItem) / itemCapacity); + Draw.reset(); float fract = entity.heat; if(fract > 0) fract = Mathf.clamp(fract + 0.2f, 0.24f, 1f); - Vector2 offset = getPlaceOffset(); - Vars.renderer.drawBar(Color.ORANGE, tile.worldx() + offset.x, tile.worldy() + Vars.tilesize * height/2f + 10 + offset.y, fract); } + + @Override + public boolean acceptItem(Item item, Tile tile, Tile source){ + return item == generateItem && tile.entity.getItem(generateItem) < itemCapacity; + } @Override public void draw(Tile tile){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java index 67b15b9978..e09818bc10 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java @@ -49,14 +49,17 @@ public class Pump extends LiquidBlock{ Draw.rect("blank", tile.worldx(), tile.worldy(), 2, 2); Draw.color(); } + + @Override + public boolean isLayer(Tile tile) { + return tile.floor().liquidDrop == null; + } @Override public void drawLayer(Tile tile){ - if(tile.floor().liquidDrop == null){ - Draw.colorl(0.85f + Mathf.absin(Timers.time(), 6f, 0.15f)); - Draw.rect("cross", tile.worldx(), tile.worldy()); - Draw.color(); - } + Draw.colorl(0.85f + Mathf.absin(Timers.time(), 6f, 0.15f)); + Draw.rect("cross", tile.worldx(), tile.worldy()); + Draw.color(); } @Override