diff --git a/.travis.yml b/.travis.yml index 2882a9f436..8a8e6a099f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ language: android jdk: - oraclejdk8 - before_install: +before_install: - chmod +x gradlew install: @@ -12,8 +12,6 @@ install: - echo yes | sdkmanager "build-tools;26.0.2" &>/dev/null - echo yes | sdkmanager "platforms;android-26" &>/dev/null -sudo: false - before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 07c0e3a698..1ce8418b2b 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -138,4 +138,5 @@ class MapUnit { currentMovement = maxMovement.toFloat() doPreTurnAction(tileInfo) } + } \ No newline at end of file diff --git a/core/src/com/unciv/ui/worldscreen/TileInfoTable.kt b/core/src/com/unciv/ui/worldscreen/TileInfoTable.kt index d1763d02ba..61567ef098 100644 --- a/core/src/com/unciv/ui/worldscreen/TileInfoTable.kt +++ b/core/src/com/unciv/ui/worldscreen/TileInfoTable.kt @@ -8,11 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.utils.Align import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.TileInfo -import com.unciv.models.gamebasics.Building -import com.unciv.models.gamebasics.GameBasics -import com.unciv.models.linq.Linq import com.unciv.ui.cityscreen.addClickListener -import com.unciv.ui.pickerscreens.TechPickerScreen import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.ImageGetter @@ -26,16 +22,16 @@ class TileInfoTable(private val worldScreen: WorldScreen, internal val civInfo: background = tileTableBackground } - internal fun updateTileTable(selectedTile: TileInfo) { + internal fun updateTileTable(tile: TileInfo) { clearChildren() - val stats = selectedTile.getTileStats(civInfo) + val stats = tile.getTileStats(civInfo) pad(20f) columnDefaults(0).padRight(10f) val skin = CameraStageBaseScreen.skin - if (selectedTile.explored) { - add(Label(selectedTile.toString(), skin)).colspan(2) + if (tile.explored) { + add(Label(tile.toString(), skin)).colspan(2) row() @@ -47,11 +43,11 @@ class TileInfoTable(private val worldScreen: WorldScreen, internal val civInfo: } - if (selectedTile.unit != null) { + if (tile.unit != null) { var moveUnitButton = TextButton("Move to", skin) - if (worldScreen.tileMapHolder.unitTile == selectedTile) moveUnitButton = TextButton("Stop movement", skin) + if (worldScreen.tileMapHolder.unitTile == tile) moveUnitButton = TextButton("Stop movement", skin) moveUnitButton.label.setFontScale(worldScreen.buttonScale) - if (selectedTile.unit!!.currentMovement == 0f) { + if (tile.unit!!.currentMovement == 0f) { moveUnitButton.color = Color.GRAY moveUnitButton.touchable = Touchable.disabled } @@ -61,7 +57,7 @@ class TileInfoTable(private val worldScreen: WorldScreen, internal val civInfo: worldScreen.update() return@addClickListener } - worldScreen.tileMapHolder.unitTile = selectedTile + worldScreen.tileMapHolder.unitTile = tile // Set all tiles transparent except those in unit range for (TG in worldScreen.tileGroups.linqValues()) TG.setColor(0f, 0f, 0f, 0.3f) @@ -79,137 +75,16 @@ class TileInfoTable(private val worldScreen: WorldScreen, internal val civInfo: } add(moveUnitButton).colspan(2) - .size(moveUnitButton.width * worldScreen.buttonScale, moveUnitButton.height * worldScreen.buttonScale) + .size(moveUnitButton.width * worldScreen.buttonScale, moveUnitButton.height * worldScreen.buttonScale).row() - if (selectedTile.unit!!.name == "Settler") { - addUnitAction("Found City", - !civInfo.gameInfo.tileMap.getTilesInDistance(selectedTile.position, 2).any { it.isCityCenter }, - { - val tutorial = Linq() - tutorial.add("You have founded a city!" + - "\r\nCities are the lifeblood of your empire," + - "\r\n providing gold and science empire-wide," + - "\r\n which are displayed on the top bar.") - tutorial.add("Science is used to research technologies." + - "\r\nYou can enter the technology screen by clicking" + - "\r\n on the button on the top-left, underneath the bar") - tutorial.add("You can click the city name to enter" + - "\r\n the city screen to assign population," + - "\r\n choose production, and see information on the city") + for (button in UnitActions().getUnitActions(tile.unit!!,tile,civInfo)) + add(button).colspan(2) + .size(button.width * worldScreen.buttonScale, button.height * worldScreen.buttonScale).row() - worldScreen.displayTutorials("CityFounded", tutorial) + pack() - civInfo.addCity(selectedTile.position) - if (worldScreen.tileMapHolder.unitTile == selectedTile) - worldScreen.tileMapHolder.unitTile = null // The settler was in the middle of moving and we then founded a city with it - selectedTile.unit = null // Remove settler! - worldScreen.update() - }) - } - - if (selectedTile.unit!!.name == "Worker") { - val improvementButtonText = if (selectedTile.improvementInProgress == null) - "Construct\r\nimprovement" - else - selectedTile.improvementInProgress!! + "\r\nin progress" - addUnitAction(improvementButtonText, !selectedTile.isCityCenter || GameBasics.TileImprovements.linqValues().any { arg0 -> selectedTile.canBuildImprovement(arg0, civInfo) }, - { worldScreen.game.screen = com.unciv.ui.pickerscreens.ImprovementPickerScreen(selectedTile) }) - addUnitAction(if ("automation" == selectedTile.unit!!.action) "Stop automation" else "Automate", true, { - if ("automation" == selectedTile.unit!!.action) - selectedTile.unit!!.action = null - else { - selectedTile.unit!!.action = "automation" - selectedTile.unit!!.doAutomatedAction(selectedTile) - } - worldScreen.update() - }) - } - - if (selectedTile.unit!!.name == "Great Scientist") { - addUnitAction("Discover Technology", true, - { - civInfo.tech.freeTechs += 1 - selectedTile.unit = null// destroy! - worldScreen.game.screen = TechPickerScreen(true, civInfo) - - }) - addUnitAction("Construct Academy", true, { - selectedTile.improvement = "Academy" - selectedTile.unit = null// destroy! - worldScreen.update() - } - ) - } - - if (selectedTile.unit!!.name == "Great Artist") { - addUnitAction("Start Golden Age", true, - { - civInfo.goldenAges.enterGoldenAge() - selectedTile.unit = null// destroy! - worldScreen.update() - } - ) - addUnitAction("Construct Landmark", true, - { - selectedTile.improvement = "Landmark" - selectedTile.unit = null// destroy! - worldScreen.update() - } - ) - } - - if (selectedTile.unit!!.name == "Great Engineer") { - addUnitAction("Hurry Wonder", selectedTile.isCityCenter && - selectedTile.city!!.cityConstructions.getCurrentConstruction() is Building && - - (selectedTile.city!!.cityConstructions.getCurrentConstruction() as Building).isWonder, - { - selectedTile.city!!.cityConstructions.addConstruction(300 + 30 * selectedTile.city!!.population.population) //http://civilization.wikia.com/wiki/Great_engineer_(Civ5) - selectedTile.unit = null // destroy! - worldScreen.update() - }) - addUnitAction("Construct Manufactory", true, - { - selectedTile.improvement = "Manufactory" - selectedTile.unit = null// destroy! - worldScreen.update() - }) - } - if (selectedTile.unit!!.name == "Great Merchant") { - addUnitAction("Conduct Trade Mission", true, - { - civInfo.gold += 350 // + 50 * era_number - todo! - selectedTile.unit = null // destroy! - worldScreen.update() - }) - addUnitAction("Construct Customs House", true, - { - selectedTile.improvement = "Customs House" - selectedTile.unit = null// destroy! - worldScreen.update() - - }) - } + setPosition(worldScreen.stage.width - 10f - width, 10f) } - - pack() - - setPosition(worldScreen.stage.width - 10f - width, 10f) - } - - - private fun addUnitAction(actionText: String, canAct: Boolean, action: ()->Unit) { - val actionButton = TextButton(actionText, CameraStageBaseScreen.skin) - actionButton.label.setFontScale(worldScreen.buttonScale) - actionButton.addClickListener(action) - if (worldScreen.tileMapHolder.selectedTile!!.unit!!.currentMovement == 0f || !canAct) { - actionButton.color = Color.GRAY - actionButton.touchable = Touchable.disabled - } - - row() - add(actionButton).colspan(2) - .size(actionButton.width * worldScreen.buttonScale, actionButton.height * worldScreen.buttonScale) - } } + diff --git a/core/src/com/unciv/ui/worldscreen/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/UnitActions.kt new file mode 100644 index 0000000000..3ef7a9b839 --- /dev/null +++ b/core/src/com/unciv/ui/worldscreen/UnitActions.kt @@ -0,0 +1,135 @@ +package com.unciv.ui.worldscreen + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Touchable +import com.badlogic.gdx.scenes.scene2d.ui.TextButton +import com.unciv.logic.civilization.CivilizationInfo +import com.unciv.logic.map.MapUnit +import com.unciv.logic.map.TileInfo +import com.unciv.models.gamebasics.Building +import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.linq.Linq +import com.unciv.ui.UnCivGame +import com.unciv.ui.cityscreen.addClickListener +import com.unciv.ui.pickerscreens.TechPickerScreen +import com.unciv.ui.utils.CameraStageBaseScreen +import java.util.ArrayList + +public class UnitActions { + + private fun constructImprovementAndDestroyUnit(tileInfo: TileInfo, improvementName: String): () -> Unit { + return { + tileInfo.improvement = improvementName + tileInfo.unit = null// destroy! + } + } + + fun getUnitActions(unit: MapUnit, tile: TileInfo, civInfo: CivilizationInfo): List { + + val worldScreen = UnCivGame.Current.worldScreen!! + + val actionList = ArrayList() + + if (unit.name == "Settler") { + actionList += getUnitActionButton(unit, "Found City", + !civInfo.gameInfo.tileMap.getTilesInDistance(tile.position, 2).any { it.isCityCenter }, + { + val tutorial = Linq() + tutorial.add("You have founded a city!" + + "\r\nCities are the lifeblood of your empire," + + "\r\n providing gold and science empire-wide," + + "\r\n which are displayed on the top bar.") + tutorial.add("Science is used to research technologies." + + "\r\nYou can enter the technology screen by clicking" + + "\r\n on the button on the top-left, underneath the bar") + tutorial.add("You can click the city name to enter" + + "\r\n the city screen to assign population," + + "\r\n choose production, and see information on the city") + + worldScreen.displayTutorials("CityFounded", tutorial) + + civInfo.addCity(tile.position) + if (worldScreen.tileMapHolder.unitTile == tile) + worldScreen.tileMapHolder.unitTile = null // The settler was in the middle of moving and we then founded a city with it + tile.unit = null // Remove settler! + worldScreen.update() + }) + } + + if (unit.name == "Worker") { + val improvementButtonText = + if (tile.improvementInProgress == null) "Construct\r\nimprovement" + else tile.improvementInProgress!! + "\r\nin progress" + actionList += getUnitActionButton(unit, improvementButtonText, !tile.isCityCenter || GameBasics.TileImprovements.linqValues().any { arg0 -> tile.canBuildImprovement(arg0, civInfo) }, + { worldScreen.game.screen = com.unciv.ui.pickerscreens.ImprovementPickerScreen(tile) }) + actionList += getUnitActionButton(unit, if ("automation" == tile.unit!!.action) "Stop automation" else "Automate", true, { + if ("automation" == tile.unit!!.action) + tile.unit!!.action = null + else { + tile.unit!!.action = "automation" + tile.unit!!.doAutomatedAction(tile) + } + worldScreen.update() + }) + } + + if (unit.name == "Great Scientist") { + actionList += getUnitActionButton(unit, "Discover Technology", true, + { + civInfo.tech.freeTechs += 1 + tile.unit = null// destroy! + worldScreen.game.screen = TechPickerScreen(true, civInfo) + + }) + actionList += getUnitActionButton(unit, "Construct Academy", true, + constructImprovementAndDestroyUnit(tile, "Academy")) + } + + if (unit.name == "Great Artist") { + actionList += getUnitActionButton(unit, "Start Golden Age", true, + { + civInfo.goldenAges.enterGoldenAge() + tile.unit = null// destroy! + worldScreen.update() + } + ) + actionList += getUnitActionButton(unit, "Construct Landmark", true, + constructImprovementAndDestroyUnit(tile, "Landmark")) + } + + if (unit.name == "Great Engineer") { + actionList += getUnitActionButton(unit, "Hurry Wonder", tile.isCityCenter && + tile.city!!.cityConstructions.getCurrentConstruction() is Building && + (tile.city!!.cityConstructions.getCurrentConstruction() as Building).isWonder, + { + tile.city!!.cityConstructions.addConstruction(300 + 30 * tile.city!!.population.population) //http://civilization.wikia.com/wiki/Great_engineer_(Civ5) + tile.unit = null // destroy! + }) + actionList += getUnitActionButton(unit, "Construct Manufactory", true, + constructImprovementAndDestroyUnit(tile, "Manufactory")) + } + + if (unit.name == "Great Merchant") { + actionList += getUnitActionButton(unit, "Conduct Trade Mission", true, + { + civInfo.gold += 350 // + 50 * era_number - todo! + tile.unit = null // destroy! + }) + actionList += getUnitActionButton(unit, "Construct Customs House", true, + constructImprovementAndDestroyUnit(tile, "Customs House")) + } + + return actionList + } + + + private fun getUnitActionButton(unit: MapUnit, actionText: String, canAct: Boolean, action: () -> Unit): TextButton { + val actionButton = TextButton(actionText, CameraStageBaseScreen.skin) + actionButton.addClickListener({ action(); UnCivGame.Current.worldScreen!!.update() }) + if (unit.currentMovement == 0f || !canAct) { + actionButton.color = Color.GRAY + actionButton.touchable = Touchable.disabled + } + return actionButton + } +} \ No newline at end of file