Added Egypt, other civs can now build wonders!

This commit is contained in:
Yair Morgenstern 2018-04-25 23:47:03 +03:00
parent 23bd52fc66
commit 4d10e11482
6 changed files with 48 additions and 22 deletions

View File

@ -12,10 +12,15 @@
"Eretria","Pergamon","Miletos","Megara","Phocaea"]
},
{
name:"Chinese",
RGB:[ 101, 253, 155],
name:"China",
RGB:[ 9, 112, 84],
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",
RGB:[200,200,200]

View File

@ -12,6 +12,7 @@ import com.unciv.models.gamebasics.Unit
import com.unciv.models.stats.INamed
import com.unciv.ui.GameSettings
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.utils.getRandom
import com.unciv.ui.worldscreen.WorldScreen
class UnCivGame : Game() {
@ -52,19 +53,23 @@ class UnCivGame : Game() {
gameInfo.tileMap = TileMap(20)
gameInfo.civilizations.add(CivilizationInfo("Babylon", Vector2.Zero, gameInfo)) // first one is player civ
val freeTiles = gameInfo.tileMap.values
freeTiles.removeAll()
val freeTiles = gameInfo.tileMap.values.toMutableList()
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(Vector2.Zero,6))
val barbarianCivilization = CivilizationInfo()
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"
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()

View File

@ -186,16 +186,23 @@ class Automation {
fun chooseNextConstruction(cityConstructions: CityConstructions) {
cityConstructions.run {
val buildableNotWonders = getBuildableBuildings().filterNot { (getConstruction(it) as Building).isWonder }
if (!buildableNotWonders.isEmpty()) {
currentConstruction = buildableNotWonders.first()
} else {
val militaryUnits = cityInfo.civInfo.getCivUnits().filter { it.getBaseUnit().unitType != UnitType.Civilian }.size
if (cityInfo.civInfo.getCivUnits().none { it.name == CityConstructions.Worker } || militaryUnits > cityInfo.civInfo.cities.size * 2) {
currentConstruction = CityConstructions.Worker
} else {
trainCombatUnit(cityInfo)
}
val buildableWonders = getBuildableBuildings().filter { (getConstruction(it) as Building).isWonder }
val civUnits = cityInfo.civInfo.getCivUnits()
val militaryUnits = civUnits.filter { it.getBaseUnit().unitType != UnitType.Civilian }.size
val workers = civUnits.filter { it.name == CityConstructions.Worker }.size
val cities = cityInfo.civInfo.cities.size
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())
cityInfo.civInfo.addNotification("Work has started on $currentConstruction", cityInfo.location)
}

View File

@ -2,6 +2,7 @@ package com.unciv.logic
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.Notification
import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.GameBasics
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
placeBarbarianUnit()
placeBarbarianUnit(null)
}
turns++
}
fun placeBarbarianUnit() {
val playerViewableTiles = getPlayerCivilization().getViewableTiles().toHashSet()
val viableTiles = tileMap.values.filterNot { playerViewableTiles.contains(it) || it.unit!=null }
tileMap.placeUnitNearTile(viableTiles.getRandom().position,"Warrior",getBarbarianCivilization())
fun placeBarbarianUnit(tileToPlace: TileInfo?) {
var tile = tileToPlace
if(tileToPlace==null) {
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() {

View File

@ -97,7 +97,11 @@ class CityConstructions {
if (inProgressConstructions[currentConstruction]!! >= productionCost) {
construction.postBuildEvent(this)
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)
}

View File

@ -134,7 +134,7 @@ class Building : NamedStats(), IConstruction, ICivilopedia {
if (construction.isBuilt(name)) return false
val civInfo = construction.cityInfo.civInfo
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)
})
return false