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.math.Vector2
import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.Json
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.TileMap import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.* import com.unciv.models.gamebasics.*
import com.unciv.models.gamebasics.Unit import com.unciv.models.gamebasics.Unit
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
import com.unciv.ui.GameSettings 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.utils.getRandom
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
@ -25,7 +26,7 @@ class UnCivGame : Game() {
setupGameBasics() setupGameBasics()
Current = this Current = this
if (GameSaver.getSave("Autosave").exists()) { if (GameSaver().getSave("Autosave").exists()) {
try { try {
loadGame("Autosave") loadGame("Autosave")
} catch (ex: Exception) { // silent fail if we can't read the autosave } catch (ex: Exception) { // silent fail if we can't read the autosave
@ -36,7 +37,7 @@ class UnCivGame : Game() {
} }
fun loadGame(gameName:String){ fun loadGame(gameName:String){
gameInfo = GameSaver.loadGame( gameName) gameInfo = GameSaver().loadGame( gameName)
worldScreen = WorldScreen() worldScreen = WorldScreen()
setWorldScreen() 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.Gdx
import com.badlogic.gdx.files.FileHandle import com.badlogic.gdx.files.FileHandle
import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.Json
import com.unciv.logic.GameInfo
object GameSaver { class GameSaver {
private const val saveFilesFolder = "SaveFiles" private val saveFilesFolder = "SaveFiles"
fun getSave(GameName: String): FileHandle { fun getSave(GameName: String): FileHandle {
return Gdx.files.local("$saveFilesFolder/$GameName") 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 com.badlogic.gdx.math.Vector2
import java.util.* import java.util.*
object HexMath { class HexMath {
fun GetVectorForAngle(angle: Float): Vector2 { fun GetVectorForAngle(angle: Float): Vector2 {
return Vector2(Math.sin(angle.toDouble()).toFloat(), Math.cos(angle.toDouble()).toFloat()) return Vector2(Math.sin(angle.toDouble()).toFloat(), Math.cos(angle.toDouble()).toFloat())

View File

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

View File

@ -2,9 +2,9 @@ package com.unciv.logic.map
import com.badlogic.gdx.math.Vector2 import com.badlogic.gdx.math.Vector2
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.logic.HexMath
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.ui.utils.HexMath
class TileMap { class TileMap {
@ -33,11 +33,11 @@ class TileMap {
} }
fun getTilesInDistance(origin: Vector2, distance: Int): List<TileInfo> { 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> { 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 package com.unciv.ui
import com.badlogic.gdx.graphics.Color 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.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.badlogic.gdx.utils.Array
import com.unciv.UnCivGame 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.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.utils.disable import com.unciv.ui.utils.disable
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
@ -20,14 +23,14 @@ class LoadScreen : PickerScreen() {
val deleteSaveButton = TextButton("Delete save", CameraStageBaseScreen.skin) val deleteSaveButton = TextButton("Delete save", CameraStageBaseScreen.skin)
deleteSaveButton .addClickListener { deleteSaveButton .addClickListener {
GameSaver.deleteSave(selectedSave) GameSaver().deleteSave(selectedSave)
UnCivGame.Current.screen = LoadScreen() UnCivGame.Current.screen = LoadScreen()
} }
deleteSaveButton.disable() deleteSaveButton.disable()
rightSideGroup.addActor(deleteSaveButton) rightSideGroup.addActor(deleteSaveButton)
topTable.add(saveTable) topTable.add(saveTable)
val saves = GameSaver.getSaves() val saves = GameSaver().getSaves()
rightSideButton.setText("Load game") rightSideButton.setText("Load game")
saves.forEach { saves.forEach {
val textButton = TextButton(it,skin) 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.TextButton
import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameSaver
import com.unciv.ui.cityscreen.addClickListener import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@ -19,7 +19,7 @@ class SaveScreen : PickerScreen() {
val currentSaves = Table() val currentSaves = Table()
currentSaves.add(Label("Current saves:",skin)).row() currentSaves.add(Label("Current saves:",skin)).row()
val saves = GameSaver.getSaves() val saves = GameSaver().getSaves()
saves.forEach { saves.forEach {
val textButton = TextButton(it, skin) val textButton = TextButton(it, skin)
textButton.addClickListener { textButton.addClickListener {
@ -44,7 +44,7 @@ class SaveScreen : PickerScreen() {
rightSideButton.setText("Save game") rightSideButton.setText("Save game")
rightSideButton.addClickListener { rightSideButton.addClickListener {
GameSaver.saveGame(UnCivGame.Current.gameInfo, textField.text) GameSaver().saveGame(UnCivGame.Current.gameInfo, textField.text)
UnCivGame.Current.setWorldScreen() UnCivGame.Current.setWorldScreen()
} }
rightSideButton.enable() 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.ui.*
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.logic.HexMath
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.centerX import com.unciv.ui.utils.centerX
import java.util.* 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 val groupSize = 50
group.setPosition(stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(), group.setPosition(stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(),
stage.height / 2 + positionalVector.y * 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.Group
import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.Image
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.logic.HexMath
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.RoadStatus
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.center import com.unciv.ui.utils.center
import com.unciv.ui.utils.colorFromRGB 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() }) { for (neighbor in tileInfo.neighbors.filter { it.getOwner() != tileInfo.getOwner() }) {
val relativeHexPosition = tileInfo.position.cpy().sub(neighbor.position) 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. // 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 roadImages[neighbor.position.toString()] = image
val relativeHexPosition = tileInfo.position.cpy().sub(neighbor.position) 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. // This is some crazy voodoo magic so I'll explain.
image.moveBy(25f, 25f) // Move road to center of tile 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.InputEvent
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener
import com.unciv.logic.HexMath
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.logic.map.TileMap import com.unciv.logic.map.TileMap
import com.unciv.logic.map.UnitType import com.unciv.logic.map.UnitType
import com.unciv.ui.cityscreen.addClickListener import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.tilegroups.WorldTileGroup import com.unciv.ui.tilegroups.WorldTileGroup
import com.unciv.ui.utils.HexMath
import com.unciv.ui.utils.colorFromRGB import com.unciv.ui.utils.colorFromRGB
class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: TileMap, internal val civInfo: CivilizationInfo) : ScrollPane(null) { 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 val groupSize = 50
group.setPosition(worldScreen.stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(), group.setPosition(worldScreen.stage.width / 2 + positionalVector.x * 0.8f * groupSize.toFloat(),
worldScreen.stage.height / 2 + positionalVector.y * 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.math.Vector2
import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.ui.cityscreen.addClickListener import com.unciv.ui.cityscreen.addClickListener
import com.unciv.ui.pickerscreens.PolicyPickerScreen import com.unciv.ui.pickerscreens.PolicyPickerScreen
import com.unciv.ui.pickerscreens.TechPickerScreen import com.unciv.ui.pickerscreens.TechPickerScreen
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.GameSaver
import com.unciv.ui.worldscreen.unit.UnitActionsTable import com.unciv.ui.worldscreen.unit.UnitActionsTable
class WorldScreen : CameraStageBaseScreen() { class WorldScreen : CameraStageBaseScreen() {
@ -115,7 +115,7 @@ class WorldScreen : CameraStageBaseScreen() {
game.gameInfo.nextTurn() game.gameInfo.nextTurn()
bottomBar.unitTable.currentlyExecutingAction = null bottomBar.unitTable.currentlyExecutingAction = null
kotlin.concurrent.thread { GameSaver.saveGame(game.gameInfo, "Autosave") } kotlin.concurrent.thread { GameSaver().saveGame(game.gameInfo, "Autosave") }
update() update()
displayTutorials("NextTurn") displayTutorials("NextTurn")