You now choose civilizations from a list which also tells you what's unique to that civ

This commit is contained in:
Yair Morgenstern
2018-08-24 12:28:27 +03:00
parent 8978d13cdc
commit d48d7aa9fe
3 changed files with 132 additions and 40 deletions

View File

@ -5,28 +5,29 @@ 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.NewGameScreen
import com.unciv.ui.utils.getRandom
class GameStarter(){
fun startNewGame(mapRadius: Int, numberOfCivs: Int, civilization: String, difficulty:String): GameInfo {
fun startNewGame(newGameParameters: NewGameScreen.NewGameParameters): GameInfo {
val gameInfo = GameInfo()
gameInfo.tileMap = TileMap(mapRadius)
gameInfo.tileMap = TileMap(newGameParameters.mapRadius)
gameInfo.tileMap.gameInfo = gameInfo // need to set this transient before placing units in the map
fun vectorIsWithinNTilesOfEdge(vector: Vector2,n:Int): Boolean {
return vector.x < mapRadius-n
&& vector.x > n-mapRadius
&& vector.y < mapRadius-n
&& vector.y > n-mapRadius
return vector.x < newGameParameters.mapRadius-n
&& vector.x > n-newGameParameters.mapRadius
&& vector.y < newGameParameters.mapRadius-n
&& vector.y > n-newGameParameters.mapRadius
}
val distanceAroundStartingPointNoOneElseWillStartIn = 5
val freeTiles = gameInfo.tileMap.values.toMutableList().filter { vectorIsWithinNTilesOfEdge(it.position,3)}.toMutableList()
val playerPosition = freeTiles.getRandom().position
val playerCiv = CivilizationInfo(civilization, gameInfo)
playerCiv.difficulty=difficulty
val playerCiv = CivilizationInfo(newGameParameters.nation, gameInfo)
playerCiv.difficulty=newGameParameters.difficulty
gameInfo.civilizations.add(playerCiv) // first one is player civ
freeTiles.removeAll(gameInfo.tileMap.getTilesInDistance(playerPosition, distanceAroundStartingPointNoOneElseWillStartIn ))
@ -34,8 +35,9 @@ class GameStarter(){
val barbarianCivilization = CivilizationInfo()
gameInfo.civilizations.add(barbarianCivilization)// second is barbarian civ
for (civname in GameBasics.Nations.keys.filterNot { it=="Barbarians" || it==civilization }.take(numberOfCivs)) {
val civ = CivilizationInfo(civname, gameInfo)
for (nationName in GameBasics.Nations.keys.filterNot { it=="Barbarians" || it==newGameParameters.nation }.shuffled()
.take(newGameParameters.numberOfEnemies)) {
val civ = CivilizationInfo(nationName, gameInfo)
civ.tech.techsResearched.addAll(playerCiv.getDifficulty().aiFreeTechs)
gameInfo.civilizations.add(civ)
}
@ -48,7 +50,10 @@ class GameStarter(){
// and only now do we add units for everyone, because otherwise both the gameInfo.setTransients() and the placeUnit will both add the unit to the civ's unit list!
for (civ in gameInfo.civilizations.toList().filter { !it.isBarbarianCivilization() }) {
if(freeTiles.isEmpty()) gameInfo.civilizations.remove(civ) // we can't add any more civs.
if(freeTiles.isEmpty()){
gameInfo.civilizations.remove(civ)
continue
} // we can't add any more civs.
val startingLocation = freeTiles.toList().getRandom().position
civ.placeUnitNearTile(startingLocation, "Settler")