mirror of
https://github.com/yairm210/Unciv.git
synced 2025-02-07 01:28:23 +07:00
Specialists work again! =D
This commit is contained in:
parent
62ef51f38e
commit
0a0b664dfe
BIN
android/Images/StatIcons/Specialist.png
Normal file
BIN
android/Images/StatIcons/Specialist.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
@ -391,126 +391,126 @@ BuildingIcons/Spaceship Factory
|
||||
index: -1
|
||||
BuildingIcons/Stable
|
||||
rotate: false
|
||||
xy: 1224, 707
|
||||
xy: 1122, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stadium
|
||||
rotate: false
|
||||
xy: 1122, 605
|
||||
xy: 1020, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stock Exchange
|
||||
rotate: false
|
||||
xy: 816, 299
|
||||
xy: 1632, 1013
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stone Works
|
||||
rotate: false
|
||||
xy: 1530, 911
|
||||
xy: 1428, 809
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stonehenge
|
||||
rotate: false
|
||||
xy: 1428, 809
|
||||
xy: 1326, 707
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Sydney Opera House
|
||||
rotate: false
|
||||
xy: 918, 299
|
||||
xy: 1632, 911
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Taj Mahal
|
||||
rotate: false
|
||||
xy: 1632, 911
|
||||
xy: 1530, 809
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Temple
|
||||
rotate: false
|
||||
xy: 1530, 809
|
||||
xy: 1428, 707
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Great Library
|
||||
rotate: false
|
||||
xy: 1428, 707
|
||||
xy: 1326, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Great Lighthouse
|
||||
rotate: false
|
||||
xy: 1326, 605
|
||||
xy: 1224, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Louvre
|
||||
rotate: false
|
||||
xy: 1224, 503
|
||||
xy: 1122, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Oracle
|
||||
rotate: false
|
||||
xy: 1122, 401
|
||||
xy: 1020, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Pyramids
|
||||
rotate: false
|
||||
xy: 1020, 299
|
||||
xy: 1632, 809
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Theatre
|
||||
rotate: false
|
||||
xy: 1530, 707
|
||||
xy: 1428, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/University
|
||||
rotate: false
|
||||
xy: 1632, 707
|
||||
xy: 1530, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Walls
|
||||
rotate: false
|
||||
xy: 1428, 503
|
||||
xy: 1326, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Windmill
|
||||
rotate: false
|
||||
xy: 1530, 503
|
||||
xy: 1428, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Workshop
|
||||
rotate: false
|
||||
xy: 1530, 401
|
||||
xy: 1428, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -692,7 +692,7 @@ ImprovementIcons/Road
|
||||
index: -1
|
||||
ImprovementIcons/Trading post
|
||||
rotate: false
|
||||
xy: 1326, 503
|
||||
xy: 1224, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -769,14 +769,14 @@ OtherIcons/Sleep
|
||||
index: -1
|
||||
OtherIcons/Star
|
||||
rotate: false
|
||||
xy: 1530, 305
|
||||
xy: 1632, 305
|
||||
size: 100, 94
|
||||
orig: 100, 94
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
OtherIcons/Stop
|
||||
rotate: false
|
||||
xy: 1326, 707
|
||||
xy: 1224, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -811,133 +811,133 @@ PolicyIcons/Aristocracy
|
||||
index: -1
|
||||
PolicyIcons/Citizenship
|
||||
rotate: false
|
||||
xy: 1632, 350
|
||||
xy: 1734, 1215
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Civil Society
|
||||
rotate: false
|
||||
xy: 1734, 1215
|
||||
xy: 1734, 1163
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Collective Rule
|
||||
rotate: false
|
||||
xy: 1734, 1163
|
||||
xy: 1734, 1111
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Constitution
|
||||
rotate: false
|
||||
xy: 1734, 1111
|
||||
xy: 1734, 1059
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Democracy
|
||||
rotate: false
|
||||
xy: 1734, 1059
|
||||
xy: 1734, 1007
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Discipline
|
||||
rotate: false
|
||||
xy: 1734, 1007
|
||||
xy: 1734, 955
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Entrepreneurship
|
||||
rotate: false
|
||||
xy: 1734, 955
|
||||
xy: 1734, 903
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Facism
|
||||
rotate: false
|
||||
xy: 1734, 903
|
||||
xy: 1734, 851
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Religion
|
||||
rotate: false
|
||||
xy: 1734, 851
|
||||
xy: 1734, 799
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Speech
|
||||
rotate: false
|
||||
xy: 1734, 799
|
||||
xy: 1734, 747
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Thought
|
||||
rotate: false
|
||||
xy: 1734, 747
|
||||
xy: 1734, 695
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Humanism
|
||||
rotate: false
|
||||
xy: 1734, 695
|
||||
xy: 1734, 643
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Landed Elite
|
||||
rotate: false
|
||||
xy: 1734, 643
|
||||
xy: 1734, 591
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Legalism
|
||||
rotate: false
|
||||
xy: 1734, 591
|
||||
xy: 1734, 539
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Mandate Of Heaven
|
||||
rotate: false
|
||||
xy: 1734, 539
|
||||
xy: 1734, 487
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Mercantilism
|
||||
rotate: false
|
||||
xy: 1734, 487
|
||||
xy: 1734, 435
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Meritocracy
|
||||
rotate: false
|
||||
xy: 1734, 435
|
||||
xy: 1734, 383
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Militarism
|
||||
rotate: false
|
||||
xy: 1892, 1237
|
||||
xy: 1734, 331
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Military Caste
|
||||
rotate: false
|
||||
xy: 1684, 350
|
||||
xy: 1892, 1237
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
@ -1231,49 +1231,49 @@ ResourceIcons/Silver
|
||||
index: -1
|
||||
ResourceIcons/Spices
|
||||
rotate: false
|
||||
xy: 1326, 809
|
||||
xy: 1224, 707
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Stone
|
||||
rotate: false
|
||||
xy: 1632, 1013
|
||||
xy: 1530, 911
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Sugar
|
||||
rotate: false
|
||||
xy: 1122, 503
|
||||
xy: 1020, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Uranium
|
||||
rotate: false
|
||||
xy: 1530, 605
|
||||
xy: 1428, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Whales
|
||||
rotate: false
|
||||
xy: 1224, 299
|
||||
xy: 1632, 605
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Wheat
|
||||
rotate: false
|
||||
xy: 1632, 605
|
||||
xy: 1530, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Wine
|
||||
rotate: false
|
||||
xy: 1428, 401
|
||||
xy: 1326, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -1362,9 +1362,16 @@ StatIcons/Science
|
||||
orig: 200, 200
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
StatIcons/Specialist
|
||||
rotate: false
|
||||
xy: 1326, 809
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
StatIcons/Strength
|
||||
rotate: false
|
||||
xy: 1224, 605
|
||||
xy: 1122, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -1798,42 +1805,42 @@ TechIcons/Scientific Theory
|
||||
index: -1
|
||||
TechIcons/Steam Power
|
||||
rotate: false
|
||||
xy: 1020, 503
|
||||
xy: 918, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Steel
|
||||
rotate: false
|
||||
xy: 918, 401
|
||||
xy: 816, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/The Wheel
|
||||
rotate: false
|
||||
xy: 1632, 809
|
||||
xy: 1530, 707
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Theology
|
||||
rotate: false
|
||||
xy: 1428, 605
|
||||
xy: 1326, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Trapping
|
||||
rotate: false
|
||||
xy: 1224, 401
|
||||
xy: 1122, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Writing
|
||||
rotate: false
|
||||
xy: 1428, 299
|
||||
xy: 1632, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -2071,7 +2078,7 @@ UnitIcons/Musketeer
|
||||
index: -1
|
||||
UnitIcons/Musketman
|
||||
rotate: false
|
||||
xy: 1632, 402
|
||||
xy: 1530, 300
|
||||
size: 100, 99
|
||||
orig: 100, 99
|
||||
offset: 0, 0
|
||||
@ -2113,14 +2120,14 @@ UnitIcons/Spearman
|
||||
index: -1
|
||||
UnitIcons/Swordsman
|
||||
rotate: false
|
||||
xy: 1020, 401
|
||||
xy: 918, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Trebuchet
|
||||
rotate: false
|
||||
xy: 1122, 299
|
||||
xy: 1632, 707
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -2134,21 +2141,21 @@ UnitIcons/Trireme
|
||||
index: -1
|
||||
UnitIcons/Warrior
|
||||
rotate: false
|
||||
xy: 1326, 401
|
||||
xy: 1224, 299
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Work Boats
|
||||
rotate: false
|
||||
xy: 1326, 299
|
||||
xy: 1632, 503
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Worker
|
||||
rotate: false
|
||||
xy: 1632, 503
|
||||
xy: 1530, 401
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
@ -2267,175 +2274,175 @@ UnitPromotionIcons/Coastal_Raider_II_(Civ5)
|
||||
index: -1
|
||||
UnitPromotionIcons/Coastal_Raider_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1632, 328
|
||||
xy: 1734, 309
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Cover_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 1734, 413
|
||||
xy: 1786, 697
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Cover_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1786, 697
|
||||
xy: 1838, 749
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 1838, 749
|
||||
xy: 226, 1529
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 226, 1529
|
||||
xy: 537, 1733
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 537, 1733
|
||||
xy: 559, 1755
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Formation_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 559, 1755
|
||||
xy: 2005, 1987
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Formation_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 2005, 1987
|
||||
xy: 1875, 1857
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Indirect_Fire_(Civ5)
|
||||
rotate: false
|
||||
xy: 1875, 1857
|
||||
xy: 1863, 1705
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Logistics_(Civ5)
|
||||
rotate: false
|
||||
xy: 1863, 1705
|
||||
xy: 1885, 1727
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/March_(Civ5)
|
||||
rotate: false
|
||||
xy: 1885, 1727
|
||||
xy: 356, 1263
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Mobility_(Civ5)
|
||||
rotate: false
|
||||
xy: 356, 1263
|
||||
xy: 430, 243
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Range_(Civ5)
|
||||
rotate: false
|
||||
xy: 430, 243
|
||||
xy: 1965, 1653
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Scouting_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 1965, 1653
|
||||
xy: 1987, 1675
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Scouting_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 1987, 1675
|
||||
xy: 1863, 1551
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Scouting_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1863, 1551
|
||||
xy: 512, 141
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Sentry_(Civ5)
|
||||
rotate: false
|
||||
xy: 512, 141
|
||||
xy: 573, 39
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Shock_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 573, 39
|
||||
xy: 486, 1393
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Shock_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 486, 1393
|
||||
xy: 634, 277
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Shock_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 634, 277
|
||||
xy: 1756, 309
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Siege_(Civ5)
|
||||
rotate: false
|
||||
xy: 1632, 306
|
||||
xy: 1786, 675
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Targeting_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 1654, 328
|
||||
xy: 1808, 697
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Targeting_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 1756, 413
|
||||
xy: 1838, 727
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Targeting_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1786, 675
|
||||
xy: 1860, 749
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Volley_(Civ5)
|
||||
rotate: false
|
||||
xy: 1808, 697
|
||||
xy: 248, 1529
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 797 KiB After Width: | Height: | Size: 797 KiB |
@ -112,7 +112,7 @@ class CityConstructions {
|
||||
}
|
||||
//endregion
|
||||
|
||||
//region state0changing functions
|
||||
//region state changing functions
|
||||
fun addConstruction(constructionToAdd: Int) {
|
||||
if (!inProgressConstructions.containsKey(currentConstruction)) inProgressConstructions[currentConstruction] = 0
|
||||
inProgressConstructions[currentConstruction] = inProgressConstructions[currentConstruction]!! + constructionToAdd
|
||||
|
@ -124,7 +124,7 @@ class CityInfo {
|
||||
fun getBuildingUniques(): List<String> = cityConstructions.getBuiltBuildings().flatMap { it.uniques }
|
||||
|
||||
fun getGreatPersonPoints(): Stats {
|
||||
var greatPersonPoints = population.getSpecialists().times(3f)
|
||||
var greatPersonPoints = population.specialists.times(3f)
|
||||
|
||||
for (building in cityConstructions.getBuiltBuildings())
|
||||
if (building.greatPersonPoints != null)
|
||||
|
@ -139,18 +139,20 @@ class CityStats {
|
||||
return newHappinessList
|
||||
}
|
||||
|
||||
fun getStatsOfSpecialist(stat:Stat, policies: HashSet<String>): Stats {
|
||||
val stats = Stats()
|
||||
if(stat==Stat.Culture||stat==Stat.Science) stats.add(stat,3f)
|
||||
else stats.add(stat,2f) // science and gold specialists
|
||||
|
||||
if (policies.contains("Commerce Complete")) stats.gold += 1
|
||||
if (policies.contains("Secularism")) stats.science += 2
|
||||
return stats
|
||||
}
|
||||
|
||||
private fun getStatsFromSpecialists(specialists: Stats, policies: HashSet<String>): Stats {
|
||||
val stats = Stats()
|
||||
|
||||
// Specialists
|
||||
stats.culture += specialists.culture * 3
|
||||
stats.production += specialists.production * 2
|
||||
stats.science += specialists.science * 3
|
||||
stats.gold += specialists.gold * 2
|
||||
val numOfSpecialists = cityInfo.population.getNumberOfSpecialists()
|
||||
if (policies.contains("Commerce Complete")) stats.gold += numOfSpecialists.toFloat()
|
||||
if (policies.contains("Secularism")) stats.science += (numOfSpecialists * 2).toFloat()
|
||||
|
||||
for(entry in specialists.toHashMap().filter { it.value>0 })
|
||||
stats.add(getStatsOfSpecialist(entry.key,policies)*entry.value)
|
||||
return stats
|
||||
}
|
||||
|
||||
@ -242,7 +244,7 @@ class CityStats {
|
||||
newBaseStatList["Population"] = Stats().add(Stat.Science, cityInfo.population.population.toFloat())
|
||||
.add(Stat.Production, cityInfo.population.getFreePopulation().toFloat())
|
||||
newBaseStatList["Tile yields"] = getStatsFromTiles()
|
||||
newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.getSpecialists(), civInfo.policies.adoptedPolicies)
|
||||
newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.specialists, civInfo.policies.adoptedPolicies)
|
||||
newBaseStatList["Trade routes"] = getStatsFromTradeRoute()
|
||||
newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats()
|
||||
newBaseStatList["Policies"] = getStatsFromPolicies(civInfo.policies.adoptedPolicies)
|
||||
|
@ -12,7 +12,9 @@ class PopulationManager {
|
||||
|
||||
var population = 1
|
||||
var foodStored = 0
|
||||
var buildingsSpecialists = HashMap<String, Stats>()
|
||||
|
||||
val specialists = Stats()
|
||||
//var buildingsSpecialists = HashMap<String, Stats>()
|
||||
|
||||
//region pure functions
|
||||
fun clone(): PopulationManager {
|
||||
@ -22,15 +24,15 @@ class PopulationManager {
|
||||
return toReturn
|
||||
}
|
||||
|
||||
fun getSpecialists(): Stats {
|
||||
val allSpecialists = Stats()
|
||||
for (stats in buildingsSpecialists.values)
|
||||
allSpecialists.add(stats)
|
||||
return allSpecialists
|
||||
}
|
||||
// fun getSpecialists(): Stats {
|
||||
// val allSpecialists = Stats()
|
||||
// for (stats in buildingsSpecialists.values)
|
||||
// allSpecialists.add(stats)
|
||||
// return allSpecialists
|
||||
// }
|
||||
|
||||
fun getNumberOfSpecialists(): Int {
|
||||
val specialists = getSpecialists()
|
||||
//val specialists = getSpecialists()
|
||||
return (specialists.science + specialists.production + specialists.culture + specialists.gold).toInt()
|
||||
}
|
||||
|
||||
@ -93,6 +95,20 @@ class PopulationManager {
|
||||
.minBy { Automation().rankTile(it, cityInfo.civInfo) }!!
|
||||
cityInfo.workedTiles.remove(lowestRankedWorkedTile.position)
|
||||
}
|
||||
|
||||
// unassign specialists that cannot be (e.g. the city was captured and one of the specialist buildings was destroyed)
|
||||
val maxSpecialists = getMaxSpecialists().toHashMap()
|
||||
val specialistsHashmap = specialists.toHashMap()
|
||||
for(entry in maxSpecialists)
|
||||
if(specialistsHashmap[entry.key]!!>entry.value)
|
||||
specialists.add(entry.key,specialistsHashmap[entry.key]!!-maxSpecialists[entry.key]!!)
|
||||
}
|
||||
|
||||
fun getMaxSpecialists(): Stats {
|
||||
val maximumSpecialists = Stats()
|
||||
for (building in cityInfo.cityConstructions.getBuiltBuildings().filter { it.specialistSlots!=null })
|
||||
maximumSpecialists.add(building.specialistSlots!!)
|
||||
return maximumSpecialists
|
||||
}
|
||||
|
||||
}
|
@ -107,7 +107,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
|
||||
private fun getHappinessTable(): Table {
|
||||
val happinessTable = Table(skin)
|
||||
happinessTable.defaults().pad(5f)
|
||||
happinessTable.add(Label("Happiness".tr(), skin).setFont(24)).colspan(2).row()
|
||||
happinessTable.add(Label("Happiness".tr(), skin).setFontSize(24)).colspan(2).row()
|
||||
for (entry in civInfo.getHappinessForNextTurn()) {
|
||||
happinessTable.add(entry.key.tr())
|
||||
happinessTable.add(entry.value.toString()).row()
|
||||
@ -121,7 +121,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
|
||||
private fun getGoldTable(): Table {
|
||||
val goldTable = Table(skin)
|
||||
goldTable.defaults().pad(5f)
|
||||
goldTable.add(Label("Gold".tr(), skin).setFont(24)).colspan(2).row()
|
||||
goldTable.add(Label("Gold".tr(), skin).setFontSize(24)).colspan(2).row()
|
||||
var total=0f
|
||||
for (entry in civInfo.getStatMapForNextTurn()) {
|
||||
if(entry.value.gold==0f) continue
|
||||
@ -142,7 +142,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
|
||||
val cityInfoTableIcons = Table(skin)
|
||||
cityInfoTableIcons.defaults().pad(padding).align(Align.center)
|
||||
|
||||
cityInfoTableIcons.add(Label("Cities".tr(), skin).setFont(24)).colspan(8).align(Align.center).row()
|
||||
cityInfoTableIcons.add(Label("Cities".tr(), skin).setFontSize(24)).colspan(8).align(Align.center).row()
|
||||
cityInfoTableIcons.add()
|
||||
cityInfoTableIcons.add(ImageGetter.getStatIcon("Population")).size(iconSize)
|
||||
cityInfoTableIcons.add(ImageGetter.getStatIcon("Food")).size(iconSize)
|
||||
|
@ -1,19 +1,46 @@
|
||||
package com.unciv.ui.cityscreen
|
||||
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
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.ui.*
|
||||
import com.badlogic.gdx.utils.Align
|
||||
import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.models.gamebasics.Building
|
||||
import com.unciv.models.stats.Stat
|
||||
import com.unciv.models.stats.Stats
|
||||
import com.unciv.ui.utils.CameraStageBaseScreen
|
||||
import com.unciv.ui.utils.ImageGetter.getImage
|
||||
import com.unciv.ui.utils.onClick
|
||||
import com.unciv.ui.utils.setFont
|
||||
import com.unciv.ui.utils.*
|
||||
|
||||
|
||||
class ExpanderTab(private val title:String,skin: Skin):Table(skin){
|
||||
private val toggle = Table(skin) // the show/hide toggler
|
||||
private val tab = Table() // what holds the information to be shown/hidden
|
||||
val innerTable=Table() // the information itself
|
||||
|
||||
init{
|
||||
toggle.defaults().pad(10f)
|
||||
toggle.background(ImageGetter.getBackground(ImageGetter.getBlue()))
|
||||
toggle.add("+ $title").apply { actor.setFontSize(24) }
|
||||
toggle.onClick {
|
||||
toggle.clearChildren()
|
||||
if(tab.isVisible) {
|
||||
toggle.add("- $title").apply { actor.setFontSize(24) }
|
||||
tab.clear()
|
||||
}
|
||||
else {
|
||||
toggle.add("+ $title").apply { actor.setFontSize(24) }
|
||||
tab.add(innerTable)
|
||||
}
|
||||
tab.isVisible=!tab.isVisible
|
||||
}
|
||||
add(toggle).row()
|
||||
tab.add(innerTable)
|
||||
add(tab)
|
||||
}
|
||||
}
|
||||
|
||||
class BuildingsTable(private val cityScreen: CityScreen) : Table() {
|
||||
init {
|
||||
defaults().pad(10f)
|
||||
}
|
||||
|
||||
internal fun update() {
|
||||
clear()
|
||||
@ -31,69 +58,109 @@ class BuildingsTable(private val cityScreen: CityScreen) : Table() {
|
||||
}
|
||||
}
|
||||
|
||||
fun createLabel(text:String): Label {
|
||||
val label = Label(text, skin)
|
||||
label.setFont(20)
|
||||
label.color = Color.GREEN
|
||||
return label
|
||||
}
|
||||
|
||||
if (!wonders.isEmpty()) {
|
||||
|
||||
add(createLabel("Wonders")).pad(5f).row()
|
||||
val wondersExpander = ExpanderTab("Wonders",skin)
|
||||
for (building in wonders)
|
||||
add(Label(building.name, skin)).pad(5f).row()
|
||||
wondersExpander.innerTable.add(Label(building.name, skin)).pad(5f).align(Align.left).row()
|
||||
add(wondersExpander).row()
|
||||
}
|
||||
|
||||
if (!specialistBuildings.isEmpty()) {
|
||||
add(createLabel("Specialist Buildings")).pad(5f).row()
|
||||
val specialistBuildingsExpander = ExpanderTab("Specialist Buildings",skin)
|
||||
for (building in specialistBuildings) {
|
||||
add(Label(building.name, skin)).pad(5f)
|
||||
val specialists = Table()
|
||||
specialists.row().size(20f).pad(5f)
|
||||
if (!cityInfo.population.buildingsSpecialists.containsKey(building.name))
|
||||
cityInfo.population.buildingsSpecialists[building.name] = Stats()
|
||||
val currentBuildingSpecialists = cityInfo.population.buildingsSpecialists[building.name]!!.toHashMap()
|
||||
for(stat in Stat.values()){
|
||||
for (i in 1..(currentBuildingSpecialists[stat]!!).toInt()) {
|
||||
specialists.add(getSpecialistIcon(
|
||||
"StatIcons/${stat}Specialist.png", building.name,
|
||||
currentBuildingSpecialists[stat]!! > i, stat))
|
||||
}
|
||||
}
|
||||
specialistBuildingsExpander.innerTable.add(Label(building.name, skin)).pad(5f)
|
||||
val specialistIcons = Table()
|
||||
specialistIcons.row().size(20f).pad(5f)
|
||||
for(stat in building.specialistSlots!!.toHashMap())
|
||||
for(i in 0 until stat.value.toInt())
|
||||
specialistIcons.add(getSpecialistIcon(stat.key)).size(20f)
|
||||
|
||||
add(specialists).row()
|
||||
specialistBuildingsExpander.innerTable.add(specialistIcons).row()
|
||||
}
|
||||
add(specialistBuildingsExpander).row()
|
||||
|
||||
// specialist allocation
|
||||
addSpecialistAllocation(skin, specialistBuildings, cityInfo)
|
||||
}
|
||||
|
||||
if (!others.isEmpty()) {
|
||||
add(createLabel("Buildings")).pad(5f).row()
|
||||
val buildingsExpanderTab = ExpanderTab("Buildings",skin)
|
||||
for (building in others)
|
||||
add(Label(building.name, skin)).pad(5f).row()
|
||||
buildingsExpanderTab.innerTable.add(Label(building.name, skin)).pad(5f).row()
|
||||
add(buildingsExpanderTab).row()
|
||||
}
|
||||
pack()
|
||||
}
|
||||
|
||||
private fun addSpecialistAllocation(skin: Skin, specialistBuildings: MutableList<Building>, cityInfo: CityInfo) {
|
||||
val specialistAllocationExpander = ExpanderTab("Specialist allocation", skin)
|
||||
specialistAllocationExpander.innerTable.defaults().pad(5f)
|
||||
|
||||
private fun getSpecialistIcon(imageName: String, building: String, isFilled: Boolean, stat: Stat): Image {
|
||||
val specialist = getImage(imageName)
|
||||
specialist.setSize(50f, 50f)
|
||||
if (!isFilled) specialist.color = Color.GRAY
|
||||
specialist.onClick( {
|
||||
val cityInfo = cityScreen.city
|
||||
when {
|
||||
isFilled -> cityInfo.population.buildingsSpecialists[building]!!.add(stat,-1f) //unassign
|
||||
cityInfo.population.getFreePopulation() == 0 -> return@onClick
|
||||
else -> {
|
||||
if (!cityInfo.population.buildingsSpecialists.containsKey(building))
|
||||
cityInfo.population.buildingsSpecialists[building] = Stats()
|
||||
cityInfo.population.buildingsSpecialists[building]!!.add(stat,1f) //assign!}
|
||||
|
||||
val currentSpecialists = cityInfo.population.specialists.toHashMap()
|
||||
val maximumSpecialists = cityInfo.population.getMaxSpecialists()
|
||||
|
||||
for (entry in maximumSpecialists.toHashMap()) {
|
||||
if (entry.value == 0f) continue
|
||||
val stat = entry.key
|
||||
// these two are conflictingly named compared to above...
|
||||
val assignedSpecialists = currentSpecialists[entry.key]!!.toInt()
|
||||
val maxSpecialists = entry.value.toInt()
|
||||
if (assignedSpecialists > 0) {
|
||||
val unassignButton = TextButton("-", skin)
|
||||
unassignButton.label.setFontSize(24)
|
||||
unassignButton.onClick {
|
||||
cityInfo.population.specialists.add(entry.key, -1f)
|
||||
cityInfo.cityStats.update()
|
||||
cityScreen.update()
|
||||
}
|
||||
}
|
||||
specialistAllocationExpander.innerTable.add(unassignButton)
|
||||
} else specialistAllocationExpander.innerTable.add()
|
||||
|
||||
cityInfo.cityStats.update()
|
||||
cityScreen.update()
|
||||
})
|
||||
val specialistTable = Table()
|
||||
for (i in 1..maxSpecialists) {
|
||||
val icon = getSpecialistIcon(stat, i <= assignedSpecialists)
|
||||
specialistTable.add(icon).size(30f)
|
||||
}
|
||||
specialistAllocationExpander.innerTable.add(specialistTable)
|
||||
if (assignedSpecialists < maxSpecialists) {
|
||||
val assignButton = TextButton("+", skin)
|
||||
assignButton.label.setFontSize(24)
|
||||
assignButton.onClick {
|
||||
cityInfo.population.specialists.add(entry.key, +1f)
|
||||
cityInfo.cityStats.update()
|
||||
cityScreen.update()
|
||||
}
|
||||
if (cityInfo.population.getFreePopulation() == 0) assignButton.disable()
|
||||
specialistAllocationExpander.innerTable.add(assignButton)
|
||||
} else specialistAllocationExpander.innerTable.add()
|
||||
|
||||
specialistAllocationExpander.innerTable.row()
|
||||
|
||||
val specialistStatTable = Table().apply { defaults().pad(5f) }
|
||||
val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(stat, cityInfo.civInfo.policies.adoptedPolicies).toHashMap()
|
||||
for (entry in specialistStats) {
|
||||
if (entry.value == 0f) continue
|
||||
specialistStatTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f)
|
||||
specialistStatTable.add(Label(entry.value.toInt().toString(), skin)).padRight(10f)
|
||||
}
|
||||
specialistAllocationExpander.innerTable.add()
|
||||
specialistAllocationExpander.innerTable.add(specialistStatTable).row()
|
||||
}
|
||||
add(specialistAllocationExpander).row()
|
||||
}
|
||||
|
||||
|
||||
private fun getSpecialistIcon(stat: Stat, isFilled: Boolean =true): Image {
|
||||
val specialist = ImageGetter.getImage("StatIcons/Specialist")
|
||||
if (!isFilled) specialist.color = Color.GRAY
|
||||
else specialist.color=when(stat){
|
||||
Stat.Production -> Color.BROWN
|
||||
Stat.Gold -> Color.GOLD
|
||||
Stat.Science -> Color.BLUE
|
||||
Stat.Culture -> Color.PURPLE
|
||||
else -> Color.WHITE
|
||||
}
|
||||
|
||||
return specialist
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() {
|
||||
}
|
||||
|
||||
val currentCityLabel = Label(city.name+" ("+city.population.population+")", CameraStageBaseScreen.skin)
|
||||
currentCityLabel.setFont(25)
|
||||
currentCityLabel.setFontSize(25)
|
||||
cityPickerTable.add(currentCityLabel)
|
||||
|
||||
|
||||
|
@ -24,7 +24,7 @@ class CityStatsTable(val cityScreen: CityScreen) : Table(){
|
||||
|
||||
val cityStatsHeader = Label("City Stats", CameraStageBaseScreen.skin)
|
||||
|
||||
cityStatsHeader.setFont(15)
|
||||
cityStatsHeader.setFontSize(15)
|
||||
add(cityStatsHeader).colspan(2).pad(10f)
|
||||
row()
|
||||
|
||||
|
@ -154,7 +154,7 @@ class WorldTileGroup(tileInfo: TileInfo) : TileGroup(tileInfo) {
|
||||
val turnsToConstruction = cityConstructions.turnsToConstruction(cityConstructions.currentConstruction)
|
||||
val label = Label(turnsToConstruction.toString(),CameraStageBaseScreen.skin)
|
||||
label.setFontColor(secondaryColor)
|
||||
label.setFont(10)
|
||||
label.setFontSize(10)
|
||||
label.pack()
|
||||
group.addActor(label)
|
||||
|
||||
|
@ -41,7 +41,7 @@ class DiplomacyScreen():CameraStageBaseScreen(){
|
||||
civTable.defaults().pad(10f)
|
||||
val peaceWarStatus = civDiplomacy.diplomaticStatus.toString()
|
||||
civTable.add(Label(civ.civName.tr() + " ({$peaceWarStatus})".tr(), skin)
|
||||
.apply { setFont(22); setFontColor(civ.getNation().getSecondaryColor()) }).row()
|
||||
.apply { setFontSize(22); setFontColor(civ.getNation().getSecondaryColor()) }).row()
|
||||
|
||||
val tradeButton = TextButton("Trade".tr(), skin)
|
||||
tradeButton.onClick {
|
||||
|
@ -175,7 +175,7 @@ fun getFont(size: Int): BitmapFont {
|
||||
return font
|
||||
}
|
||||
|
||||
fun Label.setFont(size:Int): Label {
|
||||
fun Label.setFontSize(size:Int): Label {
|
||||
style = Label.LabelStyle(style)
|
||||
style.font = getFont(size)
|
||||
style = style // because we need it to call the SetStyle function. Yuk, I know.
|
||||
|
@ -19,7 +19,7 @@ class NotificationsScroll(internal val worldScreen: WorldScreen) : ScrollPane(nu
|
||||
notificationsTable.clearChildren()
|
||||
for (notification in notifications) {
|
||||
val label = Label(notification.text.tr(), CameraStageBaseScreen.skin).setFontColor(Color.BLACK)
|
||||
.setFont(14)
|
||||
.setFontSize(14)
|
||||
val minitable = Table()
|
||||
|
||||
minitable.add(ImageGetter.getImage("OtherIcons/Circle.png")
|
||||
|
@ -174,7 +174,7 @@ class WorldScreen : CameraStageBaseScreen() {
|
||||
|
||||
if (civInfo.tech.currentTechnology() == null) {
|
||||
val buttonPic = Table().apply { background = ImageGetter.getDrawable("OtherIcons/civTableBackground.png").tint(colorFromRGB(7, 46, 43)); defaults().pad(10f) }
|
||||
buttonPic.add(Label("{Pick a tech}!".tr(), skin).setFontColor(Color.WHITE).setFont(22))
|
||||
buttonPic.add(Label("{Pick a tech}!".tr(), skin).setFontColor(Color.WHITE).setFontSize(22))
|
||||
techButton.add(buttonPic)
|
||||
}
|
||||
else {
|
||||
|
@ -74,8 +74,8 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
|
||||
else listOf()
|
||||
|
||||
for(i in 0..max(attackerModifiers.size,defenderModifiers.size)){
|
||||
if (attackerModifiers.size > i) add(attackerModifiers[i]).actor.setFont(14) else add()
|
||||
if (defenderModifiers.size > i) add(defenderModifiers[i]).actor.setFont(14) else add()
|
||||
if (attackerModifiers.size > i) add(attackerModifiers[i]).actor.setFontSize(14) else add()
|
||||
if (defenderModifiers.size > i) add(defenderModifiers[i]).actor.setFontSize(14) else add()
|
||||
row().pad(2f)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user