GameSaver and HexMath are now in "logic" and are not static classes

This commit is contained in:
Yair Morgenstern 2018-05-29 13:05:16 +03:00
parent 36f9ba6f8c
commit 9316510a07
11 changed files with 66 additions and 32 deletions

View File

@ -5,13 +5,14 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.math.Vector2
import com.badlogic.gdx.utils.Json
import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.*
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.NewGameScreen
import com.unciv.ui.utils.getRandom
import com.unciv.ui.worldscreen.WorldScreen
@ -25,7 +26,7 @@ class UnCivGame : Game() {
setupGameBasics()
Current = this
if (GameSaver.getSave("Autosave").exists()) {
if (GameSaver().getSave("Autosave").exists()) {
try {
loadGame("Autosave")
} catch (ex: Exception) { // silent fail if we can't read the autosave
@ -36,7 +37,7 @@ class UnCivGame : Game() {
}
fun loadGame(gameName:String){
gameInfo = GameSaver.loadGame( gameName)
gameInfo = GameSaver().loadGame( gameName)
worldScreen = WorldScreen()
setWorldScreen()
}

View File

@ -1,12 +1,11 @@
package com.unciv.ui.utils
package com.unciv.logic
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.files.FileHandle
import com.badlogic.gdx.utils.Json
import com.unciv.logic.GameInfo
object GameSaver {
private const val saveFilesFolder = "SaveFiles"
class GameSaver {
private val saveFilesFolder = "SaveFiles"
fun getSave(GameName: String): FileHandle {
return Gdx.files.local("$saveFilesFolder/$GameName")

View File

@ -1,9 +1,9 @@
package com.unciv.ui.utils
package com.unciv.logic
import com.badlogic.gdx.math.Vector2
import java.util.*
object HexMath {
class HexMath {
fun GetVectorForAngle(angle: Float): Vector2 {
return Vector2(Math.sin(angle.toDouble()).toFloat(), Math.cos(angle.toDouble()).toFloat())

View File

@ -1,11 +1,11 @@
package com.unciv.logic.map
import com.badlogic.gdx.math.Vector2
import com.unciv.logic.HexMath
import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.ResourceType
import com.unciv.models.gamebasics.TerrainType
import com.unciv.models.gamebasics.TileResource
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.getRandom
class SeedRandomMapGenerator : RandomMapGenerator() {
@ -14,7 +14,7 @@ class SeedRandomMapGenerator : RandomMapGenerator() {
val map = HashMap<Vector2, TileInfo?>()
for (vector in HexMath.GetVectorsInDistance(Vector2.Zero, distance))
for (vector in HexMath().GetVectorsInDistance(Vector2.Zero, distance))
map[vector] = null
class Area(val terrain: String) {
@ -49,7 +49,7 @@ class SeedRandomMapGenerator : RandomMapGenerator() {
val expandableAreas = ArrayList<Area>(areas)
while (expandableAreas.isNotEmpty()){
val areaToExpand = expandableAreas.getRandom()
val availableExpansionVectors = areaToExpand.locations.flatMap { HexMath.GetAdjacentVectors(it) }.distinct()
val availableExpansionVectors = areaToExpand.locations.flatMap { HexMath().GetAdjacentVectors(it) }.distinct()
.filter { map.containsKey(it) && map[it] == null }
if(availableExpansionVectors.isEmpty()) expandableAreas -= areaToExpand
else {
@ -130,7 +130,7 @@ open class RandomMapGenerator {
open fun generateMap(distance: Int): HashMap<String, TileInfo> {
val map = HashMap<String, TileInfo>()
for (vector in HexMath.GetVectorsInDistance(Vector2.Zero, distance))
for (vector in HexMath().GetVectorsInDistance(Vector2.Zero, distance))
map[vector.toString()] = addRandomTile(vector)
return map
}

View File

@ -2,9 +2,9 @@ package com.unciv.logic.map
import com.badlogic.gdx.math.Vector2
import com.unciv.logic.GameInfo
import com.unciv.logic.HexMath
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.GameBasics
import com.unciv.ui.utils.HexMath
class TileMap {
@ -33,11 +33,11 @@ class TileMap {
}
fun getTilesInDistance(origin: Vector2, distance: Int): List<TileInfo> {
return HexMath.GetVectorsInDistance(origin, distance).filter {contains(it)}.map { get(it) }
return HexMath().GetVectorsInDistance(origin, distance).filter {contains(it)}.map { get(it) }
}
fun getTilesAtDistance(origin: Vector2, distance: Int): List<TileInfo> {
return HexMath.GetVectorsAtDistance(origin, distance).filter {contains(it)}.map { get(it) }
return HexMath().GetVectorsAtDistance(origin, distance).filter {contains(it)}.map { get(it) }
}

View File

@ -1,13 +1,16 @@
package com.unciv.ui
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox
import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.utils.Array
import com.unciv.UnCivGame
import com.unciv.logic.GameSaver
import com.unciv.models.gamebasics.GameBasics
import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.utils.disable
import com.unciv.ui.utils.enable
@ -20,14 +23,14 @@ class LoadScreen : PickerScreen() {
val deleteSaveButton = TextButton("Delete save", CameraStageBaseScreen.skin)
deleteSaveButton .addClickListener {
GameSaver.deleteSave(selectedSave)
GameSaver().deleteSave(selectedSave)
UnCivGame.Current.screen = LoadScreen()
}
deleteSaveButton.disable()
rightSideGroup.addActor(deleteSaveButton)
topTable.add(saveTable)
val saves = GameSaver.getSaves()
val saves = GameSaver().getSaves()
rightSideButton.setText("Load game")
saves.forEach {
val textButton = TextButton(it,skin)
@ -51,7 +54,38 @@ class LoadScreen : PickerScreen() {
}
}
class NewGameScreen:CameraStageBaseScreen(){
init {
val table = Table()
table.skin=skin
table.add("Civilization: ")
val civSelectBox = SelectBox<String>(skin)
val civArray = Array<String>()
GameBasics.Civilizations.keys.filterNot { it=="Barbarians" }.forEach{civArray.add(it)}
civSelectBox.setItems(civArray)
civSelectBox.selected = civSelectBox.items.first()
table.add(civSelectBox).pad(10f).row()
table.add("World size: ")
val worldSizeToRadius=LinkedHashMap<String,Int>()
worldSizeToRadius.put("Small",10)
worldSizeToRadius.put("Medium",20)
worldSizeToRadius.put("Large",30)
val worldSizeSelectBox = SelectBox<String>(skin)
val worldSizeArray = Array<String>()
worldSizeToRadius.keys.forEach{worldSizeArray.add(it)}
worldSizeSelectBox.setItems(worldSizeArray)
worldSizeSelectBox.selected = "Medium"
table.add(worldSizeSelectBox)
val createButton = TextButton("Start game!",skin)
createButton.addClickListener { }
table.setFillParent(true)
table.pack()
stage.addActor(table)
}
}

View File

@ -5,9 +5,9 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.unciv.UnCivGame
import com.unciv.logic.GameSaver
import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.utils.enable
import java.text.SimpleDateFormat
import java.util.*
@ -19,7 +19,7 @@ class SaveScreen : PickerScreen() {
val currentSaves = Table()
currentSaves.add(Label("Current saves:",skin)).row()
val saves = GameSaver.getSaves()
val saves = GameSaver().getSaves()
saves.forEach {
val textButton = TextButton(it, skin)
textButton.addClickListener {
@ -44,7 +44,7 @@ class SaveScreen : PickerScreen() {
rightSideButton.setText("Save game")
rightSideButton.addClickListener {
GameSaver.saveGame(UnCivGame.Current.gameInfo, textField.text)
GameSaver().saveGame(UnCivGame.Current.gameInfo, textField.text)
UnCivGame.Current.setWorldScreen()
}
rightSideButton.enable()

View File

@ -6,10 +6,10 @@ import com.badlogic.gdx.scenes.scene2d.InputEvent
import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
import com.badlogic.gdx.utils.Align
import com.unciv.logic.HexMath
import com.unciv.logic.city.CityInfo
import com.unciv.logic.map.TileInfo
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.centerX
import java.util.*
@ -181,7 +181,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() {
}
}
val positionalVector = HexMath.Hex2WorldCoords(tileInfo.position.cpy().sub(cityInfo.location))
val positionalVector = HexMath().Hex2WorldCoords(tileInfo.position.cpy().sub(cityInfo.location))
val groupSize = 50
group.setPosition(stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(),
stage.height / 2 + positionalVector.y * 0.8f * groupSize.toFloat())

View File

@ -4,10 +4,10 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.Group
import com.badlogic.gdx.scenes.scene2d.ui.Image
import com.badlogic.gdx.utils.Align
import com.unciv.logic.HexMath
import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.RoadStatus
import com.unciv.logic.map.TileInfo
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.center
import com.unciv.ui.utils.colorFromRGB
@ -111,7 +111,7 @@ open class TileGroup(var tileInfo: TileInfo) : Group() {
for (neighbor in tileInfo.neighbors.filter { it.getOwner() != tileInfo.getOwner() }) {
val relativeHexPosition = tileInfo.position.cpy().sub(neighbor.position)
val relativeWorldPosition = HexMath.Hex2WorldCoords(relativeHexPosition)
val relativeWorldPosition = HexMath().Hex2WorldCoords(relativeHexPosition)
// This is some crazy voodoo magic so I'll explain.
@ -150,7 +150,7 @@ open class TileGroup(var tileInfo: TileInfo) : Group() {
roadImages[neighbor.position.toString()] = image
val relativeHexPosition = tileInfo.position.cpy().sub(neighbor.position)
val relativeWorldPosition = HexMath.Hex2WorldCoords(relativeHexPosition)
val relativeWorldPosition = HexMath().Hex2WorldCoords(relativeHexPosition)
// This is some crazy voodoo magic so I'll explain.
image.moveBy(25f, 25f) // Move road to center of tile

View File

@ -6,13 +6,13 @@ import com.badlogic.gdx.scenes.scene2d.Group
import com.badlogic.gdx.scenes.scene2d.InputEvent
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
import com.unciv.logic.HexMath
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.TileMap
import com.unciv.logic.map.UnitType
import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.tilegroups.WorldTileGroup
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.colorFromRGB
class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: TileMap, internal val civInfo: CivilizationInfo) : ScrollPane(null) {
@ -40,7 +40,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
val positionalVector = HexMath.Hex2WorldCoords(tileInfo.position)
val positionalVector = HexMath().Hex2WorldCoords(tileInfo.position)
val groupSize = 50
group.setPosition(worldScreen.stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(),
worldScreen.stage.height / 2 + positionalVector.y * 0.8f * groupSize.toFloat())

View File

@ -3,12 +3,12 @@ package com.unciv.ui.worldscreen
import com.badlogic.gdx.math.Vector2
import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PolicyPickerScreen
import com.unciv.ui.pickerscreens.TechPickerScreen
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.worldscreen.unit.UnitActionsTable
class WorldScreen : CameraStageBaseScreen() {
@ -115,7 +115,7 @@ class WorldScreen : CameraStageBaseScreen() {
game.gameInfo.nextTurn()
bottomBar.unitTable.currentlyExecutingAction = null
kotlin.concurrent.thread { GameSaver.saveGame(game.gameInfo, "Autosave") }
kotlin.concurrent.thread { GameSaver().saveGame(game.gameInfo, "Autosave") }
update()
displayTutorials("NextTurn")