2018-05-29 22:01:22 +03:00
|
|
|
package com.unciv
|
|
|
|
|
2018-07-20 15:58:03 +03:00
|
|
|
import com.badlogic.gdx.math.Vector2
|
2018-05-29 22:01:22 +03:00
|
|
|
import com.unciv.logic.GameInfo
|
|
|
|
import com.unciv.logic.civilization.CivilizationInfo
|
|
|
|
import com.unciv.logic.map.TileMap
|
|
|
|
import com.unciv.models.gamebasics.GameBasics
|
|
|
|
import com.unciv.ui.utils.getRandom
|
|
|
|
|
|
|
|
class GameStarter(){
|
2018-07-25 22:56:25 +03:00
|
|
|
fun startNewGame(mapRadius: Int, numberOfCivs: Int, civilization: String, difficulty:String): GameInfo {
|
2018-05-29 22:01:22 +03:00
|
|
|
val gameInfo = GameInfo()
|
|
|
|
|
|
|
|
gameInfo.tileMap = TileMap(mapRadius)
|
2018-05-31 17:23:46 +03:00
|
|
|
gameInfo.tileMap.gameInfo = gameInfo // need to set this transient before placing units in the map
|
2018-07-18 18:45:37 +03:00
|
|
|
|
2018-05-29 22:01:22 +03:00
|
|
|
|
2018-07-20 15:58:03 +03:00
|
|
|
fun vectorIsWithinNTilesOfEdge(vector: Vector2,n:Int): Boolean {
|
|
|
|
return vector.x < mapRadius-n
|
|
|
|
&& vector.x > n-mapRadius
|
|
|
|
&& vector.y < mapRadius-n
|
|
|
|
&& vector.y > n-mapRadius
|
|
|
|
}
|
|
|
|
|
2018-07-26 23:16:56 +03:00
|
|
|
val distanceAroundStartingPointNoOneElseWillStartIn = 5
|
2018-07-20 15:58:03 +03:00
|
|
|
val freeTiles = gameInfo.tileMap.values.toMutableList().filter { vectorIsWithinNTilesOfEdge(it.position,3)}.toMutableList()
|
|
|
|
val playerPosition = freeTiles.getRandom().position
|
2018-07-25 22:56:25 +03:00
|
|
|
val playerCiv = CivilizationInfo(civilization, playerPosition, gameInfo)
|
|
|
|
playerCiv.difficulty=difficulty
|
|
|
|
gameInfo.civilizations.add(playerCiv) // first one is player civ
|
2018-07-18 18:45:37 +03:00
|
|
|
|
2018-07-27 10:03:44 +03:00
|
|
|
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(playerPosition, distanceAroundStartingPointNoOneElseWillStartIn ))
|
2018-05-29 22:01:22 +03:00
|
|
|
|
|
|
|
val barbarianCivilization = CivilizationInfo()
|
|
|
|
gameInfo.civilizations.add(barbarianCivilization)// second is barbarian civ
|
|
|
|
|
2018-08-09 18:44:43 +03:00
|
|
|
for (civname in GameBasics.Nations.keys.filterNot { it=="Barbarians" || it==civilization }.take(numberOfCivs)) {
|
2018-07-27 10:03:44 +03:00
|
|
|
if(freeTiles.isEmpty()) break // we can't add any more civs.
|
2018-05-29 22:01:22 +03:00
|
|
|
val startingLocation = freeTiles.toList().getRandom().position
|
2018-07-25 22:56:25 +03:00
|
|
|
val civ = CivilizationInfo(civname, startingLocation, gameInfo)
|
|
|
|
civ.tech.techsResearched.addAll(playerCiv.getDifficulty().aiFreeTechs)
|
|
|
|
gameInfo.civilizations.add(civ)
|
2018-07-26 23:16:56 +03:00
|
|
|
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(startingLocation, distanceAroundStartingPointNoOneElseWillStartIn ))
|
2018-05-29 22:01:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
barbarianCivilization.civName = "Barbarians"
|
|
|
|
|
|
|
|
gameInfo.setTransients() // needs to be before placeBarbarianUnit because it depends on the tilemap having its gameinfo set
|
|
|
|
|
2018-06-10 17:30:49 +03:00
|
|
|
(1..5).forEach {
|
|
|
|
val freeTilesList = freeTiles.toList()
|
|
|
|
if(freeTilesList.isNotEmpty()){
|
|
|
|
val placedTile = freeTilesList.getRandom()
|
|
|
|
gameInfo.placeBarbarianUnit(placedTile)
|
|
|
|
freeTiles.remove(placedTile)
|
|
|
|
}
|
|
|
|
}
|
2018-05-29 22:01:22 +03:00
|
|
|
|
|
|
|
return gameInfo
|
|
|
|
}
|
|
|
|
}
|