mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 09:18:43 +07:00
You now choose civilizations from a list which also tells you what's unique to that civ
This commit is contained in:
@ -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")
|
||||
|
Reference in New Issue
Block a user