Split unit actions to a separate file (unitactions), because of all the separate cases
This commit is contained in:
parent
f2c790aec4
commit
064aee2f07
4 changed files with 152 additions and 143 deletions
|
@ -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/
|
||||
|
|
|
@ -138,4 +138,5 @@ class MapUnit {
|
|||
currentMovement = maxMovement.toFloat()
|
||||
doPreTurnAction(tileInfo)
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String>()
|
||||
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)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
135
core/src/com/unciv/ui/worldscreen/UnitActions.kt
Normal file
135
core/src/com/unciv/ui/worldscreen/UnitActions.kt
Normal file
|
@ -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<TextButton> {
|
||||
|
||||
val worldScreen = UnCivGame.Current.worldScreen!!
|
||||
|
||||
val actionList = ArrayList<TextButton>()
|
||||
|
||||
if (unit.name == "Settler") {
|
||||
actionList += getUnitActionButton(unit, "Found City",
|
||||
!civInfo.gameInfo.tileMap.getTilesInDistance(tile.position, 2).any { it.isCityCenter },
|
||||
{
|
||||
val tutorial = Linq<String>()
|
||||
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
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue