From 9316510a07e53571160197234ca6d46cbe19d8d0 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 29 May 2018 13:05:16 +0300 Subject: [PATCH] GameSaver and HexMath are now in "logic" and are not static classes --- core/src/com/unciv/UnCivGame.kt | 7 ++-- .../unciv/{ui/utils => logic}/GameSaver.kt | 7 ++-- .../com/unciv/{ui/utils => logic}/HexMath.kt | 4 +- .../com/unciv/logic/map/RandomMapGenerator.kt | 8 ++-- core/src/com/unciv/logic/map/TileMap.kt | 6 +-- core/src/com/unciv/ui/LoadScreen.kt | 42 +++++++++++++++++-- core/src/com/unciv/ui/SaveScreen.kt | 6 +-- .../src/com/unciv/ui/cityscreen/CityScreen.kt | 4 +- core/src/com/unciv/ui/tilegroups/TileGroup.kt | 6 +-- .../com/unciv/ui/worldscreen/TileMapHolder.kt | 4 +- .../com/unciv/ui/worldscreen/WorldScreen.kt | 4 +- 11 files changed, 66 insertions(+), 32 deletions(-) rename core/src/com/unciv/{ui/utils => logic}/GameSaver.kt (85%) rename core/src/com/unciv/{ui/utils => logic}/HexMath.kt (98%) diff --git a/core/src/com/unciv/UnCivGame.kt b/core/src/com/unciv/UnCivGame.kt index 0fe92c5f80..76a269403e 100644 --- a/core/src/com/unciv/UnCivGame.kt +++ b/core/src/com/unciv/UnCivGame.kt @@ -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() } diff --git a/core/src/com/unciv/ui/utils/GameSaver.kt b/core/src/com/unciv/logic/GameSaver.kt similarity index 85% rename from core/src/com/unciv/ui/utils/GameSaver.kt rename to core/src/com/unciv/logic/GameSaver.kt index ac6045d2f6..fd461c470c 100644 --- a/core/src/com/unciv/ui/utils/GameSaver.kt +++ b/core/src/com/unciv/logic/GameSaver.kt @@ -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") diff --git a/core/src/com/unciv/ui/utils/HexMath.kt b/core/src/com/unciv/logic/HexMath.kt similarity index 98% rename from core/src/com/unciv/ui/utils/HexMath.kt rename to core/src/com/unciv/logic/HexMath.kt index 533f9bf7a7..4594e4a7b4 100644 --- a/core/src/com/unciv/ui/utils/HexMath.kt +++ b/core/src/com/unciv/logic/HexMath.kt @@ -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()) diff --git a/core/src/com/unciv/logic/map/RandomMapGenerator.kt b/core/src/com/unciv/logic/map/RandomMapGenerator.kt index 81636524f6..93ec1337d4 100644 --- a/core/src/com/unciv/logic/map/RandomMapGenerator.kt +++ b/core/src/com/unciv/logic/map/RandomMapGenerator.kt @@ -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() - 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(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 { val map = HashMap() - for (vector in HexMath.GetVectorsInDistance(Vector2.Zero, distance)) + for (vector in HexMath().GetVectorsInDistance(Vector2.Zero, distance)) map[vector.toString()] = addRandomTile(vector) return map } diff --git a/core/src/com/unciv/logic/map/TileMap.kt b/core/src/com/unciv/logic/map/TileMap.kt index 233594b274..68ffc5b2fe 100644 --- a/core/src/com/unciv/logic/map/TileMap.kt +++ b/core/src/com/unciv/logic/map/TileMap.kt @@ -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 { - 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 { - return HexMath.GetVectorsAtDistance(origin, distance).filter {contains(it)}.map { get(it) } + return HexMath().GetVectorsAtDistance(origin, distance).filter {contains(it)}.map { get(it) } } diff --git a/core/src/com/unciv/ui/LoadScreen.kt b/core/src/com/unciv/ui/LoadScreen.kt index b222b3a254..f0787d243d 100644 --- a/core/src/com/unciv/ui/LoadScreen.kt +++ b/core/src/com/unciv/ui/LoadScreen.kt @@ -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(skin) + val civArray = Array() + 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() + worldSizeToRadius.put("Small",10) + worldSizeToRadius.put("Medium",20) + worldSizeToRadius.put("Large",30) + val worldSizeSelectBox = SelectBox(skin) + val worldSizeArray = Array() + 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) + } +} \ No newline at end of file diff --git a/core/src/com/unciv/ui/SaveScreen.kt b/core/src/com/unciv/ui/SaveScreen.kt index 8797ad256f..34305dc001 100644 --- a/core/src/com/unciv/ui/SaveScreen.kt +++ b/core/src/com/unciv/ui/SaveScreen.kt @@ -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() diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index 1bf5b1862f..0abbf757eb 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -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()) diff --git a/core/src/com/unciv/ui/tilegroups/TileGroup.kt b/core/src/com/unciv/ui/tilegroups/TileGroup.kt index 7029df8157..f363dfbb4f 100644 --- a/core/src/com/unciv/ui/tilegroups/TileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/TileGroup.kt @@ -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 diff --git a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt index 7a1831f9ae..4284452068 100644 --- a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt +++ b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt @@ -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()) diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index b5e7f5a7fa..ab3076e726 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -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")