Organized building order and icon credits

This commit is contained in:
Yair Morgenstern 2018-10-13 21:53:17 +03:00
parent b528ef38e9
commit b4c17f7664
6 changed files with 400 additions and 334 deletions

View File

@ -1,12 +1,11 @@
# Icon Credits # Icon Credits
Flag Icons made by [Freepik](https://www.flaticon.com/authors/freepik) from [www.flaticon.com](https://www.flaticon.com) Flag Icons made by [Freepik](https://www.flaticon.com/authors/freepik) from [www.flaticon.com](https://www.flaticon.com)
and licensed by Creative Commons 3.0 and licensed by Creative Commons 3.0
All the following are from [the Noun Project](https://thenounproject.com) licenced under either Creative Commons or Public Domain All the following are from [the Noun Project](https://thenounproject.com) licenced under either Creative Commons or Public Domain
## Units ## Units
### Ancient Era ### Ancient Era
@ -17,7 +16,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Axe](https://thenounproject.com/search/?q=Axe&i=1688143) By ehab.abdullah for Warrior * [Axe](https://thenounproject.com/search/?q=Axe&i=1688143) By ehab.abdullah for Warrior
* [Bow And Arrow](https://thenounproject.com/search/?q=Bow%20and%20Arrow&i=338261) By Viktor Ostrovsky for Archer * [Bow And Arrow](https://thenounproject.com/search/?q=Bow%20and%20Arrow&i=338261) By Viktor Ostrovsky for Archer
* [Bow](https://thenounproject.com/search/?q=bow&i=101736) By Arthur Shlain for Bowman * [Bow](https://thenounproject.com/search/?q=bow&i=101736) By Arthur Shlain for Bowman
* Work Boats * [Fishing Vessel](https://thenounproject.com/term/fishing-vessel/23815/) By Luis Prado for Work Boats
* [Chariot](https://thenounproject.com/search/?q=Chariot&i=1189930) By Andrew Doane for Chariot Archer * [Chariot](https://thenounproject.com/search/?q=Chariot&i=1189930) By Andrew Doane for Chariot Archer
* [Spear](https://thenounproject.com/search/?q=Spear&i=11432) By Stephen Copinger for Spearman * [Spear](https://thenounproject.com/search/?q=Spear&i=11432) By Stephen Copinger for Spearman
@ -85,88 +84,110 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
## Improvements ## Improvements
* [Woodcutting axe](https://thenounproject.com/term/woodcutting-axe/1060560/) By Chanut is Industries * [Woodcutting axe](https://thenounproject.com/term/woodcutting-axe/1060560/) By Chanut is Industries for Lumber Mill
* [Monument](https://thenounproject.com/term/monument/1175928/) By Setyo Ari Wibowo * [Monument](https://thenounproject.com/term/monument/1175928/) By Setyo Ari Wibowo for Landmark
* [Farm](https://thenounproject.com/term/farm/25362/) By Bonnie Beach * [Farm](https://thenounproject.com/term/farm/25362/) By Bonnie Beach
* [Unhappy](https://thenounproject.com/term/unhappy/116793/) By Daryl Vandermont * [Unhappy](https://thenounproject.com/term/unhappy/116793/) By Daryl Vandermont (doesn't belong here)
* [Bank](https://thenounproject.com/term/bank/1648569/) By Scott Dunlap * [Bank](https://thenounproject.com/term/bank/1648569/) By Scott Dunlap for Customs House
* [Academy](https://thenounproject.com/term/academy/1689703/) By CJS * [Academy](https://thenounproject.com/term/academy/1689703/) By CJS
* [Factory](https://thenounproject.com/term/factory/1049531/) By RULI * [Factory](https://thenounproject.com/term/factory/1049531/) By RULI for Manufactory
* [Mine](https://thenounproject.com/term/mine/543/) By Edward Boatman * [Mine](https://thenounproject.com/term/mine/543/) By Edward Boatman
* [Corral](https://thenounproject.com/term/corral/1340751/) By Luis Prado for Pasture * [Corral](https://thenounproject.com/term/corral/1340751/) By Luis Prado for Pasture
* [Plants](https://thenounproject.com/term/plants/1760916/) By hendra sudibyo * [Plants](https://thenounproject.com/term/plants/1760916/) By hendra sudibyo for Plantation
* [Pickaxe](https://thenounproject.com/term/pickaxe/175792/) By Creative Stall * [Pickaxe](https://thenounproject.com/term/pickaxe/175792/) By Creative Stall for Quarry
* [Food stall](https://thenounproject.com/term/food-stall/1618358/) By I Putu Kharismayadi * [Food stall](https://thenounproject.com/term/food-stall/1618358/) By I Putu Kharismayadi for Trading post
* [Road](https://thenounproject.com/term/road/1600491/) By REVA * [Road](https://thenounproject.com/term/road/1600491/) By REVA
* [Ruins](https://thenounproject.com/term/ruins/175277/) By Creative Stall * [Ruins](https://thenounproject.com/term/ruins/175277/) By Creative Stall for Ancient runs
* [Ruins](https://thenounproject.com/term/ruins/3849/) By Paulo Volkova * [Ruins](https://thenounproject.com/term/ruins/3849/) By Paulo Volkova for City ruins
* [Fishing Net](https://thenounproject.com/term/fishing-net/1073133/) By Made for Fishing Boats
## Buildings ## Buildings
* [Chinese traditional tower](https://thenounproject.com/term/chinese-traditional-tower/1808410/) By 1516 ### Ancient Era
* [Factory](https://thenounproject.com/term/factory/545906/) By icon 54
* [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov * [Storehouse](https://thenounproject.com/term/storehouse/966786/) By Pedro Santos for Granary
* [Bullets](https://thenounproject.com/term/bullets/810156/) By Aldric Rodriguez * [Great Wall Of China](https://thenounproject.com/term/great-wall-of-china/146039/) By Arthur Shlain for Walls
* [Observatory](https://thenounproject.com/term/observatory/1259/) By Nathan Driskell * [Block](https://thenounproject.com/term/block/1711553/) By Monjin Friends for Stone Works
* [Opera House](https://thenounproject.com/term/opera-house/446672/) By Xinh Studio * [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 for Palace
* [Aqueduct](https://thenounproject.com/term/aqueduct/24639/) By Arthur Shlain * [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon for Monument
* [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias * [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency for Barracks
* [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends
* [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward
* [Cambodia](https://thenounproject.com/term/cambodia/1809152/) By Wichai Wi
* [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency
* [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra
* [Stadium](https://thenounproject.com/term/stadium/13872/) By Karuna Lalvani
* [Market](https://thenounproject.com/term/market/1723050/) By sofi
* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma
* [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi
* [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado
* [Shekel Coin](https://thenounproject.com/term/shekel-coin/204154/) By Till Teenck
* [Machu Pichu](https://thenounproject.com/term/machu-picchu/1569706/) By Carpe Diem
* [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett
* [College](https://thenounproject.com/term/college/129978/) By Alexander Skowalsky
* [College](https://thenounproject.com/term/college/1203703/) By Vectors Market
* [Chichen Itza](https://thenounproject.com/term/chichen-itza/668065/) By Hea Poh Lin
* [Great Wall Of China](https://thenounproject.com/term/great-wall-of-china/146039/) By Arthur Shlain
* [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency
* [Temple](https://thenounproject.com/term/temple/1808407/) By 1516
* [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem
* [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54
* [Paper](https://thenounproject.com/term/paper/1443472/) By anam * [Paper](https://thenounproject.com/term/paper/1443472/) By anam
* [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer * [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer
* [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 * [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54
* [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon
* [Storehouse](https://thenounproject.com/term/storehouse/966786/) By Pedro Santos ### Classical Era
* [Library](https://thenounproject.com/term/library/1122689/) By Rob Crosswell
* [Block](https://thenounproject.com/term/block/1711553/) By Monjin Friends * [Temple](https://thenounproject.com/term/temple/1808407/) By 1516
* [Water dam](https://thenounproject.com/term/water-dam/1002726/) By Symbolon * [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem for Burial Tomb
* [Spaceship](https://thenounproject.com/term/spaceship/1444621/) By Dinosoft Labs * [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett for The Oracle
* [Nuclear Plant](https://thenounproject.com/term/nuclear-plant/1132340/) By Andrejs Kirma * [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra for Colloseum
* [Build](https://thenounproject.com/term/build/1156478/) By Michael G Brown * [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency for Circus Maximus
* [Missile](https://thenounproject.com/term/missile/799922/) By ProSymbols * [Market](https://thenounproject.com/term/market/1723050/) By sofi
* [Rocket](https://thenounproject.com/term/rocket/937173/) By BomSymbols * [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy
* [Engine](https://thenounproject.com/term/engine/1877958/) By Andre * [Shekel Coin](https://thenounproject.com/term/shekel-coin/204154/) By Till Teenck for Mint
* [Chamber](https://thenounproject.com/term/chamber/1242689/) By IYIKON * [Aqueduct](https://thenounproject.com/term/aqueduct/24639/) By Arthur Shlain
* [Bank](https://thenounproject.com/term/bank/1882194/) By projecthayat
* [Forbidden City](https://thenounproject.com/term/forbidden-city/1797540/) By 1516 ### Medieval Era
* [Theatre](https://thenounproject.com/term/theatre/1780401/) By b farias
* [Taj Mahal](https://thenounproject.com/term/taj-mahal/1907755/) By Felipe Alvarado * [College](https://thenounproject.com/term/college/129978/) By Alexander Skowalsky for University
* [Windmill](https://thenounproject.com/term/windmill/1705107/) By corpus delicti * [College](https://thenounproject.com/term/college/1203703/) By Vectors Market for National College
* [Chichen Itza](https://thenounproject.com/term/chichen-itza/668065/) By Hea Poh Lin
* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma for Monastary
* [Cambodia](https://thenounproject.com/term/cambodia/1809152/) By Wichai Wi for Angkor Wat
* [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward for Oxford University
* [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends
* [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias for Workshop
* [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado
* [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov for Ironworks
* [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi
* [Bullets](https://thenounproject.com/term/bullets/810156/) By Aldric Rodriguez for Armory
* [Machu Pichu](https://thenounproject.com/term/machu-picchu/1569706/) By Carpe Diem
### Renaissance Era
* [Museum](https://thenounproject.com/term/museum/803560/) by zidney * [Museum](https://thenounproject.com/term/museum/803560/) by zidney
* [Hermitage](https://thenounproject.com/term/hermitage/133969/) By Yuri Mamaev * [Hermitage](https://thenounproject.com/term/hermitage/133969/) By Yuri Mamaev
* [The Louvre](https://thenounproject.com/term/the-louvre/1577539/) By roundicons.com * [The Louvre](https://thenounproject.com/term/the-louvre/1577539/) By roundicons.com
* [Books](https://thenounproject.com/term/books/1767500/) By Minh Do * [Forbidden City](https://thenounproject.com/term/forbidden-city/1797540/) By 1516
* [Theatre](https://thenounproject.com/term/theatre/1780401/) By b farias
* [Windmill](https://thenounproject.com/term/windmill/1705107/) By corpus delicti
* [Taj Mahal](https://thenounproject.com/term/taj-mahal/1907755/) By Felipe Alvarado
* [Observatory](https://thenounproject.com/term/observatory/1259/) By Nathan Driskell
* [Opera House](https://thenounproject.com/term/opera-house/446672/) By Xinh Studio
* [Chinese traditional tower](https://thenounproject.com/term/chinese-traditional-tower/1808410/) By 1516 for Porcelain Tower
* [Bank](https://thenounproject.com/term/bank/1882194/) By projecthayat
### Industrial Era
* [Books](https://thenounproject.com/term/books/1767500/) By Minh Do for Public School
* [Hospital](https://thenounproject.com/term/hospital/1658509/) By Adrien Coquet * [Hospital](https://thenounproject.com/term/hospital/1658509/) By Adrien Coquet
* [Stock exchange](https://thenounproject.com/term/stock-exchange/1210199/) By Pundimon * [Stock exchange](https://thenounproject.com/term/stock-exchange/1210199/) By Pundimon
* [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler * [Military](https://thenounproject.com/term/military/1857519/) By myiconfinder for Military Academy
* [Military](https://thenounproject.com/term/military/1857519/) By myiconfinder * [Factory](https://thenounproject.com/term/factory/545906/) By icon 54
* [Signal Tower](https://thenounproject.com/term/signal-tower/1547758/) By Nociconist
### Modern Era
* [Stadium](https://thenounproject.com/term/stadium/13872/) By Karuna Lalvani
* [Signal Tower](https://thenounproject.com/term/signal-tower/1547758/) By Nociconist for Broadcast Tower
* [Eiffel Tower](https://thenounproject.com/term/eiffel-tower/1907757/) By Felipe Alvarado * [Eiffel Tower](https://thenounproject.com/term/eiffel-tower/1907757/) By Felipe Alvarado
* [Microscope](https://thenounproject.com/term/microscope/1452362/) By Arafat Uddin * [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler for Cristo Redentor
* [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall
* [Solar panel](https://thenounproject.com/term/solar-panel/154447/) By Andrew J. Young ### Information Era
* [Cathedral](https://thenounproject.com/term/cathedral/1325415/) By Dairy Free Design
* [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy * [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall for Medical Lab
* [Microscope](https://thenounproject.com/term/microscope/1452362/) By Arafat Uddin for Research Lab
* [Water dam](https://thenounproject.com/term/water-dam/1002726/) By Symbolon for Hydro Plant
* [Solar panel](https://thenounproject.com/term/solar-panel/154447/) By Andrew J. Young for Solar Plant
* [Spaceship](https://thenounproject.com/term/spaceship/1444621/) By Dinosoft Labs for Apollo Program
* [Build](https://thenounproject.com/term/build/1156478/) By Michael G Brown for Spaceship Factory
* [Nuclear Plant](https://thenounproject.com/term/nuclear-plant/1132340/) By Andrejs Kirma
### Future Era
* [Missile](https://thenounproject.com/term/missile/799922/) By ProSymbols for SS Booster
* [Rocket](https://thenounproject.com/term/rocket/937173/) By BomSymbols for SS Cockpit
* [Engine](https://thenounproject.com/term/engine/1877958/) By Andre for SS Engine
* [Chamber](https://thenounproject.com/term/chamber/1242689/) By IYIKON for SS Statis Chamber
## Social Policies ## Social Policies
@ -224,7 +245,6 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
## Technologies ## Technologies
### Ancient ### Ancient
* [Agriculture](https://thenounproject.com/term/agriculture/4221/) By OCHA Visual Information Unit * [Agriculture](https://thenounproject.com/term/agriculture/4221/) By OCHA Visual Information Unit
* [Jug](https://thenounproject.com/term/jug/869999/) By Vladimir Belochkin for Pottery * [Jug](https://thenounproject.com/term/jug/869999/) By Vladimir Belochkin for Pottery
* [Archery](https://thenounproject.com/term/archery/213836/) By icon 54 * [Archery](https://thenounproject.com/term/archery/213836/) By icon 54
@ -237,7 +257,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Bricks](https://thenounproject.com/term/bricks/1018659/) By Vaibhav Radhakrishnan for Construction * [Bricks](https://thenounproject.com/term/bricks/1018659/) By Vaibhav Radhakrishnan for Construction
* [Mallet](https://thenounproject.com/term/mallet/1306669/) By Ben Avery for Bronze Working * [Mallet](https://thenounproject.com/term/mallet/1306669/) By Ben Avery for Bronze Working
## Classical ### Classical
* [Horse Riding](https://thenounproject.com/term/horse-riding/583093/) By Hea Poh Lin * [Horse Riding](https://thenounproject.com/term/horse-riding/583093/) By Hea Poh Lin
* [Abacus](https://thenounproject.com/term/abacus/1943303/) By Yo! Baba for Mathematics * [Abacus](https://thenounproject.com/term/abacus/1943303/) By Yo! Baba for Mathematics
* [Arch](https://thenounproject.com/term/arch/1174168/) By Andrejs Kirma for Construction * [Arch](https://thenounproject.com/term/arch/1174168/) By Andrejs Kirma for Construction
@ -246,7 +266,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Engineering Blueprint](https://thenounproject.com/term/engineering-blueprint/1588543/) By Sachin Modgekar for Engineering * [Engineering Blueprint](https://thenounproject.com/term/engineering-blueprint/1588543/) By Sachin Modgekar for Engineering
* [Metalworking](https://thenounproject.com/term/metalworking/1561383/) By Symbolon for Iron Working * [Metalworking](https://thenounproject.com/term/metalworking/1561383/) By Symbolon for Iron Working
## Medieval ### Medieval
* [Judaism](https://thenounproject.com/term/judaism/324145/) By Ben Davis for Theology * [Judaism](https://thenounproject.com/term/judaism/324145/) By Ben Davis for Theology
* [Institution](https://thenounproject.com/term/institution/260586/) By Luis Prado for Civil Service * [Institution](https://thenounproject.com/term/institution/260586/) By Luis Prado for Civil Service
* [Education](https://thenounproject.com/term/education/1817512/) By Tomas Knopp * [Education](https://thenounproject.com/term/education/1817512/) By Tomas Knopp
@ -257,7 +277,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Lever](https://thenounproject.com/term/lever/4927/) By Jakob Ukrop for Physics * [Lever](https://thenounproject.com/term/lever/4927/) By Jakob Ukrop for Physics
* [Sword](https://thenounproject.com/term/sword/1365080/) By Jonathan P Lambert for Steel * [Sword](https://thenounproject.com/term/sword/1365080/) By Jonathan P Lambert for Steel
## Renaissance ### Renaissance
* [Telescope](https://thenounproject.com/term/telescope/1976706/) By ProSymbols for Astronomy * [Telescope](https://thenounproject.com/term/telescope/1976706/) By ProSymbols for Astronomy
* [Sound waves](https://thenounproject.com/term/sound-waves/792661/) By Makarenko Andrey for Acoustics * [Sound waves](https://thenounproject.com/term/sound-waves/792661/) By Makarenko Andrey for Acoustics
* [Banking](https://thenounproject.com/term/banking/763867/) By Delwar Hossein * [Banking](https://thenounproject.com/term/banking/763867/) By Delwar Hossein
@ -269,7 +289,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Metal Block](https://thenounproject.com/term/metal-bock/1518464/) By Creaticca Creative Agency for Metallurgy * [Metal Block](https://thenounproject.com/term/metal-bock/1518464/) By Creaticca Creative Agency for Metallurgy
* [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall * [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall
## Industrial ### Industrial
* [Science](https://thenounproject.com/term/science/1901524/) By Dinosoft Labs for Scientific Theory * [Science](https://thenounproject.com/term/science/1901524/) By Dinosoft Labs for Scientific Theory
* [Factory](https://thenounproject.com/term/factory/26212/) By Lil Squid for Industrialization * [Factory](https://thenounproject.com/term/factory/26212/) By Lil Squid for Industrialization
* [Rifle](https://thenounproject.com/term/rifle/371894/) By Alexander Skowalsky for Rifling * [Rifle](https://thenounproject.com/term/rifle/371894/) By Alexander Skowalsky for Rifling
@ -280,14 +300,14 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Turbines](https://thenounproject.com/term/turbine/86212/) By Leonardo Schneider for Steam Power * [Turbines](https://thenounproject.com/term/turbine/86212/) By Leonardo Schneider for Steam Power
* [Dynamite](https://thenounproject.com/term/dynamite/610652/) By Simon Martin * [Dynamite](https://thenounproject.com/term/dynamite/610652/) By Simon Martin
## Modern ### Modern
* [Radio](https://thenounproject.com/term/radio/124575/) By Arthur Shlain * [Radio](https://thenounproject.com/term/radio/124575/) By Arthur Shlain
* [Piston](https://thenounproject.com/term/piston/1224/) By Proletkult Graphik for Combustion * [Piston](https://thenounproject.com/term/piston/1224/) By Proletkult Graphik for Combustion
* [Plastic](https://thenounproject.com/term/plastic/478826/) By Yu luck * [Plastic](https://thenounproject.com/term/plastic/478826/) By Yu luck
* [Microphone](https://thenounproject.com/term/microphone/470266/) By Viktor Vorobyev for Mass Media * [Microphone](https://thenounproject.com/term/microphone/470266/) By Viktor Vorobyev for Mass Media
* [Flight](https://thenounproject.com/term/flight/1014306/) By Genius Icons * [Flight](https://thenounproject.com/term/flight/1014306/) By Genius Icons
## Information ### Information
* [Pill](https://thenounproject.com/term/pill/780458/) By Alex Arseneau for Pharmaceuticals * [Pill](https://thenounproject.com/term/pill/780458/) By Alex Arseneau for Pharmaceuticals
* [Computer](https://thenounproject.com/term/computer/1967529/) By Shastry * [Computer](https://thenounproject.com/term/computer/1967529/) By Shastry
* [Nuclear Reactor](https://thenounproject.com/term/nuclear-reactor/426463/) By Jeremie Sommet for Nuclear Fission * [Nuclear Reactor](https://thenounproject.com/term/nuclear-reactor/426463/) By Jeremie Sommet for Nuclear Fission
@ -295,7 +315,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [Robotic Arm](https://thenounproject.com/term/robotic-arm/1970874/) By Karl Gilbert for Robotics * [Robotic Arm](https://thenounproject.com/term/robotic-arm/1970874/) By Karl Gilbert for Robotics
* [Rocket](https://thenounproject.com/term/rocket/1743642/) By kareemov for Rocketry * [Rocket](https://thenounproject.com/term/rocket/1743642/) By kareemov for Rocketry
## Future ### Future
* [Nanoparticles](https://thenounproject.com/term/nanoparticles/822286/) By Gyan Lakhwani for Nanotechnology * [Nanoparticles](https://thenounproject.com/term/nanoparticles/822286/) By Gyan Lakhwani for Nanotechnology
* [Satellite](https://thenounproject.com/term/satellite/1466641/) By Ben Davis for Satellites * [Satellite](https://thenounproject.com/term/satellite/1466641/) By Ben Davis for Satellites
* [Atom](https://thenounproject.com/term/atom/1586852/) By Kelsey Armstrong for Particle Physics * [Atom](https://thenounproject.com/term/atom/1586852/) By Kelsey Armstrong for Particle Physics

View File

@ -1,5 +1,5 @@
[ [
// Ancient Era
{ {
name:"Palace", name:"Palace",
baseDescription: "Indicates that this city is the capital", baseDescription: "Indicates that this city is the capital",
@ -100,52 +100,9 @@
maintenance:1, maintenance:1,
requiredTech:"Bronze Working" requiredTech:"Bronze Working"
}, },
{
name:"Temple", // Classical Era
culture:3,
specialistSlots:{culture:1},
requiredBuilding:"Monument",
maintenance:2,
hurryCostModifier:25,
requiredTech:"Philosophy"
},
{
name:"Burial Tomb",
replaces:"Temple",
uniqueTo:"Egypt",
culture:3,
happiness:1,
specialistSlots:{culture:1},
requiredBuilding:"Monument",
hurryCostModifier:25,
requiredTech:"Philosophy"
},
{
name:"The Oracle",
baseDescription: "Provides a free social policy",
culture:3,
greatPersonPoints:{science:1},
isWonder:true,
uniques:["Free Social Policy"],
requiredTech:"Philosophy"
},
{
name:"National College",
science:3,
culture:1,
isWonder:true,
percentStatBonus:{science:50},
requiredBuildingInAllCities:"Library",
requiredTech:"Civil Service"
},
{
name:"Chichen Itza",
culture:1,
greatPersonPoints:{production:1},
isWonder:true,
uniques:["Golden Age length increases +50%"],
requiredTech:"Civil Service"
},
{ {
name:"Stable", name:"Stable",
maintenance:1, maintenance:1,
@ -177,6 +134,35 @@
hurryCostModifier:25, hurryCostModifier:25,
requiredTech:"Construction" requiredTech:"Construction"
}, },
{
name:"Temple",
culture:3,
specialistSlots:{culture:1},
requiredBuilding:"Monument",
maintenance:2,
hurryCostModifier:25,
requiredTech:"Philosophy"
},
{
name:"Burial Tomb",
replaces:"Temple",
uniqueTo:"Egypt",
culture:3,
happiness:1,
specialistSlots:{culture:1},
requiredBuilding:"Monument",
hurryCostModifier:25,
requiredTech:"Philosophy"
},
{
name:"The Oracle",
baseDescription: "Provides a free social policy",
culture:3,
greatPersonPoints:{science:1},
isWonder:true,
uniques:["Free Social Policy"],
requiredTech:"Philosophy"
},
{ {
name:"Market", name:"Market",
gold:2, gold:2,
@ -196,6 +182,24 @@
uniques:["Provides 1 extra copy of each improved luxury resource near this City","+2 Gold for each source of Oil and oasis"], uniques:["Provides 1 extra copy of each improved luxury resource near this City","+2 Gold for each source of Oil and oasis"],
requiredTech:"Currency" requiredTech:"Currency"
}, },
{
name:"Mint",
maintenance:0,
requiredNearbyImprovedResources:["Gold","Silver"],
resourceBonusStats:{gold:2},
hurryCostModifier:25,
requiredTech:"Currency"
},
{
name:"Aqueduct",
maintenance:1,
hurryCostModifier:25,
uniques:["40% of food is carried over after a new citizen is born"]
requiredTech:"Engineering"
},
// Medieval Era
{ {
name:"Monastery", name:"Monastery",
maintenance:0, maintenance:0,
@ -204,14 +208,6 @@
hurryCostModifier:25, hurryCostModifier:25,
requiredTech:"Theology" requiredTech:"Theology"
}, },
{
name:"Notre Dame",
culture:1,
happiness:10,
greatPersonPoints:{gold:1},
isWonder:true,
requiredTech:"Physics"
},
{ {
name:"Hagia Sophia", name:"Hagia Sophia",
culture:1, culture:1,
@ -221,12 +217,21 @@
requiredTech:"Theology" requiredTech:"Theology"
}, },
{ {
name:"Mint", name:"National College",
maintenance:0, science:3,
requiredNearbyImprovedResources:["Gold","Silver"], culture:1,
resourceBonusStats:{gold:2}, isWonder:true,
hurryCostModifier:25, percentStatBonus:{science:50},
requiredTech:"Currency" requiredBuildingInAllCities:"Library",
requiredTech:"Civil Service"
},
{
name:"Chichen Itza",
culture:1,
greatPersonPoints:{production:1},
isWonder:true,
uniques:["Golden Age length increases +50%"],
requiredTech:"Civil Service"
}, },
{ {
name:"Machu Pichu", name:"Machu Pichu",
@ -237,13 +242,6 @@
uniques:["Gold from all trade routes +25%"], uniques:["Gold from all trade routes +25%"],
requiredTech:"Guilds" requiredTech:"Guilds"
}, },
{
name:"Aqueduct",
maintenance:1,
hurryCostModifier:25,
uniques:["40% of food is carried over after a new citizen is born"]
requiredTech:"Engineering"
},
{ {
name:"Workshop", name:"Workshop",
maintenance:2, maintenance:2,
@ -297,14 +295,6 @@
uniques:["Cost of acquiring new tiles reduced by 25%"], uniques:["Cost of acquiring new tiles reduced by 25%"],
requiredTech:"Chivalry" requiredTech:"Chivalry"
}, },
{
name:"Porcelain Tower",
culture:1,
greatPersonPoints:{science:2},
isWonder:true,
uniques:["Free great scientist appears","Production to science conversion in cities increased by 33%"],
requiredTech:"Architecture"
},
{ {
name:"Ironworks", name:"Ironworks",
production:8, production:8,
@ -313,6 +303,14 @@
requiredBuildingInAllCities:"Workshop", requiredBuildingInAllCities:"Workshop",
requiredTech:"Machinery" requiredTech:"Machinery"
}, },
{
name:"Notre Dame",
culture:1,
happiness:10,
greatPersonPoints:{gold:1},
isWonder:true,
requiredTech:"Physics"
},
{ {
name:"Armory", name:"Armory",
xpForNewUnits:15, xpForNewUnits:15,
@ -321,6 +319,9 @@
requiredBuilding:"Barracks", requiredBuilding:"Barracks",
requiredTech:"Steel" requiredTech:"Steel"
}, },
// Renaissance Era
{ {
name:"Observatory", name:"Observatory",
baseDescription: "City must be bordering a mountain", baseDescription: "City must be bordering a mountain",
@ -370,24 +371,6 @@
requiredBuilding:"Colloseum", requiredBuilding:"Colloseum",
requiredTech:"Printing Press" requiredTech:"Printing Press"
}, },
{
name:"Taj Mahal",
baseDescription: "Empire enters a golden age",
culture:1,
happiness:4,
isWonder:true,
uniques:["Empire enters golden age"],
requiredTech:"Architecture"
},
{
name:"Windmill",
production:2,
specialistSlots:{production:1},
hurryCostModifier:25,
maintenance:2,
percentStatBonus:{production:10},
requiredTech:"Economics"
},
{ {
name:"Museum", name:"Museum",
culture:5, culture:5,
@ -414,6 +397,35 @@
uniques:["Free Great Artist Appears"], uniques:["Free Great Artist Appears"],
requiredTech:"Archaeology" requiredTech:"Archaeology"
}, },
{
name:"Taj Mahal",
baseDescription: "Empire enters a golden age",
culture:1,
happiness:4,
isWonder:true,
uniques:["Empire enters golden age"],
requiredTech:"Architecture"
},
{
name:"Porcelain Tower",
culture:1,
greatPersonPoints:{science:2},
isWonder:true,
uniques:["Free great scientist appears","Production to science conversion in cities increased by 33%"],
requiredTech:"Architecture"
},
{
name:"Windmill",
production:2,
specialistSlots:{production:1},
hurryCostModifier:25,
maintenance:2,
percentStatBonus:{production:10},
requiredTech:"Economics"
},
// Industrial Era
{ {
name:"Public School", name:"Public School",
science:3, science:3,
@ -424,14 +436,6 @@
uniques:["+1 Science Per 2 Population"], uniques:["+1 Science Per 2 Population"],
requiredTech:"Scientific Theory" requiredTech:"Scientific Theory"
}, },
{
name:"Hospital",
food:5,
requiredBuilding:"Aqueduct",
maintenance:2,
hurryCostModifier:0,
requiredTech:"Biology"
},
{ {
name:"Factory", name:"Factory",
production:4, production:4,
@ -443,6 +447,22 @@
requiredResource:"Coal", requiredResource:"Coal",
requiredTech:"Industrialization" requiredTech:"Industrialization"
}, },
{
name:"Military Academy",
xpForNewUnits:15,
hurryCostModifier:25,
maintenance:1,
requiredBuilding:"Armory",
requiredTech:"Military Science"
},
{
name:"Hospital",
food:5,
requiredBuilding:"Aqueduct",
maintenance:2,
hurryCostModifier:0,
requiredTech:"Biology"
},
{ {
name:"Stock Exchange", name:"Stock Exchange",
gold:3, gold:3,
@ -452,21 +472,9 @@
requiredBuilding:"Bank", requiredBuilding:"Bank",
requiredTech:"Electricity" requiredTech:"Electricity"
}, },
{
name:"Cristo Redentor", // Modern Era
culture:5,
isWonder:true,
uniques:["Culture cost of adopting new Policies reduced by 10%"],
requiredTech:"Flight"
},
{
name:"Military Academy",
xpForNewUnits:15,
hurryCostModifier:25,
maintenance:1,
requiredBuilding:"Armory",
requiredTech:"Military Science"
},
{ {
name:"Broadcast Tower", name:"Broadcast Tower",
culture:3, culture:3,
@ -484,13 +492,6 @@
uniques:["Provides 1 happiness per social policy"], uniques:["Provides 1 happiness per social policy"],
requiredTech:"Radio" requiredTech:"Radio"
}, },
{
name:"Medical Lab",
baseDescription: "25% of food carried over after a new citizen is born",
requiredBuilding:"Hospital",
maintenance:3,
requiredTech:"Pharmaceuticals"
},
{ {
name:"Research Lab", name:"Research Lab",
science:4, science:4,
@ -515,22 +516,21 @@
requiredTech:"Mass Media" requiredTech:"Mass Media"
}, },
{ {
name:"Solar Plant", name:"Cristo Redentor",
baseDescription: "Can only be built in cities next to deserts; cannot be built in a city with a Nuclear Plant", culture:5,
production:5,
percentStatBonus:{production:15},
requiredBuilding:"Factory",
maintenance:3,
cannotBeBuiltWith:"Nuclear Plant",
requiredTech:"Ecology",
uniques:["Must be next to desert"]
},
{
name:"Apollo Program",
cost:1500,
isWonder:true, isWonder:true,
uniques:["Enables construction of Spaceship parts"], uniques:["Culture cost of adopting new Policies reduced by 10%"],
requiredTech:"Rocketry" requiredTech:"Flight"
},
// Information Era
{
name:"Medical Lab",
baseDescription: "25% of food carried over after a new citizen is born",
requiredBuilding:"Hospital",
maintenance:3,
requiredTech:"Pharmaceuticals"
}, },
{ {
name:"Nuclear Plant", name:"Nuclear Plant",
@ -542,6 +542,17 @@
requiredResource:"Uranium", requiredResource:"Uranium",
requiredTech:"Nuclear Fission" requiredTech:"Nuclear Fission"
}, },
{
name:"Solar Plant",
baseDescription: "Can only be built in cities next to deserts; cannot be built in a city with a Nuclear Plant",
production:5,
percentStatBonus:{production:15},
requiredBuilding:"Factory",
maintenance:3,
cannotBeBuiltWith:"Nuclear Plant",
requiredTech:"Ecology",
uniques:["Must be next to desert"]
},
{ {
name:"Spaceship Factory", name:"Spaceship Factory",
production:3, production:3,
@ -556,6 +567,16 @@
requiredTech:"Robotics", requiredTech:"Robotics",
uniques:["Spaceship part"] uniques:["Spaceship part"]
}, },
{
name:"Apollo Program",
cost:1500,
isWonder:true,
uniques:["Enables construction of Spaceship parts"],
requiredTech:"Rocketry"
},
// Future Era
{ {
name:"SS Cockpit", name:"SS Cockpit",
requiredResource:"Aluminum", requiredResource:"Aluminum",

View File

@ -1,7 +1,7 @@
package com.unciv.logic package com.unciv.logic
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.unciv.logic.automation.Automation import com.unciv.logic.automation.NextTurnAutomation
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.Notification import com.unciv.logic.civilization.Notification
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
@ -48,7 +48,7 @@ class GameInfo {
for (civInfo in civilizations.filterNot { it==player || (it.isDefeated() && !it.isBarbarianCivilization()) }){ for (civInfo in civilizations.filterNot { it==player || (it.isDefeated() && !it.isBarbarianCivilization()) }){
civInfo.startTurn() civInfo.startTurn()
Automation().automateCivMoves(civInfo) NextTurnAutomation().automateCivMoves(civInfo)
} }
if(turns%10 == 0){ // every 10 turns add a barbarian in a random place if(turns%10 == 0){ // every 10 turns add a barbarian in a random place

View File

@ -5,21 +5,15 @@ import com.unciv.logic.battle.CityCombatant
import com.unciv.logic.city.CityConstructions import com.unciv.logic.city.CityConstructions
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeType
import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.unit.BaseUnit import com.unciv.models.gamebasics.unit.BaseUnit
import com.unciv.models.gamebasics.unit.UnitType import com.unciv.models.gamebasics.unit.UnitType
import com.unciv.ui.utils.getRandom import com.unciv.ui.utils.getRandom
import kotlin.math.max import kotlin.math.max
import kotlin.math.min
import kotlin.math.sqrt import kotlin.math.sqrt
class Automation { class Automation {
internal fun rankTile(tile: TileInfo, civInfo: CivilizationInfo): Float { internal fun rankTile(tile: TileInfo, civInfo: CivilizationInfo): Float {
val stats = tile.getTileStats(null, civInfo) val stats = tile.getTileStats(null, civInfo)
var rank = 0.0f var rank = 0.0f
@ -35,113 +29,7 @@ class Automation {
return rank return rank
} }
fun automateCivMoves(civInfo: CivilizationInfo) { fun trainCombatUnit(city: CityInfo) {
if (civInfo.tech.techsToResearch.isEmpty()) {
val researchableTechs = GameBasics.Technologies.values.filter { civInfo.tech.canBeResearched(it.name) }
val techToResearch = researchableTechs.groupBy { it.cost }.minBy { it.key }!!.value.getRandom()
civInfo.tech.techsResearched.add(techToResearch.name)
}
while(civInfo.policies.canAdoptPolicy()){
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it))}
.filter { civInfo.policies.isAdoptable(it) }
val policyToAdopt = adoptablePolicies.getRandom()
civInfo.policies.adopt(policyToAdopt)
}
// trade luxuries for luxuries if you can
for(otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filterNot { it.isPlayerCivilization() }){
val tradeLogic = TradeLogic(civInfo, otherCiv)
val ourTradableLuxuryResources = tradeLogic.ourAvailableOffers
.filter { it.type==TradeType.Luxury_Resource && it.amount>1 }
val theirTradableLuxuryResources = tradeLogic.theirAvailableOffers
.filter { it.type==TradeType.Luxury_Resource && it.amount>1 }
val weHaveTheyDont = ourTradableLuxuryResources
.filter { resource -> tradeLogic.theirAvailableOffers
.none { it.name==resource.name && it.type==TradeType.Luxury_Resource } }
val theyHaveWeDont = theirTradableLuxuryResources
.filter { resource -> tradeLogic.ourAvailableOffers
.none { it.name==resource.name && it.type==TradeType.Luxury_Resource } }
val numberOfTrades = min(weHaveTheyDont.size,theyHaveWeDont.size)
if(numberOfTrades>0){
tradeLogic.currentTrade.ourOffers.addAll(weHaveTheyDont.take(numberOfTrades).map { it.copy(amount = 1) })
tradeLogic.currentTrade.theirOffers.addAll(theyHaveWeDont.take(numberOfTrades).map { it.copy(amount = 1) })
tradeLogic.acceptTrade()
}
}
fun getMinDistanceBetweenCities(civ1:CivilizationInfo,civ2:CivilizationInfo): Int {
return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!!
}
// Declare war?
if(civInfo.cities.isNotEmpty() && civInfo.diplomacy.isNotEmpty()
&& !civInfo.isAtWar()
&& civInfo.getCivUnits().filter { !it.baseUnit.unitType.isCivilian() }.size > civInfo.cities.size*2) {
val enemyCivsByDistanceToOurs = civInfo.diplomacy.values.map { it.otherCiv() }
.filterNot { it == civInfo || it.cities.isEmpty() || !civInfo.diplomacy[it.civName]!!.canDeclareWar() }
.groupBy { getMinDistanceBetweenCities(civInfo,it) }
.toSortedMap()
val ourCombatStrength = evaluteCombatStrength(civInfo)
for (group in enemyCivsByDistanceToOurs){
if(group.key>7) break
for(otherCiv in group.value){
if(evaluteCombatStrength(otherCiv)*2<ourCombatStrength){
civInfo.diplomacy[otherCiv.civName]!!.declareWar()
break
}
}
}
}
val rangedUnits = mutableListOf<MapUnit>()
val meleeUnits = mutableListOf<MapUnit>()
val civilianUnits = mutableListOf<MapUnit>()
for (unit in civInfo.getCivUnits()) {
if(unit.promotions.canBePromoted()){
val availablePromotions = unit.promotions.getAvailablePromotions()
if(availablePromotions.isNotEmpty())
unit.promotions.addPromotion(availablePromotions.getRandom().name)
}
val unitType = unit.baseUnit().unitType
if(unitType.isRanged()) rangedUnits.add(unit)
else if(unitType.isMelee()) meleeUnits.add(unit)
else civilianUnits.add(unit)
}
for (unit in civilianUnits) UnitAutomation().automateUnitMoves(unit) // They move first so that combat units can accompany a settler
for (unit in rangedUnits) UnitAutomation().automateUnitMoves(unit)
for (unit in meleeUnits) UnitAutomation().automateUnitMoves(unit)
for (city in civInfo.cities) {
// reassign everyone from scratch
city.workedTiles.clear()
(0..city.population.population).forEach { city.population.autoAssignPopulation()}
chooseNextConstruction(city.cityConstructions)
if (city.health < city.getMaxHealth())
trainCombatUnit(city) // override previous decision if city is under attack
}
// train settler?
if (civInfo.cities.any()
&& civInfo.happiness > civInfo.cities.size +5
&& civInfo.getCivUnits().none { it.name == "Settler" }
&& civInfo.cities.none { it.cityConstructions.currentConstruction == "Settler" }) {
val bestCity = civInfo.cities.maxBy { it.cityStats.currentCityStats.production }!!
if(bestCity.cityConstructions.builtBuildings.size > 1) // 2 buildings or more, otherwisse focus on self first
bestCity.cityConstructions.currentConstruction = "Settler"
}
}
private fun trainCombatUnit(city: CityInfo) {
val combatUnits = city.cityConstructions.getConstructableUnits().filter { !it.unitType.isCivilian() } val combatUnits = city.cityConstructions.getConstructableUnits().filter { !it.unitType.isCivilian() }
val chosenUnit: BaseUnit val chosenUnit: BaseUnit
if(!city.civInfo.isAtWar() && city.civInfo.cities.any { it.getCenterTile().militaryUnit==null} if(!city.civInfo.isAtWar() && city.civInfo.cities.any { it.getCenterTile().militaryUnit==null}

View File

@ -0,0 +1,137 @@
package com.unciv.logic.automation
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.MapUnit
import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeType
import com.unciv.models.gamebasics.GameBasics
import com.unciv.ui.utils.getRandom
import kotlin.math.min
class NextTurnAutomation(){
fun automateCivMoves(civInfo: CivilizationInfo) {
chooseTechToResearch(civInfo)
adoptPolicy(civInfo)
exchangeLuxuries(civInfo)
declareWar(civInfo)
automateUnits(civInfo)
reassignWorkedTiles(civInfo)
trainSettler(civInfo)
}
private fun chooseTechToResearch(civInfo: CivilizationInfo) {
if (civInfo.tech.techsToResearch.isEmpty()) {
val researchableTechs = GameBasics.Technologies.values.filter { civInfo.tech.canBeResearched(it.name) }
val techToResearch = researchableTechs.groupBy { it.cost }.minBy { it.key }!!.value.getRandom()
civInfo.tech.techsResearched.add(techToResearch.name)
}
}
private fun adoptPolicy(civInfo: CivilizationInfo) {
while (civInfo.policies.canAdoptPolicy()) {
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it)) }
.filter { civInfo.policies.isAdoptable(it) }
val policyToAdopt = adoptablePolicies.getRandom()
civInfo.policies.adopt(policyToAdopt)
}
}
private fun exchangeLuxuries(civInfo: CivilizationInfo) {
for (otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filterNot { it.isPlayerCivilization() }) {
val tradeLogic = TradeLogic(civInfo, otherCiv)
val ourTradableLuxuryResources = tradeLogic.ourAvailableOffers
.filter { it.type == TradeType.Luxury_Resource && it.amount > 1 }
val theirTradableLuxuryResources = tradeLogic.theirAvailableOffers
.filter { it.type == TradeType.Luxury_Resource && it.amount > 1 }
val weHaveTheyDont = ourTradableLuxuryResources
.filter { resource ->
tradeLogic.theirAvailableOffers
.none { it.name == resource.name && it.type == TradeType.Luxury_Resource }
}
val theyHaveWeDont = theirTradableLuxuryResources
.filter { resource ->
tradeLogic.ourAvailableOffers
.none { it.name == resource.name && it.type == TradeType.Luxury_Resource }
}
val numberOfTrades = min(weHaveTheyDont.size, theyHaveWeDont.size)
if (numberOfTrades > 0) {
tradeLogic.currentTrade.ourOffers.addAll(weHaveTheyDont.take(numberOfTrades).map { it.copy(amount = 1) })
tradeLogic.currentTrade.theirOffers.addAll(theyHaveWeDont.take(numberOfTrades).map { it.copy(amount = 1) })
tradeLogic.acceptTrade()
}
}
}
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!!
}
private fun declareWar(civInfo: CivilizationInfo) {
if (civInfo.cities.isNotEmpty() && civInfo.diplomacy.isNotEmpty()
&& !civInfo.isAtWar()
&& civInfo.getCivUnits().filter { !it.baseUnit.unitType.isCivilian() }.size > civInfo.cities.size * 2) {
val enemyCivsByDistanceToOurs = civInfo.diplomacy.values.map { it.otherCiv() }
.filterNot { it == civInfo || it.cities.isEmpty() || !civInfo.diplomacy[it.civName]!!.canDeclareWar() }
.groupBy { getMinDistanceBetweenCities(civInfo, it) }
.toSortedMap()
val ourCombatStrength = Automation().evaluteCombatStrength(civInfo)
for (group in enemyCivsByDistanceToOurs) {
if (group.key > 7) break
for (otherCiv in group.value) {
if (Automation().evaluteCombatStrength(otherCiv) * 2 < ourCombatStrength) {
civInfo.diplomacy[otherCiv.civName]!!.declareWar()
break
}
}
}
}
}
private fun automateUnits(civInfo: CivilizationInfo) {
val rangedUnits = mutableListOf<MapUnit>()
val meleeUnits = mutableListOf<MapUnit>()
val civilianUnits = mutableListOf<MapUnit>()
for (unit in civInfo.getCivUnits()) {
if (unit.promotions.canBePromoted()) {
val availablePromotions = unit.promotions.getAvailablePromotions()
if (availablePromotions.isNotEmpty())
unit.promotions.addPromotion(availablePromotions.getRandom().name)
}
val unitType = unit.baseUnit().unitType
if (unitType.isRanged()) rangedUnits.add(unit)
else if (unitType.isMelee()) meleeUnits.add(unit)
else civilianUnits.add(unit)
}
for (unit in civilianUnits) UnitAutomation().automateUnitMoves(unit) // They move first so that combat units can accompany a settler
for (unit in rangedUnits) UnitAutomation().automateUnitMoves(unit)
for (unit in meleeUnits) UnitAutomation().automateUnitMoves(unit)
}
private fun reassignWorkedTiles(civInfo: CivilizationInfo) {
for (city in civInfo.cities) {
city.workedTiles.clear()
(0..city.population.population).forEach { city.population.autoAssignPopulation() }
Automation().chooseNextConstruction(city.cityConstructions)
if (city.health < city.getMaxHealth())
Automation().trainCombatUnit(city) // override previous decision if city is under attack
}
}
private fun trainSettler(civInfo: CivilizationInfo) {
if (civInfo.cities.any()
&& civInfo.happiness > civInfo.cities.size + 5
&& civInfo.getCivUnits().none { it.name == "Settler" }
&& civInfo.cities.none { it.cityConstructions.currentConstruction == "Settler" }) {
val bestCity = civInfo.cities.maxBy { it.cityStats.currentCityStats.production }!!
if (bestCity.cityConstructions.builtBuildings.size > 1) // 2 buildings or more, otherwisse focus on self first
bestCity.cityConstructions.currentConstruction = "Settler"
}
}
}