mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-22 10:54:19 -04:00
Added Egypt, other civs can now build wonders!
This commit is contained in:
parent
23bd52fc66
commit
4d10e11482
@ -12,10 +12,15 @@
|
|||||||
"Eretria","Pergamon","Miletos","Megara","Phocaea"]
|
"Eretria","Pergamon","Miletos","Megara","Phocaea"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name:"Chinese",
|
name:"China",
|
||||||
RGB:[ 101, 253, 155],
|
RGB:[ 9, 112, 84],
|
||||||
cities:["Beijing","Shanghai","Guangzhou","Nanjing","Xian","Chengdu","Hangzhou","Tianjin","Macau","Shandong"]
|
cities:["Beijing","Shanghai","Guangzhou","Nanjing","Xian","Chengdu","Hangzhou","Tianjin","Macau","Shandong"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name:"Egypt",
|
||||||
|
RGB:[ 255, 153, 0],
|
||||||
|
cities:["Thebes","Memphis","Heliopolis","Elephantine","Alexandria","Pi-Ramesses","Giza","Byblos","Akhetaten","Hieraconpolis"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name:"Barbarians",
|
name:"Barbarians",
|
||||||
RGB:[200,200,200]
|
RGB:[200,200,200]
|
||||||
|
@ -12,6 +12,7 @@ import com.unciv.models.gamebasics.Unit
|
|||||||
import com.unciv.models.stats.INamed
|
import com.unciv.models.stats.INamed
|
||||||
import com.unciv.ui.GameSettings
|
import com.unciv.ui.GameSettings
|
||||||
import com.unciv.ui.utils.GameSaver
|
import com.unciv.ui.utils.GameSaver
|
||||||
|
import com.unciv.ui.utils.getRandom
|
||||||
import com.unciv.ui.worldscreen.WorldScreen
|
import com.unciv.ui.worldscreen.WorldScreen
|
||||||
|
|
||||||
class UnCivGame : Game() {
|
class UnCivGame : Game() {
|
||||||
@ -52,19 +53,23 @@ class UnCivGame : Game() {
|
|||||||
gameInfo.tileMap = TileMap(20)
|
gameInfo.tileMap = TileMap(20)
|
||||||
gameInfo.civilizations.add(CivilizationInfo("Babylon", Vector2.Zero, gameInfo)) // first one is player civ
|
gameInfo.civilizations.add(CivilizationInfo("Babylon", Vector2.Zero, gameInfo)) // first one is player civ
|
||||||
|
|
||||||
val freeTiles = gameInfo.tileMap.values
|
val freeTiles = gameInfo.tileMap.values.toMutableList()
|
||||||
freeTiles.removeAll()
|
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(Vector2.Zero,6))
|
||||||
|
|
||||||
val barbarianCivilization = CivilizationInfo()
|
val barbarianCivilization = CivilizationInfo()
|
||||||
gameInfo.civilizations.add(barbarianCivilization)// second is barbarian civ
|
gameInfo.civilizations.add(barbarianCivilization)// second is barbarian civ
|
||||||
|
|
||||||
gameInfo.civilizations.add(CivilizationInfo("Greece", Vector2(3f,5f), gameInfo)) // all the rest whatever
|
for (civname in listOf("Greece","China","Egypt")) {
|
||||||
|
val startingLocation = freeTiles.toList().getRandom().position
|
||||||
|
gameInfo.civilizations.add(CivilizationInfo(civname, startingLocation, gameInfo)) // all the rest whatever
|
||||||
|
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(startingLocation, 6))
|
||||||
|
}
|
||||||
|
|
||||||
barbarianCivilization.civName = "Barbarians"
|
barbarianCivilization.civName = "Barbarians"
|
||||||
|
|
||||||
gameInfo.setTransients() // needs to be before placeBarbarianUnit because it depends on the tilemap having its gameinfo set
|
gameInfo.setTransients() // needs to be before placeBarbarianUnit because it depends on the tilemap having its gameinfo set
|
||||||
|
|
||||||
(1..5).forEach { gameInfo.placeBarbarianUnit() }
|
(1..5).forEach { gameInfo.placeBarbarianUnit(freeTiles.toList().getRandom()) }
|
||||||
|
|
||||||
|
|
||||||
worldScreen = WorldScreen()
|
worldScreen = WorldScreen()
|
||||||
|
@ -186,16 +186,23 @@ class Automation {
|
|||||||
fun chooseNextConstruction(cityConstructions: CityConstructions) {
|
fun chooseNextConstruction(cityConstructions: CityConstructions) {
|
||||||
cityConstructions.run {
|
cityConstructions.run {
|
||||||
val buildableNotWonders = getBuildableBuildings().filterNot { (getConstruction(it) as Building).isWonder }
|
val buildableNotWonders = getBuildableBuildings().filterNot { (getConstruction(it) as Building).isWonder }
|
||||||
if (!buildableNotWonders.isEmpty()) {
|
val buildableWonders = getBuildableBuildings().filter { (getConstruction(it) as Building).isWonder }
|
||||||
currentConstruction = buildableNotWonders.first()
|
|
||||||
} else {
|
val civUnits = cityInfo.civInfo.getCivUnits()
|
||||||
val militaryUnits = cityInfo.civInfo.getCivUnits().filter { it.getBaseUnit().unitType != UnitType.Civilian }.size
|
val militaryUnits = civUnits.filter { it.getBaseUnit().unitType != UnitType.Civilian }.size
|
||||||
if (cityInfo.civInfo.getCivUnits().none { it.name == CityConstructions.Worker } || militaryUnits > cityInfo.civInfo.cities.size * 2) {
|
val workers = civUnits.filter { it.name == CityConstructions.Worker }.size
|
||||||
currentConstruction = CityConstructions.Worker
|
val cities = cityInfo.civInfo.cities.size
|
||||||
} else {
|
|
||||||
trainCombatUnit(cityInfo)
|
when {
|
||||||
}
|
!buildableNotWonders.isEmpty() -> currentConstruction = buildableNotWonders.first()
|
||||||
|
militaryUnits==0 -> trainCombatUnit(cityInfo)
|
||||||
|
workers==0 -> currentConstruction = CityConstructions.Worker
|
||||||
|
militaryUnits<cities -> trainCombatUnit(cityInfo)
|
||||||
|
workers<cities -> currentConstruction = CityConstructions.Worker
|
||||||
|
buildableWonders.isNotEmpty() -> currentConstruction = buildableWonders.getRandom()
|
||||||
|
else -> trainCombatUnit(cityInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cityInfo.civInfo == cityInfo.civInfo.gameInfo.getPlayerCivilization())
|
if (cityInfo.civInfo == cityInfo.civInfo.gameInfo.getPlayerCivilization())
|
||||||
cityInfo.civInfo.addNotification("Work has started on $currentConstruction", cityInfo.location)
|
cityInfo.civInfo.addNotification("Work has started on $currentConstruction", cityInfo.location)
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.unciv.logic
|
|||||||
|
|
||||||
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.TileMap
|
import com.unciv.logic.map.TileMap
|
||||||
import com.unciv.models.gamebasics.GameBasics
|
import com.unciv.models.gamebasics.GameBasics
|
||||||
import com.unciv.ui.utils.getRandom
|
import com.unciv.ui.utils.getRandom
|
||||||
@ -48,16 +49,20 @@ class GameInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
placeBarbarianUnit()
|
placeBarbarianUnit(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
turns++
|
turns++
|
||||||
}
|
}
|
||||||
|
|
||||||
fun placeBarbarianUnit() {
|
fun placeBarbarianUnit(tileToPlace: TileInfo?) {
|
||||||
val playerViewableTiles = getPlayerCivilization().getViewableTiles().toHashSet()
|
var tile = tileToPlace
|
||||||
val viableTiles = tileMap.values.filterNot { playerViewableTiles.contains(it) || it.unit!=null }
|
if(tileToPlace==null) {
|
||||||
tileMap.placeUnitNearTile(viableTiles.getRandom().position,"Warrior",getBarbarianCivilization())
|
val playerViewableTiles = getPlayerCivilization().getViewableTiles().toHashSet()
|
||||||
|
val viableTiles = tileMap.values.filterNot { playerViewableTiles.contains(it) || it.unit != null }
|
||||||
|
tile=viableTiles.getRandom()
|
||||||
|
}
|
||||||
|
tileMap.placeUnitNearTile(tile!!.position,"Warrior",getBarbarianCivilization())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTransients() {
|
fun setTransients() {
|
||||||
|
@ -97,7 +97,11 @@ class CityConstructions {
|
|||||||
if (inProgressConstructions[currentConstruction]!! >= productionCost) {
|
if (inProgressConstructions[currentConstruction]!! >= productionCost) {
|
||||||
construction.postBuildEvent(this)
|
construction.postBuildEvent(this)
|
||||||
inProgressConstructions.remove(currentConstruction)
|
inProgressConstructions.remove(currentConstruction)
|
||||||
cityInfo.civInfo.addNotification(currentConstruction + " has been built in " + cityInfo.name, cityInfo.location)
|
|
||||||
|
if(construction is Building && construction.isWonder)
|
||||||
|
cityInfo.civInfo.gameInfo.getPlayerCivilization().addNotification(currentConstruction + " has been built in " + cityInfo.name, cityInfo.location)
|
||||||
|
else
|
||||||
|
cityInfo.civInfo.addNotification(currentConstruction + " has been built in " + cityInfo.name, cityInfo.location)
|
||||||
|
|
||||||
Automation().chooseNextConstruction(this)
|
Automation().chooseNextConstruction(this)
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ class Building : NamedStats(), IConstruction, ICivilopedia {
|
|||||||
if (construction.isBuilt(name)) return false
|
if (construction.isBuilt(name)) return false
|
||||||
val civInfo = construction.cityInfo.civInfo
|
val civInfo = construction.cityInfo.civInfo
|
||||||
if (requiredTech != null && !civInfo.tech.isResearched(requiredTech!!)) return false
|
if (requiredTech != null && !civInfo.tech.isResearched(requiredTech!!)) return false
|
||||||
if (isWonder && civInfo.cities.any {
|
if (isWonder && civInfo.gameInfo.civilizations.flatMap { it.cities }.any {
|
||||||
it.cityConstructions.isBuilding(name) || it.cityConstructions.isBuilt(name)
|
it.cityConstructions.isBuilding(name) || it.cityConstructions.isBuilt(name)
|
||||||
})
|
})
|
||||||
return false
|
return false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user