mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-25 04:43:05 -04:00
Map mirroring!
This commit is contained in:
parent
19a1bbcdc3
commit
e8afeb505e
@ -39,6 +39,14 @@ object MapType {
|
||||
const val empty = "Empty"
|
||||
}
|
||||
|
||||
object MirroringType {
|
||||
const val none = "None"
|
||||
const val aroundCenterTile = "Around Center Tile"
|
||||
const val fourway = "4-way"
|
||||
const val topbottom = "Top-Bottom"
|
||||
const val leftright = "Bottom-Top"
|
||||
}
|
||||
|
||||
class MapParameters : IsPartOfGameInfoSerialization {
|
||||
var name = ""
|
||||
var type = MapType.pangaea
|
||||
@ -46,6 +54,7 @@ class MapParameters : IsPartOfGameInfoSerialization {
|
||||
var shape = MapShape.hexagonal
|
||||
var mapSize = MapSize.Medium
|
||||
var mapResources = MapResourceSetting.default.label
|
||||
var mirroring: String = MirroringType.none
|
||||
var noRuins = false
|
||||
var noNaturalWonders = false
|
||||
// DO NOT CHANGE DEFAULTS since that changes all existing games to new default!
|
||||
|
@ -1,12 +1,10 @@
|
||||
package com.unciv.logic.map.mapgenerator
|
||||
|
||||
import com.badlogic.gdx.math.Vector2
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.logic.civilization.Civilization
|
||||
import com.unciv.logic.map.MapParameters
|
||||
import com.unciv.logic.map.MapShape
|
||||
import com.unciv.logic.map.MapType
|
||||
import com.unciv.logic.map.TileMap
|
||||
import com.unciv.logic.map.*
|
||||
import com.unciv.logic.map.mapgenerator.mapregions.MapRegions
|
||||
import com.unciv.logic.map.tile.Tile
|
||||
import com.unciv.models.Counter
|
||||
@ -173,6 +171,8 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc
|
||||
runAndMeasure("spreadAncientRuins") {
|
||||
spreadAncientRuins(map)
|
||||
}
|
||||
|
||||
mirror(map)
|
||||
|
||||
// Map generation may generate incompatible terrain/feature combinations
|
||||
for (tile in map.values)
|
||||
@ -180,6 +180,57 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc
|
||||
|
||||
return map
|
||||
}
|
||||
|
||||
private fun flipTopBottom(vector: Vector2): Vector2 = Vector2(-vector.y, -vector.x)
|
||||
private fun flipLeftRight(vector: Vector2): Vector2 = Vector2(vector.y, vector.x)
|
||||
|
||||
private fun mirror(map: TileMap) {
|
||||
fun copyTile(tile: Tile, x: Int, y: Int) {
|
||||
val mirrorTile = map.getIfTileExistsOrNull(x, y) ?: return
|
||||
tile.setBaseTerrain(mirrorTile.getBaseTerrain())
|
||||
// todo rivers are a bitch
|
||||
tile.naturalWonder = mirrorTile.naturalWonder
|
||||
tile.setTerrainFeatures(mirrorTile.terrainFeatures)
|
||||
tile.resource = mirrorTile.resource
|
||||
tile.improvement = mirrorTile.improvement
|
||||
}
|
||||
|
||||
when (map.mapParameters.mirroring){
|
||||
MirroringType.none -> return
|
||||
MirroringType.topbottom -> {
|
||||
for (tile in map.values) {
|
||||
if (tile.getRow() <= 0) continue
|
||||
val flip = flipTopBottom(tile.position)
|
||||
copyTile(tile, flip.x.toInt(), flip.y.toInt())
|
||||
}
|
||||
}
|
||||
MirroringType.leftright -> {
|
||||
for (tile in map.values) {
|
||||
if (tile.getColumn() <= 0) continue
|
||||
val flip = flipLeftRight(tile.position)
|
||||
copyTile(tile, flip.x.toInt(), flip.y.toInt())
|
||||
}
|
||||
}
|
||||
MirroringType.aroundCenterTile -> {
|
||||
for (tile in map.values) {
|
||||
if (tile.getRow() <= 0) continue
|
||||
val flipTopBottom = flipTopBottom(tile.position)
|
||||
val flipTopBottomLeftRight = flipLeftRight(flipTopBottom)
|
||||
copyTile(tile, flipTopBottomLeftRight.x.toInt(), flipTopBottomLeftRight.y.toInt())
|
||||
}
|
||||
}
|
||||
MirroringType.fourway -> {
|
||||
for (tile in map.values) {
|
||||
if (tile.getRow() < 0 && tile.getColumn() < 0) continue
|
||||
var originVector = tile.position
|
||||
if (tile.getRow() >= 0) originVector = flipTopBottom(originVector)
|
||||
if (tile.getColumn() >= 0) originVector = flipLeftRight(originVector)
|
||||
copyTile(tile, originVector.x.toInt(), originVector.y.toInt())
|
||||
}
|
||||
}
|
||||
else -> return
|
||||
}
|
||||
}
|
||||
|
||||
fun generateSingleStep(map: TileMap, step: MapGeneratorSteps) {
|
||||
if (map.mapParameters.seed == 0L)
|
||||
|
Loading…
x
Reference in New Issue
Block a user