diff --git a/android/Images/EmojiIcons/Great Artist.png b/android/Images/EmojiIcons/Great Artist.png new file mode 100644 index 0000000000..e739808d24 Binary files /dev/null and b/android/Images/EmojiIcons/Great Artist.png differ diff --git a/android/Images/EmojiIcons/Great Engineer.png b/android/Images/EmojiIcons/Great Engineer.png new file mode 100644 index 0000000000..210f55d1d1 Binary files /dev/null and b/android/Images/EmojiIcons/Great Engineer.png differ diff --git a/android/Images/EmojiIcons/Great General.png b/android/Images/EmojiIcons/Great General.png new file mode 100644 index 0000000000..935d07d80d Binary files /dev/null and b/android/Images/EmojiIcons/Great General.png differ diff --git a/android/Images/EmojiIcons/Great Merchant.png b/android/Images/EmojiIcons/Great Merchant.png new file mode 100644 index 0000000000..3c4632aec4 Binary files /dev/null and b/android/Images/EmojiIcons/Great Merchant.png differ diff --git a/android/Images/EmojiIcons/Great Scientist.png b/android/Images/EmojiIcons/Great Scientist.png new file mode 100644 index 0000000000..a6cc4dcbf8 Binary files /dev/null and b/android/Images/EmojiIcons/Great Scientist.png differ diff --git a/android/assets/Construction.atlas b/android/assets/Construction.atlas index 86131c38b7..7e3e9c989a 100644 --- a/android/assets/Construction.atlas +++ b/android/assets/Construction.atlas @@ -6,994 +6,994 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none BuildingIcons/Alhambra rotate: false - xy: 4, 1789 + xy: 4, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Amphitheater rotate: false - xy: 112, 1897 + xy: 112, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Angkor Wat rotate: false - xy: 4, 1681 + xy: 4, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Apollo Program rotate: false - xy: 4, 1573 + xy: 4, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Aqueduct rotate: false - xy: 112, 1681 + xy: 112, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Armory rotate: false - xy: 328, 1897 + xy: 328, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Arsenal rotate: false - xy: 4, 1465 + xy: 4, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bank rotate: false - xy: 112, 1465 + xy: 112, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Barracks rotate: false - xy: 220, 1573 + xy: 220, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bazaar rotate: false - xy: 544, 1897 + xy: 544, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Big Ben rotate: false - xy: 112, 1357 + xy: 112, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bomb Shelter rotate: false - xy: 220, 1465 + xy: 220, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Brandenburg Gate rotate: false - xy: 544, 1789 + xy: 544, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Broadcast Tower rotate: false - xy: 652, 1897 + xy: 652, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Burial Tomb rotate: false - xy: 112, 1249 + xy: 112, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/CN Tower rotate: false - xy: 220, 1357 + xy: 220, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Castle rotate: false - xy: 4, 1033 + xy: 4, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cathedral rotate: false - xy: 328, 1357 + xy: 328, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ceilidh Hall rotate: false - xy: 544, 1573 + xy: 544, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Chichen Itza rotate: false - xy: 760, 1789 + xy: 760, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus rotate: false - xy: 4, 925 + xy: 4, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus Maximus rotate: false - xy: 112, 1033 + xy: 112, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Coffee House rotate: false - xy: 220, 1141 + xy: 220, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colosseum rotate: false - xy: 328, 1249 + xy: 328, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colossus rotate: false - xy: 436, 1357 + xy: 436, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Courthouse rotate: false - xy: 976, 1897 + xy: 220, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cristo Redentor rotate: false - xy: 4, 817 + xy: 328, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Eiffel Tower rotate: false - xy: 436, 1249 + xy: 760, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Factory rotate: false - xy: 544, 1357 + xy: 868, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Fallback rotate: false - xy: 652, 1465 + xy: 976, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Floating Gardens rotate: false - xy: 868, 1681 + xy: 4, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forbidden Palace rotate: false - xy: 976, 1789 + xy: 112, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forge rotate: false - xy: 4, 709 + xy: 328, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Garden rotate: false - xy: 436, 1141 + xy: 760, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Granary rotate: false - xy: 760, 1465 + xy: 1084, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Grand Temple rotate: false - xy: 868, 1573 + xy: 1192, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Great Mosque of Djenne rotate: false - xy: 112, 709 + xy: 436, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Great Wall rotate: false - xy: 436, 1033 + xy: 760, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hagia Sophia rotate: false - xy: 868, 1465 + xy: 1192, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanging Gardens rotate: false - xy: 1084, 1681 + xy: 4, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanse rotate: false - xy: 1192, 1795 + xy: 112, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Harbor rotate: false - xy: 1300, 1897 + xy: 220, 716 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hermitage rotate: false - xy: 112, 601 + xy: 436, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Heroic Epic rotate: false - xy: 220, 709 + xy: 544, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Himeji Castle rotate: false - xy: 328, 817 + xy: 652, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hospital rotate: false - xy: 760, 1249 + xy: 1084, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hubble Space Telescope rotate: false - xy: 868, 1357 + xy: 1192, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hydro Plant rotate: false - xy: 1192, 1687 + xy: 4, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ironworks rotate: false - xy: 112, 493 + xy: 436, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Kremlin rotate: false - xy: 868, 1249 + xy: 1192, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Krepost rotate: false - xy: 976, 1357 + xy: 1300, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Leaning Tower of Pisa rotate: false - xy: 1408, 1789 + xy: 112, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Library rotate: false - xy: 4, 277 + xy: 328, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Lighthouse rotate: false - xy: 112, 385 + xy: 436, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Longhouse rotate: false - xy: 328, 601 + xy: 652, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Machu Picchu rotate: false - xy: 652, 925 + xy: 976, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Manhattan Project rotate: false - xy: 868, 1141 + xy: 1192, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Market rotate: false - xy: 1300, 1573 + xy: 1624, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mausoleum of Halicarnassus rotate: false - xy: 1408, 1681 + xy: 4, 170 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Medical Lab rotate: false - xy: 1624, 1897 + xy: 220, 392 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Academy rotate: false - xy: 112, 277 + xy: 436, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Base rotate: false - xy: 220, 385 + xy: 544, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mint rotate: false - xy: 328, 493 + xy: 652, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monastery rotate: false - xy: 1084, 1249 + xy: 1408, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monument rotate: false - xy: 1192, 1363 + xy: 1516, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mosque rotate: false - xy: 1300, 1465 + xy: 1624, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mud Pyramid Mosque rotate: false - xy: 1408, 1573 + xy: 1732, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mughal Fort rotate: false - xy: 1516, 1681 + xy: 4, 62 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Museum rotate: false - xy: 1624, 1789 + xy: 112, 170 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National College rotate: false - xy: 220, 277 + xy: 544, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National Epic rotate: false - xy: 328, 385 + xy: 652, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National Treasury rotate: false - xy: 436, 493 + xy: 760, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Neuschwanstein rotate: false - xy: 544, 601 + xy: 868, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Notre Dame rotate: false - xy: 760, 817 + xy: 1084, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Nuclear Plant rotate: false - xy: 976, 1033 + xy: 1300, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Observatory rotate: false - xy: 1192, 1255 + xy: 1516, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Opera House rotate: false - xy: 1300, 1357 + xy: 1624, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Oxford University rotate: false - xy: 1408, 1465 + xy: 1732, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Pagoda rotate: false - xy: 1516, 1573 + xy: 1840, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Palace rotate: false - xy: 1624, 1681 + xy: 112, 62 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Paper Maker rotate: false - xy: 1840, 1897 + xy: 328, 279 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Pentagon rotate: false - xy: 328, 277 + xy: 544, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Petra rotate: false - xy: 544, 493 + xy: 760, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Porcelain Tower rotate: false - xy: 868, 817 + xy: 1084, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Public School rotate: false - xy: 1084, 1033 + xy: 1300, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Pyramid rotate: false - xy: 1192, 1147 + xy: 1408, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Recycling Center rotate: false - xy: 1408, 1357 + xy: 1624, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Research Lab rotate: false - xy: 1516, 1465 + xy: 1732, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Satrap's Court rotate: false - xy: 760, 601 + xy: 868, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Seaport rotate: false - xy: 1084, 925 + xy: 1192, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Shrine rotate: false - xy: 1408, 1249 + xy: 1516, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sistine Chapel rotate: false - xy: 1624, 1465 + xy: 1732, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Solar Plant rotate: false - xy: 436, 169 + xy: 652, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Spaceship Factory rotate: false - xy: 544, 277 + xy: 760, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stable rotate: false - xy: 760, 493 + xy: 976, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stadium rotate: false - xy: 868, 601 + xy: 1084, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Statue of Liberty rotate: false - xy: 976, 709 + xy: 1192, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Statue of Zeus rotate: false - xy: 1084, 817 + xy: 1300, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stele rotate: false - xy: 1300, 1033 + xy: 1516, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stock Exchange rotate: false - xy: 1408, 1141 + xy: 1624, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stone Works rotate: false - xy: 1516, 1249 + xy: 1732, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stonehenge rotate: false - xy: 1624, 1357 + xy: 1840, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sydney Opera House rotate: false - xy: 544, 169 + xy: 868, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Taj Mahal rotate: false - xy: 652, 277 + xy: 976, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple rotate: false - xy: 868, 493 + xy: 1192, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple of Artemis rotate: false - xy: 976, 601 + xy: 1300, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Terracotta Army rotate: false - xy: 1192, 823 + xy: 1516, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Library rotate: false - xy: 1300, 925 + xy: 1624, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Lighthouse rotate: false - xy: 1408, 1033 + xy: 1732, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Louvre rotate: false - xy: 1516, 1141 + xy: 1840, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Oracle rotate: false - xy: 1624, 1249 + xy: 760, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Pyramids rotate: false - xy: 1732, 1357 + xy: 868, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Theatre rotate: false - xy: 1840, 1465 + xy: 976, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/United Nations rotate: false - xy: 1084, 601 + xy: 1516, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/University rotate: false - xy: 1192, 715 + xy: 1624, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Utopia Project rotate: false - xy: 1300, 817 + xy: 1732, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls rotate: false - xy: 1732, 1249 + xy: 1084, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls of Babylon rotate: false - xy: 1840, 1357 + xy: 1192, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Wat rotate: false - xy: 1084, 493 + xy: 1624, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Water Mill rotate: false - xy: 1192, 607 + xy: 1732, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Windmill rotate: false - xy: 1300, 709 + xy: 1840, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Workshop rotate: false - xy: 1624, 1033 + xy: 1192, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 MayaCalendar/0 rotate: false - xy: 62, 4 + xy: 1948, 1890 size: 25, 50 orig: 25, 50 offset: 0, 0 index: -1 MayaCalendar/1 rotate: false - xy: 916, 218 + xy: 1564, 868 size: 13, 50 orig: 13, 50 offset: 0, 0 index: -1 MayaCalendar/10 rotate: false - xy: 1898, 1299 + xy: 1456, 760 size: 21, 50 orig: 21, 50 offset: 0, 0 index: -1 MayaCalendar/11 rotate: false - xy: 1300, 651 + xy: 1840, 1192 size: 35, 50 orig: 35, 50 offset: 0, 0 index: -1 MayaCalendar/12 rotate: false - xy: 1408, 759 + xy: 1084, 328 size: 35, 50 orig: 35, 50 offset: 0, 0 index: -1 MayaCalendar/13 rotate: false - xy: 1516, 867 + xy: 1192, 436 size: 35, 50 orig: 35, 50 offset: 0, 0 index: -1 MayaCalendar/14 rotate: false - xy: 1624, 975 + xy: 1300, 543 size: 35, 50 orig: 35, 50 offset: 0, 0 index: -1 MayaCalendar/15 rotate: false - xy: 1732, 1083 + xy: 62, 4 size: 30, 50 orig: 30, 50 offset: 0, 0 index: -1 MayaCalendar/16 rotate: false - xy: 868, 218 + xy: 1408, 760 size: 40, 50 orig: 40, 50 offset: 0, 0 index: -1 MayaCalendar/17 rotate: false - xy: 976, 327 + xy: 1516, 868 size: 40, 50 orig: 40, 50 offset: 0, 0 index: -1 MayaCalendar/18 rotate: false - xy: 1084, 435 + xy: 1624, 976 size: 40, 50 orig: 40, 50 offset: 0, 0 index: -1 MayaCalendar/19 rotate: false - xy: 1192, 549 + xy: 1732, 1084 size: 40, 50 orig: 40, 50 offset: 0, 0 index: -1 MayaCalendar/2 rotate: false - xy: 1024, 327 + xy: 1672, 976 size: 13, 50 orig: 13, 50 offset: 0, 0 index: -1 MayaCalendar/3 rotate: false - xy: 1132, 435 + xy: 1780, 1084 size: 13, 50 orig: 13, 50 offset: 0, 0 index: -1 MayaCalendar/4 rotate: false - xy: 1240, 549 + xy: 1883, 1192 size: 13, 50 orig: 13, 50 offset: 0, 0 index: -1 MayaCalendar/5 rotate: false - xy: 1343, 651 + xy: 1127, 328 size: 10, 50 orig: 10, 50 offset: 0, 0 index: -1 MayaCalendar/6 rotate: false - xy: 170, 111 + xy: 2006, 1948 size: 25, 50 orig: 25, 50 offset: 0, 0 index: -1 MayaCalendar/7 rotate: false - xy: 1948, 1889 + xy: 386, 113 size: 25, 50 orig: 25, 50 offset: 0, 0 index: -1 MayaCalendar/8 rotate: false - xy: 2006, 1947 + xy: 494, 220 size: 25, 50 orig: 25, 50 offset: 0, 0 index: -1 MayaCalendar/9 rotate: false - xy: 1840, 1241 + xy: 1408, 702 size: 25, 50 orig: 25, 50 offset: 0, 0 @@ -1007,924 +1007,945 @@ MayaCalendar/Baktun index: -1 MayaCalendar/Katun rotate: false - xy: 112, 111 + xy: 1948, 1948 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 MayaCalendar/Maya rotate: false - xy: 1948, 1947 + xy: 328, 113 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 MayaCalendar/Tun rotate: false - xy: 1840, 1299 + xy: 436, 220 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 +OtherIcons/ConvertGold + rotate: false + xy: 868, 1790 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/ConvertNothing + rotate: false + xy: 976, 1898 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/ConvertScience + rotate: false + xy: 4, 818 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 OtherIcons/WLTK 1 rotate: false - xy: 1408, 925 + xy: 1840, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/WLTK 2 rotate: false - xy: 1516, 1033 + xy: 868, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/WLTK LR rotate: false - xy: 1624, 1141 + xy: 976, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/African Forest Elephant rotate: false - xy: 4, 1897 + xy: 4, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Anti-Aircraft Gun rotate: false - xy: 112, 1789 + xy: 112, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Anti-Tank Gun rotate: false - xy: 220, 1897 + xy: 220, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Archer rotate: false - xy: 220, 1789 + xy: 220, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Artillery rotate: false - xy: 112, 1573 + xy: 112, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Atlatlist rotate: false - xy: 220, 1681 + xy: 220, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Atomic Bomb rotate: false - xy: 328, 1789 + xy: 328, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/B17 rotate: false - xy: 436, 1897 + xy: 436, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ballista rotate: false - xy: 4, 1357 + xy: 4, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Battering Ram rotate: false - xy: 328, 1681 + xy: 328, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Battleship rotate: false - xy: 436, 1789 + xy: 436, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Berserker rotate: false - xy: 4, 1249 + xy: 4, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bomber rotate: false - xy: 328, 1573 + xy: 328, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bowman rotate: false - xy: 436, 1681 + xy: 436, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Brute rotate: false - xy: 4, 1141 + xy: 4, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Camel Archer rotate: false - xy: 328, 1465 + xy: 328, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cannon rotate: false - xy: 436, 1573 + xy: 436, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Caravel rotate: false - xy: 544, 1681 + xy: 544, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Carolean rotate: false - xy: 652, 1789 + xy: 652, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Carrier rotate: false - xy: 760, 1897 + xy: 760, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cataphract rotate: false - xy: 112, 1141 + xy: 112, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Catapult rotate: false - xy: 220, 1249 + xy: 220, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cavalry rotate: false - xy: 436, 1465 + xy: 436, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chariot Archer rotate: false - xy: 652, 1681 + xy: 652, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chu-Ko-Nu rotate: false - xy: 868, 1897 + xy: 868, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Companion Cavalry rotate: false - xy: 544, 1465 + xy: 544, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Composite Bowman rotate: false - xy: 652, 1573 + xy: 652, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Conquistador rotate: false - xy: 760, 1681 + xy: 760, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cossack rotate: false - xy: 868, 1789 + xy: 112, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Crossbowman rotate: false - xy: 112, 925 + xy: 436, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Destroyer rotate: false - xy: 220, 1033 + xy: 544, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Dromon rotate: false - xy: 328, 1141 + xy: 652, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Fighter rotate: false - xy: 760, 1573 + xy: 1084, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Foreign Legion rotate: false - xy: 1084, 1897 + xy: 220, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Frigate rotate: false - xy: 112, 817 + xy: 436, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galleass rotate: false - xy: 220, 925 + xy: 544, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galley rotate: false - xy: 328, 1033 + xy: 652, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Gatling Gun rotate: false - xy: 544, 1249 + xy: 868, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Giant Death Robot rotate: false - xy: 652, 1357 + xy: 976, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Artist rotate: false - xy: 976, 1681 + xy: 4, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Engineer rotate: false - xy: 1084, 1789 + xy: 112, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great General rotate: false - xy: 1192, 1903 + xy: 220, 824 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 UnitIcons/Great Merchant rotate: false - xy: 4, 601 + xy: 328, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Prophet rotate: false - xy: 220, 817 + xy: 544, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Scientist rotate: false - xy: 328, 925 + xy: 652, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Bomber rotate: false - xy: 544, 1141 + xy: 868, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Infantry rotate: false - xy: 652, 1249 + xy: 976, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Guided Missile rotate: false - xy: 760, 1357 + xy: 1084, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hakkapeliitta rotate: false - xy: 976, 1573 + xy: 1300, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Helicopter Gunship rotate: false - xy: 4, 493 + xy: 328, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hoplite rotate: false - xy: 436, 925 + xy: 760, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horse Archer rotate: false - xy: 544, 1033 + xy: 868, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horseman rotate: false - xy: 652, 1141 + xy: 976, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hussar rotate: false - xy: 976, 1465 + xy: 1300, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hwach'a rotate: false - xy: 1084, 1573 + xy: 1408, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Infantry rotate: false - xy: 1300, 1789 + xy: 112, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Inquisitor rotate: false - xy: 1408, 1897 + xy: 220, 608 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ironclad rotate: false - xy: 4, 385 + xy: 328, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Jaguar rotate: false - xy: 220, 601 + xy: 544, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Janissary rotate: false - xy: 328, 709 + xy: 652, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Jet Fighter rotate: false - xy: 436, 817 + xy: 760, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Keshik rotate: false - xy: 544, 925 + xy: 868, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Khan rotate: false - xy: 652, 1033 + xy: 976, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Knight rotate: false - xy: 760, 1141 + xy: 1084, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Lancer rotate: false - xy: 1084, 1465 + xy: 1408, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landship rotate: false - xy: 1192, 1579 + xy: 1516, 1898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landsknecht rotate: false - xy: 1300, 1681 + xy: 4, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Legion rotate: false - xy: 1516, 1897 + xy: 220, 500 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longbowman rotate: false - xy: 220, 493 + xy: 544, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longswordsman rotate: false - xy: 436, 709 + xy: 760, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Machine Gun rotate: false - xy: 544, 817 + xy: 868, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mandekalu Cavalry rotate: false - xy: 760, 1033 + xy: 1084, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Maori Warrior rotate: false - xy: 976, 1249 + xy: 1300, 1574 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Marauder rotate: false - xy: 1084, 1357 + xy: 1408, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Marine rotate: false - xy: 1192, 1471 + xy: 1516, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mechanized Infantry rotate: false - xy: 1516, 1789 + xy: 112, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mehal Sefari rotate: false - xy: 4, 169 + xy: 328, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Minuteman rotate: false - xy: 436, 601 + xy: 760, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Missile Cruiser rotate: false - xy: 544, 709 + xy: 868, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Missionary rotate: false - xy: 652, 817 + xy: 976, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mobile SAM rotate: false - xy: 760, 925 + xy: 1084, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Modern Armor rotate: false - xy: 868, 1033 + xy: 1192, 1358 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mohawk Warrior rotate: false - xy: 976, 1141 + xy: 1300, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketeer rotate: false - xy: 1732, 1897 + xy: 220, 284 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketman rotate: false - xy: 4, 62 + xy: 328, 387 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 UnitIcons/Naresuan's Elephant rotate: false - xy: 112, 169 + xy: 436, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Norwegian Ski Infantry rotate: false - xy: 652, 709 + xy: 976, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Nuclear Missile rotate: false - xy: 868, 925 + xy: 1192, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Nuclear Submarine rotate: false - xy: 1084, 1141 + xy: 1408, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Panzer rotate: false - xy: 1732, 1789 + xy: 220, 176 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Paratrooper rotate: false - xy: 220, 169 + xy: 436, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Persian Immortal rotate: false - xy: 436, 385 + xy: 652, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Pictish Warrior rotate: false - xy: 652, 601 + xy: 868, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Pikeman rotate: false - xy: 760, 709 + xy: 976, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Privateer rotate: false - xy: 976, 925 + xy: 1192, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Quinquereme rotate: false - xy: 1300, 1249 + xy: 1516, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rifleman rotate: false - xy: 1624, 1573 + xy: 1840, 1790 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rocket Artillery rotate: false - xy: 1732, 1681 + xy: 220, 68 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/SS Booster rotate: false - xy: 1840, 1789 + xy: 328, 171 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/SS Cockpit rotate: false - xy: 328, 169 + xy: 436, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/SS Engine rotate: false - xy: 436, 277 + xy: 544, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/SS Stasis Chamber rotate: false - xy: 544, 385 + xy: 652, 494 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Samurai rotate: false - xy: 652, 493 + xy: 760, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Scout rotate: false - xy: 868, 709 + xy: 976, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Sea Beggar rotate: false - xy: 976, 817 + xy: 1084, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Settler rotate: false - xy: 1192, 1039 + xy: 1300, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ship of the Line rotate: false - xy: 1300, 1141 + xy: 1408, 1250 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Sipahi rotate: false - xy: 1516, 1357 + xy: 1624, 1466 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Skirmisher rotate: false - xy: 1732, 1573 + xy: 1840, 1682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Slinger rotate: false - xy: 1840, 1681 + xy: 544, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Spearman rotate: false - xy: 652, 385 + xy: 868, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Stealth Bomber rotate: false - xy: 1192, 931 + xy: 1408, 1142 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Submarine rotate: false - xy: 1732, 1465 + xy: 652, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Swordsman rotate: false - xy: 1840, 1573 + xy: 760, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Tank rotate: false - xy: 760, 385 + xy: 1084, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Tercio rotate: false - xy: 1084, 709 + xy: 1408, 1034 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trebuchet rotate: false - xy: 652, 169 + xy: 1084, 602 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Triplane rotate: false - xy: 760, 277 + xy: 1192, 710 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trireme rotate: false - xy: 868, 384 + xy: 1300, 817 size: 100, 101 orig: 100, 101 offset: 0, 0 index: -1 UnitIcons/Turtle Ship rotate: false - xy: 976, 493 + xy: 1408, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/War Chariot rotate: false - xy: 760, 169 + xy: 1300, 709 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/War Elephant rotate: false - xy: 868, 276 + xy: 1408, 818 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Warrior rotate: false - xy: 976, 385 + xy: 1516, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Work Boats rotate: false - xy: 1408, 817 + xy: 976, 278 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Worker rotate: false - xy: 1516, 925 + xy: 1084, 386 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Zero rotate: false - xy: 1732, 1141 + xy: 1300, 601 size: 100, 100 orig: 100, 100 offset: 0, 0 diff --git a/android/assets/Construction.png b/android/assets/Construction.png index c384c7ae48..d14868fada 100644 Binary files a/android/assets/Construction.png and b/android/assets/Construction.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index e6663ec49e..c63a423869 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -41,56 +41,91 @@ CityStateIcons/Religious index: -1 EmojiIcons/Culture rotate: false - xy: 1270, 1122 + xy: 1918, 1770 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Faith rotate: false - xy: 1378, 1230 + xy: 1270, 1020 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Food rotate: false - xy: 1486, 1344 + xy: 1378, 1122 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Gold rotate: false - xy: 1594, 1452 + xy: 1486, 1230 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +EmojiIcons/Great Artist + rotate: false + xy: 1594, 1338 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +EmojiIcons/Great Engineer + rotate: false + xy: 1702, 1446 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +EmojiIcons/Great General + rotate: false + xy: 356, 720 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +EmojiIcons/Great Merchant + rotate: false + xy: 1004, 906 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +EmojiIcons/Great Scientist + rotate: false + xy: 1810, 1604 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Happiness rotate: false - xy: 1702, 1554 + xy: 1976, 1770 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 414, 720 + xy: 588, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Science rotate: false - xy: 530, 720 + xy: 762, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 762, 720 + xy: 1868, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -265,70 +300,70 @@ ImprovementIcons/Railroad index: -1 ImprovementIcons/Remove Fallout rotate: false - xy: 250, 0 + xy: 1054, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Forest rotate: false - xy: 350, 0 + xy: 1162, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Jungle rotate: false - xy: 350, 0 + xy: 1162, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Marsh rotate: false - xy: 450, 0 - size: 100, 100 - orig: 100, 100 + xy: 838, 1187 + size: 100, 99 + orig: 100, 99 offset: 0, 0 index: -1 ImprovementIcons/Remove Railroad rotate: false - xy: 550, 0 + xy: 946, 1288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Road rotate: false - xy: 650, 0 + xy: 1054, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Repair rotate: false - xy: 1270, 1720 + xy: 1270, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1162, 1504 + xy: 1054, 1288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 1378, 1396 + xy: 1162, 1078 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 1594, 1618 + xy: 1378, 1288 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -403,13 +438,6 @@ StatIcons/Science orig: 100, 100 offset: 0, 0 index: -1 -OtherIcons/ConvertScience - rotate: false - xy: 622, 886 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 OtherIcons/AirSweep rotate: false xy: 4, 369 @@ -433,28 +461,28 @@ OtherIcons/Aircraft index: -1 OtherIcons/ArrowRight rotate: false - xy: 838, 804 + xy: 838, 805 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 NotificationIcons/MoveAutomatedUnits rotate: false - xy: 838, 804 + xy: 838, 805 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 NotificationIcons/NextUnit rotate: false - xy: 838, 804 + xy: 838, 805 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 838, 804 + xy: 838, 805 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -475,7 +503,7 @@ OtherIcons/Banner index: -1 OtherIcons/Camera rotate: false - xy: 896, 829 + xy: 1270, 987 size: 25, 25 orig: 25, 25 offset: 0, 0 @@ -517,7 +545,7 @@ OtherIcons/Cities index: -1 OtherIcons/CityState rotate: false - xy: 1162, 1014 + xy: 1810, 1662 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -587,21 +615,14 @@ OtherIcons/Hexagon index: -1 OtherIcons/Improvements rotate: false - xy: 1918, 1770 + xy: 1062, 906 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 -OtherIcons/Unique - rotate: false - xy: 1921, 1655 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 OtherIcons/Link rotate: false - xy: 1004, 906 + xy: 472, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -671,7 +692,7 @@ OtherIcons/Multiplayer index: -1 OtherIcons/Nations rotate: false - xy: 1976, 1770 + xy: 530, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -783,140 +804,140 @@ OtherIcons/Quickstart index: -1 OtherIcons/Remove Heresy rotate: false - xy: 1054, 1504 + xy: 1270, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resources rotate: false - xy: 946, 1288 + xy: 838, 1079 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 1054, 1396 + xy: 946, 1180 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Search rotate: false - xy: 1378, 1720 + xy: 1270, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/SecretOptions rotate: false - xy: 838, 1078 + xy: 1378, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Settings rotate: false - xy: 1054, 1288 + xy: 838, 971 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 1270, 1504 + xy: 1054, 1180 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 838, 970 + xy: 1378, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/Sleep rotate: false - xy: 838, 970 + xy: 1378, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Speaker rotate: false - xy: 946, 1072 + xy: 1486, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Spy rotate: false - xy: 1270, 1396 + xy: 946, 964 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Spy_White rotate: false - xy: 1378, 1504 + xy: 1054, 1072 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 1486, 1618 + xy: 1162, 1186 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 1054, 1072 + xy: 1594, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/Stop rotate: false - xy: 1054, 1072 + xy: 1594, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/StopMove rotate: false - xy: 1054, 1072 + xy: 1594, 1612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 1270, 1288 + xy: 1054, 964 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/Swap rotate: false - xy: 1270, 1288 + xy: 1054, 964 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Terrains rotate: false - xy: 704, 720 + xy: 1868, 1604 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Timer rotate: false - xy: 1486, 1510 + xy: 1270, 1186 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -930,35 +951,42 @@ OtherIcons/Triangle index: -1 OtherIcons/Turn right rotate: false - xy: 1054, 964 + xy: 1594, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Tyrannosaurus rotate: false - xy: 1162, 1072 + xy: 1702, 1612 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/Unique + rotate: false + xy: 1810, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Wait rotate: false - xy: 1378, 1288 + xy: 1270, 1078 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/Wait rotate: false - xy: 1378, 1288 + xy: 1270, 1078 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Wonders rotate: false - xy: 1810, 1720 + xy: 1702, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1133,84 +1161,84 @@ ResourceIcons/Porcelain index: -1 ResourceIcons/Salt rotate: false - xy: 1270, 1612 + xy: 1162, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 1162, 1396 + xy: 946, 1072 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1378, 1612 + xy: 1162, 1288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1486, 1720 + xy: 1270, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 1162, 1288 + xy: 838, 863 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 946, 964 + xy: 1486, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1162, 1180 + xy: 1702, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Truffles rotate: false - xy: 1702, 1720 + xy: 1486, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1270, 1180 + xy: 1162, 970 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 1486, 1402 + xy: 1378, 1180 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 1594, 1510 + xy: 1486, 1288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 1702, 1612 + xy: 1594, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1250,20 +1278,6 @@ StatIcons/Gold orig: 100, 100 offset: 0, 0 index: -1 -OtherIcons/ConvertGold - rotate: false - xy: 298, 1426 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 -OtherIcons/ConvertNothing - rotate: false - xy: 1923, 1545 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 StatIcons/Happiness rotate: false xy: 514, 1642 @@ -1273,7 +1287,7 @@ StatIcons/Happiness index: -1 StatIcons/InterceptRange rotate: false - xy: 356, 720 + xy: 1810, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1294,14 +1308,14 @@ StatIcons/Population index: -1 StatIcons/Range rotate: false - xy: 1062, 906 + xy: 646, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 472, 720 + xy: 704, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1315,21 +1329,21 @@ StatIcons/ReligiousStrength index: -1 StatIcons/Resistance rotate: false - xy: 838, 1186 + xy: 1378, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 1054, 1180 + xy: 1594, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 646, 720 + xy: 1868, 1662 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1420,7 +1434,7 @@ UnitActionIcons/FoundCity index: -1 UnitActionIcons/HideMore rotate: false - xy: 1810, 1662 + xy: 414, 720 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1455,35 +1469,35 @@ UnitActionIcons/Upgrade index: -1 UnitActionIcons/RemoveHeresy rotate: false - xy: 1162, 1612 + xy: 1162, 1504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/SetUp rotate: false - xy: 946, 1180 + xy: 1486, 1720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitActionIcons/ShowMore rotate: false - xy: 588, 720 + xy: 896, 805 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitActionIcons/Star rotate: false - xy: 1594, 1726 + xy: 1270, 1294 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 UnitActionIcons/StartGoldenAge rotate: false - xy: 838, 862 + xy: 1378, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 0c7aa209c8..6bc23e34f9 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index c3a18e0ee7..3a8a23918b 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -24,6 +24,11 @@ class StatTreeNode { val children = LinkedHashMap() private var innerStats: Stats? = null + fun setInnerStat(stat: Stat, value: Float) { + if (innerStats == null) innerStats = Stats() + innerStats!![stat] = value + } + private fun addInnerStats(stats: Stats) { if (innerStats == null) innerStats = stats.clone() // Copy the stats instead of referencing them else innerStats!!.add(stats) // What happens if we add 2 stats to the same leaf? @@ -48,6 +53,13 @@ class StatTreeNode { } } + fun clone() : StatTreeNode { + val new = StatTreeNode() + new.innerStats = this.innerStats?.clone() + new.children.putAll(this.children) + return new + } + val totalStats: Stats get() { val toReturn = Stats() diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index 6c9dd05bc4..e8ab1d6612 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -82,6 +82,13 @@ class CityScreen( } } + private val detailedStatsButton = "Stats".toTextButton().apply { + labelCell.pad(10f) + onActivation { + DetailedStatsPopup(this@CityScreen).open() + } + } + /** Holds City tiles group*/ private var tileGroups = ArrayList() @@ -127,6 +134,7 @@ class CityScreen( stage.addActor(tileTable) stage.addActor(cityPickerTable) // add late so it's top in Z-order and doesn't get covered in cramped portrait stage.addActor(exitCityButton) + stage.addActor(detailedStatsButton) update() globalShortcuts.add(Input.Keys.LEFT) { page(-1) } @@ -173,6 +181,8 @@ class CityScreen( cityStatsTable.update(statsHeight) cityStatsTable.setPosition(stage.width - posFromEdge, stage.height - posFromEdge, Align.topRight) + detailedStatsButton.setPosition(cityStatsTable.x - detailedStatsButton.width, stage.height - 20f, Align.top) + // Top center: Annex/Raze button updateAnnexAndRazeCityButton() diff --git a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt index 725893dd09..6e8ac0747b 100644 --- a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.Touchable import com.badlogic.gdx.scenes.scene2d.ui.Cell +import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.utils.Align @@ -25,12 +26,17 @@ import com.unciv.ui.utils.BaseScreen import com.unciv.ui.utils.ExpanderTab import com.unciv.ui.utils.Fonts import com.unciv.ui.utils.extensions.addSeparator +import com.unciv.ui.utils.extensions.center import com.unciv.ui.utils.extensions.colorFromRGB import com.unciv.ui.utils.extensions.onClick +import com.unciv.ui.utils.extensions.setSize import com.unciv.ui.utils.extensions.surroundWithCircle +import com.unciv.ui.utils.extensions.toGroup import com.unciv.ui.utils.extensions.toLabel import java.text.DecimalFormat import kotlin.math.ceil +import kotlin.math.max +import kotlin.math.min import kotlin.math.round import com.unciv.ui.utils.AutoScrollPane as ScrollPane @@ -103,15 +109,13 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { // begin lowerTable addCitizenManagement() + addGreatPersonPointInfo(cityInfo) if (!cityInfo.population.getMaxSpecialists().isEmpty()) { addSpecialistInfo() } if (cityInfo.religion.getNumberOfFollowers().isNotEmpty() && cityInfo.civInfo.gameInfo.isReligionEnabled()) addReligionInfo() - - addStatInfo() - addGreatPersonPointInfo(cityInfo) addBuildingsInfo() upperTable.pack() @@ -221,22 +225,40 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { } } + // Buildings sorted alphabetically + wonders.sortBy { it.name } + specialistBuildings.sortBy { it.name } + otherBuildings.sortBy { it.name } + + val totalTable = Table() + lowerTable.addCategory("Buildings", totalTable, false) + if (specialistBuildings.isNotEmpty()) { val specialistBuildingsTable = Table() - addCategory("Specialist Buildings", specialistBuildingsTable) + totalTable.add().row() + totalTable.addSeparator(color = Color.LIGHT_GRAY) + totalTable.add("Specialist Buildings".toLabel().apply { setAlignment(Align.center) }).growX() + totalTable.addSeparator(color = Color.LIGHT_GRAY) for (building in specialistBuildings) addBuildingButton(building, specialistBuildingsTable) + totalTable.add(specialistBuildingsTable).growX().right().row() } if (wonders.isNotEmpty()) { val wondersTable = Table() - addCategory("Wonders", wondersTable) + totalTable.addSeparator(color = Color.LIGHT_GRAY) + totalTable.add("Wonders".toLabel().apply { setAlignment(Align.center) }).growX() + totalTable.addSeparator(color = Color.LIGHT_GRAY) for (building in wonders) addBuildingButton(building, wondersTable) + totalTable.add(wondersTable).growX().right().row() } if (otherBuildings.isNotEmpty()) { val regularBuildingsTable = Table() - addCategory("Buildings", regularBuildingsTable) + totalTable.addSeparator(color = Color.LIGHT_GRAY) + totalTable.add("Other".toLabel().apply { setAlignment(Align.center) }).growX() + totalTable.addSeparator(color = Color.LIGHT_GRAY) for (building in otherBuildings) addBuildingButton(building, regularBuildingsTable) + totalTable.add(regularBuildingsTable).growX().right().row() } } @@ -286,166 +308,75 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { cityScreen.update() } - destinationTable.add(button).pad(1f).expandX().right().row() + destinationTable.add(button).pad(1f).padBottom(2f).padTop(2f).expandX().right().row() } - private fun addCategory(category: String, showHideTable: Table) { + private fun Table.addCategory(category: String, showHideTable: Table, startsOpened: Boolean = true, innerPadding: Float = 10f) : ExpanderTab { val expanderTab = ExpanderTab( title = category, fontSize = Constants.defaultFontSize, persistenceID = "CityInfo.$category", + startsOutOpened = startsOpened, + defaultPad = innerPadding, onChange = { onContentResize() } ) { it.add(showHideTable).fillX().right() } - lowerTable.add(expanderTab).growX().row() + add(expanderTab).growX().row() + return expanderTab } + private fun addGreatPersonPointInfo(cityInfo: CityInfo) { - private fun addStatsToHashmap( - statTreeNode: StatTreeNode, - hashMap: HashMap, - stat: Stat, - showDetails: Boolean, - indentation: Int = 0 - ) { - for ((name, child) in statTreeNode.children) { - val statAmount = child.totalStats[stat] - if (statAmount == 0f) continue - hashMap["- ".repeat(indentation) + name.tr()] = statAmount - if (showDetails) addStatsToHashmap(child, hashMap, stat, showDetails, indentation + 1) - } - } + val greatPeopleTable = Table() - private fun Table.addStatInfo() { - val cityStats = cityScreen.city.cityStats - - val showFaith = cityScreen.city.civInfo.gameInfo.isReligionEnabled() - for (stat in Stat.values()) { - if (stat == Stat.Faith && !showFaith) continue - val statValuesTable = Table() - statValuesTable.touchable = Touchable.enabled - addCategory(stat.name, statValuesTable) - - updateStatValuesTable(stat, cityStats, statValuesTable) - } - } - - private fun updateStatValuesTable( - stat: Stat, - cityStats: CityStats, - statValuesTable: Table, - showDetails:Boolean = false - ) { - statValuesTable.clear() - statValuesTable.defaults().pad(2f) - statValuesTable.onClick { - updateStatValuesTable( - stat, - cityStats, - statValuesTable, - !showDetails - ) - onContentResize() - } - - val relevantBaseStats = LinkedHashMap() - - if (stat != Stat.Happiness) - addStatsToHashmap(cityStats.baseStatTree, relevantBaseStats, stat, showDetails) - else relevantBaseStats.putAll(cityStats.happinessList) - for (key in relevantBaseStats.keys.toList()) - if (relevantBaseStats[key] == 0f) relevantBaseStats.remove(key) - - if (relevantBaseStats.isEmpty()) return - - statValuesTable.add("Base values".toLabel(fontSize = FONT_SIZE_STAT_INFO_HEADER)).pad(4f) - .colspan(2).row() - var sumOfAllBaseValues = 0f - for (entry in relevantBaseStats) { - val specificStatValue = entry.value - if (!entry.key.startsWith('-')) - sumOfAllBaseValues += specificStatValue - statValuesTable.add(entry.key.toLabel()).left() - statValuesTable.add(specificStatValue.toOneDecimalLabel()).row() - } - statValuesTable.addSeparator() - statValuesTable.add("Total".toLabel()) - statValuesTable.add(sumOfAllBaseValues.toOneDecimalLabel()).row() - - val relevantBonuses = LinkedHashMap() - addStatsToHashmap(cityStats.statPercentBonusTree, relevantBonuses, stat, showDetails) - - val totalBonusStats = cityStats.statPercentBonusTree.totalStats - if (totalBonusStats[stat] != 0f) { - statValuesTable.add("Bonuses".toLabel(fontSize = FONT_SIZE_STAT_INFO_HEADER)).colspan(2) - .padTop(20f).row() - for ((source, bonusAmount) in relevantBonuses) { - statValuesTable.add(source.toLabel()).left() - statValuesTable.add(bonusAmount.toPercentLabel()).row() // negative bonus - } - statValuesTable.addSeparator() - statValuesTable.add("Total".toLabel()) - statValuesTable.add(totalBonusStats[stat].toPercentLabel()).row() // negative bonus - - - statValuesTable.add("Final".toLabel(fontSize = FONT_SIZE_STAT_INFO_HEADER)).colspan(2) - .padTop(20f).row() - var finalTotal = 0f - for (entry in cityStats.finalStatList) { - val specificStatValue = entry.value[stat] - finalTotal += specificStatValue - if (specificStatValue == 0f) continue - statValuesTable.add(entry.key.toLabel()) - statValuesTable.add(specificStatValue.toOneDecimalLabel()).row() - } - statValuesTable.addSeparator() - statValuesTable.add("Total".toLabel()) - statValuesTable.add(finalTotal.toOneDecimalLabel()).row() - } - - statValuesTable.pack() - - if (stat != Stat.Happiness) { - val toggleButton = getToggleButton(showDetails) - statValuesTable.addActor(toggleButton) - toggleButton.setPosition(0f, statValuesTable.height, Align.topLeft) - } - - statValuesTable.padBottom(4f) - } - - private fun getToggleButton(showDetails: Boolean): IconCircleGroup { - val label = (if (showDetails) "-" else "+").toLabel() - label.setAlignment(Align.center) - return label - .surroundWithCircle(25f, color = BaseScreen.skinStrings.skinConfig.baseColor) - .surroundWithCircle(27f, false) - } - - private fun Table.addGreatPersonPointInfo(cityInfo: CityInfo) { val greatPersonPoints = cityInfo.getGreatPersonPointsForNextTurn() val allGreatPersonNames = greatPersonPoints.asSequence().flatMap { it.value.keys }.distinct() + + if (allGreatPersonNames.none()) + return + for (greatPersonName in allGreatPersonNames) { - val expanderName = "[$greatPersonName] points" - val greatPersonTable = Table() - addCategory(expanderName, greatPersonTable) - for ((source, gppCounter) in greatPersonPoints) { + + var gppPerTurn = 0 + + for ((_, gppCounter) in greatPersonPoints) { val gppPointsFromSource = gppCounter[greatPersonName]!! if (gppPointsFromSource == 0) continue - greatPersonTable.add(source.toLabel()).padRight(10f) - greatPersonTable.add(gppPointsFromSource.toLabel()).row() + gppPerTurn += gppPointsFromSource } + + val info = Table() + + info.add(ImageGetter.getUnitIcon(greatPersonName, Color.GOLD).toGroup(20f)) + .left().padBottom(4f).padRight(5f) + info.add("$greatPersonName (+$gppPerTurn)".toLabel()).left().padBottom(4f).expandX().row() + + val gppCurrent = cityInfo.civInfo.greatPeople.greatPersonPointsCounter[greatPersonName] + val gppNeeded = cityInfo.civInfo.greatPeople.pointsForNextGreatPerson + + val percent = gppCurrent!! / gppNeeded.toFloat() + + val progressBar = ImageGetter.ProgressBar(300f, 25f, false) + progressBar.setBackground(Color.BLACK.cpy().apply { a = 0.8f }) + progressBar.setProgress(Color.ORANGE, percent) + progressBar.apply { + val bar = ImageGetter.getWhiteDot() + bar.color = Color.GRAY + bar.setSize(width+5f, height+5f) + bar.center(this) + addActor(bar) + bar.toBack() + } + progressBar.setLabel(Color.WHITE, "$gppCurrent/$gppNeeded", fontSize = 14) + + info.add(progressBar).colspan(2).left().expandX().row() + + greatPeopleTable.add(info).growX().top().padBottom(10f) + greatPeopleTable.add(ImageGetter.getPortraitImage(greatPersonName, 50f)).row() } - } - companion object { - private const val FONT_SIZE_STAT_INFO_HEADER = 22 - - private fun Float.toPercentLabel() = - "${if (this>0f) "+" else ""}${DecimalFormat("0.#").format(this)}%".toLabel() - private fun Float.toOneDecimalLabel() = - DecimalFormat("0.#").format(this).toLabel() + lowerTable.addCategory("Great People", greatPeopleTable) } } diff --git a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt index 3f45805915..1af632db53 100644 --- a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt +++ b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt @@ -3,6 +3,7 @@ package com.unciv.ui.cityscreen import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.utils.Align +import com.unciv.UncivGame import com.unciv.logic.city.CityInfo import com.unciv.logic.map.TileInfo import com.unciv.ui.images.ImageGetter @@ -46,11 +47,11 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin when { tileInfo.getOwner() != city.civInfo -> { // outside of civ boundary dim(0.3f) - yieldGroup.isVisible = true + yieldGroup.isVisible = UncivGame.Current.settings.showTileYields } tileInfo !in city.tilesInRange -> { // within city but not close enough to be workable - yieldGroup.isVisible = true + yieldGroup.isVisible = UncivGame.Current.settings.showTileYields dim(0.5f) } diff --git a/core/src/com/unciv/ui/cityscreen/DetailedStatsPopup.kt b/core/src/com/unciv/ui/cityscreen/DetailedStatsPopup.kt new file mode 100644 index 0000000000..518bec9540 --- /dev/null +++ b/core/src/com/unciv/ui/cityscreen/DetailedStatsPopup.kt @@ -0,0 +1,273 @@ +package com.unciv.ui.cityscreen + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Stage +import com.badlogic.gdx.scenes.scene2d.ui.Label +import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.badlogic.gdx.utils.Align +import com.unciv.logic.city.StatTreeNode +import com.unciv.models.stats.Stat +import com.unciv.models.stats.Stats +import com.unciv.models.translations.tr +import com.unciv.ui.images.IconCircleGroup +import com.unciv.ui.popup.Popup +import com.unciv.ui.utils.AutoScrollPane +import com.unciv.ui.utils.BaseScreen +import com.unciv.ui.utils.KeyCharAndCode +import com.unciv.ui.utils.extensions.addSeparator +import com.unciv.ui.utils.extensions.brighten +import com.unciv.ui.utils.extensions.darken +import com.unciv.ui.utils.extensions.onClick +import com.unciv.ui.utils.extensions.surroundWithCircle +import com.unciv.ui.utils.extensions.toLabel +import java.text.DecimalFormat + +class DetailedStatsPopup(val cityScreen: CityScreen, stageToShowOn: Stage) : Popup( + stageToShowOn = stageToShowOn, + scrollable = false) { + + constructor(screen: CityScreen) : this(screen, screen.stage) + + private val totalTable = Table() + + private var sourceHighlighted: String? = null + private var onlyWithStat: Stat? = null + private var isDetailed: Boolean = false + + private val colorTotal: Color = Color.BLUE.brighten(0.5f) + private val colorSelector: Color = Color.GREEN.darken(0.5f) + + init { + + val scrollPane = AutoScrollPane(totalTable) + scrollPane.setOverscroll(false, false) + val scrollPaneCell = add(scrollPane) + scrollPaneCell.maxHeight(cityScreen.stage.height *3 / 4) + + row() + addCloseButton("Cancel", KeyCharAndCode('n')) + update() + } + + private fun update() { + + totalTable.clear() + + val cityStats = cityScreen.city.cityStats + val showFaith = cityScreen.city.civInfo.gameInfo.isReligionEnabled() + + val stats = when { + onlyWithStat != null -> listOfNotNull(onlyWithStat) + !showFaith -> Stat.values().filter { it != Stat.Faith } + else -> Stat.values().toList() + } + + totalTable.defaults().pad(3f).padLeft(0f).padRight(0f) + + totalTable.add(getToggleButton(isDetailed).onClick { + isDetailed = !isDetailed + update() }).minWidth(150f).grow() + + for (stat in stats) { + val label = (stat.character + " " + stat.name).toLabel() + label.onClick { + onlyWithStat = if (onlyWithStat == null) stat else null + update() + } + totalTable.add(wrapInTable(label, if (onlyWithStat == stat) colorSelector else null)) + .minWidth(if (onlyWithStat == stat) 150f else 110f).grow() + } + totalTable.row() + + totalTable.addSeparator().padBottom(2f) + totalTable.add("Base stats".toLabel().apply { setAlignment(Align.center) }) + .colspan(totalTable.columns).padLeft(0f).padRight(0f).growX().row() + totalTable.addSeparator().padTop(2f) + traverseTree(totalTable, stats, cityStats.baseStatTree, mergeHappiness = true, percentage = false) + + totalTable.addSeparator().padBottom(2f) + totalTable.add("Bonuses".toLabel().apply { setAlignment(Align.center) }) + .colspan(totalTable.columns).padLeft(0f).padRight(0f).growX().row() + totalTable.addSeparator().padTop(2f) + traverseTree(totalTable, stats, cityStats.statPercentBonusTree, percentage = true) + + totalTable.addSeparator().padBottom(2f) + totalTable.add("Final".toLabel().apply { setAlignment(Align.center) }) + .colspan(totalTable.columns).padLeft(0f).padRight(0f).growX().row() + totalTable.addSeparator().padTop(2f) + + val final = LinkedHashMap() + val map = cityStats.finalStatList.toSortedMap() + + for ((key, value) in cityScreen.city.cityStats.happinessList) { + if (!map.containsKey(key)) { + map[key] = Stats() + map[key]!![Stat.Happiness] = value + } else if (map[key]!![Stat.Happiness] == 0f) { + map[key]!![Stat.Happiness] = value + } + } + + for ((source, finalStats) in map) { + + if (finalStats.all { it.value == 0f }) + continue + + if (onlyWithStat != null && finalStats[onlyWithStat!!] == 0f) + continue + + val label = source.toLabel().apply { + setAlignment(Align.left) + onClick { + sourceHighlighted = if (sourceHighlighted == source) null else source + update() + } + } + + var color: Color? = null + + if (sourceHighlighted == source) + color = colorSelector + + totalTable.add(wrapInTable(label, color, Align.left)).grow() + + for (stat in stats) { + val value = finalStats[stat] + val cell = when (value) { + 0f -> "-".toLabel() + else -> value.toOneDecimalLabel() + } + + totalTable.add(wrapInTable(cell, color)).grow() + + var f = final[stat] + if (f == null) + f = 0f + f += value + final[stat] = f + + } + totalTable.row() + } + + totalTable.add(wrapInTable("Total".toLabel(), colorTotal)).grow() + for (stat in stats) { + totalTable.add(wrapInTable(final[stat]?.toOneDecimalLabel(), colorTotal)).grow() + } + totalTable.row() + } + + private fun getToggleButton(showDetails: Boolean): IconCircleGroup { + val label = (if (showDetails) "-" else "+").toLabel() + label.setAlignment(Align.center) + return label + .surroundWithCircle(25f, color = BaseScreen.skinStrings.skinConfig.baseColor) + .surroundWithCircle(27f, false) + } + + private fun traverseTree( + table: Table, + stats: List, + statTreeNode: StatTreeNode, + mergeHappiness: Boolean = false, + percentage: Boolean = false, + indentation: Int = 0 + ) { + + val total = LinkedHashMap() + val map = statTreeNode.children.toSortedMap() + + if (mergeHappiness) { + for ((key, value) in cityScreen.city.cityStats.happinessList) { + if (!map.containsKey(key)) { + map[key] = StatTreeNode() + map[key]?.setInnerStat(Stat.Happiness, value) + } else if (map[key]!!.totalStats.happiness == 0f) { + map[key]?.setInnerStat(Stat.Happiness, value) + } + } + } + + for ((name, child) in map) { + + val text = "- ".repeat(indentation) + name.tr() + + if (child.totalStats.all { it.value == 0f }) { + table.row() + continue + } + + if (onlyWithStat != null && child.totalStats[onlyWithStat!!] == 0f) { + table.row() + continue + } + + val label = text.toLabel().apply { + setAlignment(Align.left) + onClick { + sourceHighlighted = if (sourceHighlighted == text) null else text + update() + } + } + + var color: Color? = null + + if (sourceHighlighted == text) + color = colorSelector + + table.add(wrapInTable(label, color, Align.left)).fill().left() + + for (stat in stats) { + val value = child.totalStats[stat] + val cell = when { + value == 0f -> "-".toLabel() + percentage -> value.toPercentLabel() + else -> value.toOneDecimalLabel() + } + + table.add(wrapInTable(cell, color)).grow() + + if (indentation == 0) { + var current = total[stat] + if (current == null) + current = 0f + total[stat] = current + value + } + } + + table.row() + if (isDetailed) + traverseTree(table, stats, child, percentage = percentage, indentation = indentation + 1) + + } + + if (indentation == 0) { + table.add(wrapInTable("Total".toLabel(), colorTotal)).grow() + for (stat in stats) { + if (percentage) + table.add(wrapInTable(total[stat]?.toPercentLabel(), colorTotal)).grow() + else + table.add(wrapInTable(total[stat]?.toOneDecimalLabel(), colorTotal)).grow() + } + table.row() + } + + } + + private fun wrapInTable(label: Label?, color: Color? = null, align: Int = Align.center) : Table { + val tbl = Table() + label?.setAlignment(align) + if (color != null) + tbl.background = BaseScreen.skinStrings.getUiBackground("General/Border", tintColor = color) + tbl.add(label).growX() + return tbl + } + + companion object { + private fun Float.toPercentLabel() = + "${if (this>0f) "+" else ""}${DecimalFormat("0.#").format(this)}%".toLabel() + private fun Float.toOneDecimalLabel() = + DecimalFormat("0.#").format(this).toLabel() + } +} + diff --git a/core/src/com/unciv/ui/cityscreen/SpecialistAllocationTable.kt b/core/src/com/unciv/ui/cityscreen/SpecialistAllocationTable.kt index 2a78c48add..f63f10b5d9 100644 --- a/core/src/com/unciv/ui/cityscreen/SpecialistAllocationTable.kt +++ b/core/src/com/unciv/ui/cityscreen/SpecialistAllocationTable.kt @@ -1,5 +1,6 @@ package com.unciv.ui.cityscreen +import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.ui.Table @@ -14,6 +15,7 @@ import com.unciv.ui.utils.extensions.addSeparatorVertical import com.unciv.ui.utils.extensions.darken import com.unciv.ui.utils.extensions.onClick import com.unciv.ui.utils.extensions.surroundWithCircle +import com.unciv.ui.utils.extensions.toGroup import com.unciv.ui.utils.extensions.toLabel class SpecialistAllocationTable(val cityScreen: CityScreen) : Table(BaseScreen.skin) { @@ -104,13 +106,21 @@ class SpecialistAllocationTable(val cityScreen: CityScreen) : Table(BaseScreen.s private fun getSpecialistStatsTable(specialistName: String): Table { - val specialistStatTable = Table().apply { defaults().pad(5f) } + val specialistStatTable = Table().apply { defaults().padBottom(5f).padTop(5f) } val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(specialistName) for ((key, value) in specialistStats) { if (value == 0f) continue - specialistStatTable.add(ImageGetter.getStatIcon(key.name)).size(20f) - specialistStatTable.add(value.toInt().toLabel()).padRight(10f) + specialistStatTable.add(value.toInt().toLabel()) + specialistStatTable.add(ImageGetter.getStatIcon(key.name)).size(20f).padRight(10f) } + + val specialist = cityInfo.getRuleset().specialists[specialistName]!! + + for (s in specialist.greatPersonPoints) { + specialistStatTable.add(s.value.toLabel()) + specialistStatTable.add(ImageGetter.getUnitIcon(s.key, Color.GOLD).toGroup(20f)).padRight(10f) + } + return specialistStatTable } diff --git a/core/src/com/unciv/ui/images/ImageGetter.kt b/core/src/com/unciv/ui/images/ImageGetter.kt index 8668fa4348..4a62a9e67c 100644 --- a/core/src/com/unciv/ui/images/ImageGetter.kt +++ b/core/src/com/unciv/ui/images/ImageGetter.kt @@ -11,6 +11,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.Group import com.badlogic.gdx.scenes.scene2d.ui.Image +import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable @@ -385,23 +386,79 @@ object ImageGetter { .surroundWithThinCircle(techIconColor) } - fun getProgressBarVertical(width: Float, height: Float, percentComplete: Float, progressColor: Color, backgroundColor: Color): Group { - return VerticalProgressBar(width, height) - .addColor(backgroundColor, 1f) - .addColor(progressColor, percentComplete) + fun getProgressBarHorizontal(width: Float, height: Float, percentComplete: Float, progressColor: Color, backgroundColor: Color): Group { + return ProgressBar(width, height, false) + .setBackground(backgroundColor) + .setProgress(progressColor, percentComplete) } - class VerticalProgressBar(width: Float, height: Float):Group() { + fun getProgressBarVertical(width: Float, height: Float, percentComplete: Float, progressColor: Color, backgroundColor: Color): Group { + return ProgressBar(width, height, true) + .setBackground(backgroundColor) + .setProgress(progressColor, percentComplete) + } + + class ProgressBar(width: Float, height: Float, val vertical: Boolean = true):Group() { + + var primaryPercentage: Float = 0f + var secondaryPercentage: Float = 0f + + var label: Label? = null + var background: Image? = null + var secondaryProgress: Image? = null + var primaryProgress: Image? = null + init { setSize(width, height) isTransform = false } - fun addColor(color: Color, percentage: Float): VerticalProgressBar { - val bar = getWhiteDot() - bar.color = color - bar.setSize(width, height * max(min(percentage, 1f),0f)) //clamp between 0 and 1 - addActor(bar) + fun setLabel(color: Color, text: String, fontSize: Int = Constants.defaultFontSize) : ProgressBar { + label = text.toLabel() + label?.setAlignment(Align.center) + label?.setFontColor(color) + label?.setFontSize(fontSize) + label?.toFront() + label?.center(this) + if (label != null) + addActor(label) + return this + } + + fun setBackground(color: Color): ProgressBar { + background = getWhiteDot() + background?.color = color + background?.setSize(width, height) //clamp between 0 and 1 + background?.toBack() + background?.center(this) + if (background != null) + addActor(background) + return this + } + + fun setSemiProgress(color: Color, percentage: Float): ProgressBar { + secondaryPercentage = percentage + secondaryProgress = getWhiteDot() + secondaryProgress?.color = color + if (vertical) + secondaryProgress?.setSize(width, height * max(min(percentage, 1f),0f)) + else + secondaryProgress?.setSize(width * max(min(percentage, 1f),0f), height) + if (secondaryProgress != null) + addActor(secondaryProgress) + return this + } + + fun setProgress(color: Color, percentage: Float): ProgressBar { + primaryPercentage = percentage + primaryProgress = getWhiteDot() + primaryProgress?.color = color + if (vertical) + primaryProgress?.setSize(width, height * max(min(percentage, 1f),0f)) + else + primaryProgress?.setSize(width * max(min(percentage, 1f),0f), height) + if (primaryProgress != null) + addActor(primaryProgress) return this } } diff --git a/core/src/com/unciv/ui/pickerscreens/TechButton.kt b/core/src/com/unciv/ui/pickerscreens/TechButton.kt index 7c2a565622..ba1cfced29 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechButton.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechButton.kt @@ -62,10 +62,10 @@ class TechButton(techName:String, private val techManager: TechManager, isWorldS val percentComplete = (techCost - remainingTech) / techCost.toFloat() val percentWillBeComplete = (techCost - (remainingTech-techThisTurn)) / techCost.toFloat() - val progressBar = ImageGetter.VerticalProgressBar(2f, 50f) - .addColor(Color.WHITE, 1f) - .addColor(Color.BLUE.brighten(0.3f), percentWillBeComplete) - .addColor(Color.BLUE.darken(0.5f), percentComplete) + val progressBar = ImageGetter.ProgressBar(2f, 50f, true) + .setBackground(Color.WHITE) + .setSemiProgress(Color.BLUE.brighten(0.3f), percentWillBeComplete) + .setProgress(Color.BLUE.darken(0.5f), percentComplete) add(progressBar.addBorder(1f, Color.GRAY)).pad(10f) } rightSide.add(text).width(145f).top().left().padRight(15f) diff --git a/core/src/com/unciv/ui/utils/Fonts.kt b/core/src/com/unciv/ui/utils/Fonts.kt index 5d1b593746..c239dc0cdc 100644 --- a/core/src/com/unciv/ui/utils/Fonts.kt +++ b/core/src/com/unciv/ui/utils/Fonts.kt @@ -124,6 +124,11 @@ class NativeBitmapFontData( Fonts.culture -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Culture").region) Fonts.faith -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Faith").region) Fonts.happiness -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Happiness").region) + Fonts.greatArtist -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Great Artist").region) + Fonts.greatEngineer -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Great Engineer").region) + Fonts.greatGeneral -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Great General").region) + Fonts.greatMerchant -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Great Merchant").region) + Fonts.greatScientist -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable("EmojiIcons/Great Scientist").region) MayaCalendar.tun -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable(MayaCalendar.tunIcon).region) MayaCalendar.katun -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable(MayaCalendar.katunIcon).region) MayaCalendar.baktun -> Fonts.extractPixmapFromTextureRegion(ImageGetter.getDrawable(MayaCalendar.baktunIcon).region) @@ -231,4 +236,9 @@ object Fonts { const val culture = '♪' // U+266A 'eighth note' (🎵 U+1F3B5 'musical note') const val happiness = '⌣' // U+2323 'smile' (😀 U+1F600 'grinning face') const val faith = '☮' // U+262E 'peace symbol' (🕊 U+1F54A 'dove of peace') + const val greatArtist = '♬' // U+266C 'sixteenth note' + const val greatEngineer = '⚒' // U+2692 'hammer' + const val greatGeneral = '⛤' // U+26E4 'pentagram' + const val greatMerchant = '⚖' // U+2696 'scale' + const val greatScientist = '⚛' // U+269B 'atom' } diff --git a/docs/Modders/Creating-a-UI-skin.md b/docs/Modders/Creating-a-UI-skin.md index 4f1ea27667..36c9f7df43 100644 --- a/docs/Modders/Creating-a-UI-skin.md +++ b/docs/Modders/Creating-a-UI-skin.md @@ -53,6 +53,9 @@ These shapes are used all over Unciv and can be replaced to make a lot of UI ele | CityScreen/ConstructionInfoTable/ | SelectedConstructionTable | null | | | CivilopediaScreen/ | EntryButton | null | | | General/ | Border | null | | +| General/ | Border | null | | +| General/ | Border | null | | +| General/ | Border | null | | | General/ | ExpanderTab | null | | | General/ | HealthBar | null | | | General/ | TabbedPager | null | | @@ -87,8 +90,11 @@ These shapes are used all over Unciv and can be replaced to make a lot of UI ele | OverviewScreen/UnitOverviewTab/ | UnitSupplyTable | null | | | PlayerReadyScreen/ | Background | null | | | TechPickerScreen/ | Background | null | | +| TechPickerScreen/ | Background | null | | | TechPickerScreen/ | BottomTable | null | | | TechPickerScreen/ | TechButton | roundedEdgeRectangle | | +| TechPickerScreen/ | TechButton | roundedEdgeRectangle | | +| TechPickerScreen/ | TechButtonIconsOutline | rectangleWithOutline | | | VictoryScreen/ | CivGroup | roundedEdgeRectangle | | | WorldScreen/ | AirUnitTable | null | | | WorldScreen/ | BattleTable | null | |