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"]
|
||||
},
|
||||
{
|
||||
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]
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user