Merge remote-tracking branch 'upstream/master'

update
This commit is contained in:
YueR 2019-09-06 21:21:21 +08:00
commit 3f98cb28c4
15 changed files with 91 additions and 33 deletions

View File

@ -458,7 +458,21 @@
Portuguese:"Salvo em" Portuguese:"Salvo em"
} }
// Options ////////////// Load map
"Load map":{
}
"Are you sure you want to delete this map?":{
}
"Upload":{
}
"Could not upload map!":{
}
////////////// Options
"Options":{ "Options":{
Italian:"Opzioni" Italian:"Opzioni"

View File

@ -561,6 +561,7 @@
} }
"Hwach'a":{ "Hwach'a":{
Italian:"Hwach'a"
Simplified_Chinese:"火厢车" Simplified_Chinese:"火厢车"
} }
@ -668,6 +669,10 @@
Russian:"+1 Диапазон видимости" Russian:"+1 Диапазон видимости"
} }
"Turtle Ship":{
Spanish:"Nave tartaruga"
}
"Cannon":{ "Cannon":{
Italian:"Cannone" Italian:"Cannone"
Russian:"Пушка" Russian:"Пушка"

View File

@ -21,8 +21,8 @@ android {
applicationId "com.unciv.app" applicationId "com.unciv.app"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 29 targetSdkVersion 29
versionCode 294 versionCode 295
versionName "3.0.1" versionName "3.0.2"
} }
// Had to add this crap for Travis to build, it wanted to sign the app // Had to add this crap for Travis to build, it wanted to sign the app

View File

@ -75,7 +75,7 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
} }
for(unique in uniques) for(unique in uniques)
sb.appendln(unique.tr()) sb.appendln(Translations.translateBonusOrPenalty(unique))
for(promotion in promotions) for(promotion in promotions)
sb.appendln(promotion.tr()) sb.appendln(promotion.tr())

View File

@ -17,6 +17,7 @@ class GameSettings {
var tileSet:String = "FantasyHex" var tileSet:String = "FantasyHex"
var showTutorials: Boolean = true var showTutorials: Boolean = true
var autoAssignCityProduction: Boolean = true var autoAssignCityProduction: Boolean = true
var showMinimap: Boolean = true
var userName:String="" var userName:String=""
var userId = "" var userId = ""

View File

@ -414,7 +414,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
civGroup.add(ImageGetter.getImage("OtherIcons/DisbandUnit")).size(30f) civGroup.add(ImageGetter.getImage("OtherIcons/DisbandUnit")).size(30f)
civGroup.background = civGroupBackground.tint(Color.LIGHT_GRAY) civGroup.background = civGroupBackground.tint(Color.LIGHT_GRAY)
label.setFontColor(Color.BLACK) label.setFontColor(Color.BLACK)
} else if (currentPlayer==civ || currentPlayer.knows(civ)) { } else if (currentPlayer==civ || UnCivGame.Current.viewEntireMapForDebug || currentPlayer.knows(civ)) {
civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f)) civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f))
civGroup.background = civGroupBackground.tint(civ.nation.getColor()) civGroup.background = civGroupBackground.tint(civ.nation.getColor())
label.setFontColor(civ.nation.getSecondaryColor()) label.setFontColor(civ.nation.getSecondaryColor())

View File

@ -1,11 +1,12 @@
package com.unciv.ui.mapeditor package com.unciv.ui.mapeditor
import com.badlogic.gdx.scenes.scene2d.actions.Actions
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.models.metadata.GameParameters
import com.unciv.logic.MapSaver import com.unciv.logic.MapSaver
import com.unciv.logic.map.TileMap import com.unciv.logic.map.TileMap
import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.tr
import com.unciv.models.metadata.GameParameters
import com.unciv.ui.tilegroups.TileGroup import com.unciv.ui.tilegroups.TileGroup
import com.unciv.ui.tilegroups.TileSetStrings import com.unciv.ui.tilegroups.TileSetStrings
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
@ -18,7 +19,7 @@ class MapEditorScreen(): CameraStageBaseScreen(){
var mapName = "My first map" var mapName = "My first map"
lateinit var mapHolder: TileGroupMap<TileGroup> lateinit var mapHolder: TileGroupMap<TileGroup>
val tileEditorOptions = TileEditorOptionsTable(this) val tileEditorOptions = TileEditorOptionsTable(this)
val showHideEditorOptionsButton = TextButton(">",skin)
constructor(mapNameToLoad:String?):this(){ constructor(mapNameToLoad:String?):this(){
var mapToLoad = mapNameToLoad var mapToLoad = mapNameToLoad
@ -44,8 +45,23 @@ class MapEditorScreen(): CameraStageBaseScreen(){
val mapHolder = getMapHolder(tileMap) val mapHolder = getMapHolder(tileMap)
stage.addActor(mapHolder) stage.addActor(mapHolder)
stage.addActor(tileEditorOptions) stage.addActor(tileEditorOptions)
tileEditorOptions.setPosition(stage.width - tileEditorOptions.width, 0f)
showHideEditorOptionsButton.labelCell.pad(10f)
showHideEditorOptionsButton.pack()
showHideEditorOptionsButton.onClick {
if (showHideEditorOptionsButton.text.toString() == ">") {
tileEditorOptions.addAction(Actions.moveTo(stage.width, 0f, 0.5f))
showHideEditorOptionsButton.setText("<")
} else {
tileEditorOptions.addAction(Actions.moveTo(stage.width - tileEditorOptions.width, 0f, 0.5f))
showHideEditorOptionsButton.setText(">")
}
}
showHideEditorOptionsButton.setPosition(stage.width - showHideEditorOptionsButton.width - 10f,
stage.height - showHideEditorOptionsButton.height - 10f)
stage.addActor(showHideEditorOptionsButton)
val optionsMenuButton = TextButton("Options".tr(), skin) val optionsMenuButton = TextButton("Options".tr(), skin)

View File

@ -56,8 +56,6 @@ class TileEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(Camera
add(ScrollPane(tabPickerTable).apply { this.width= mapEditorScreen.stage.width/3}).row() add(ScrollPane(tabPickerTable).apply { this.width= mapEditorScreen.stage.width/3}).row()
add(editorPickTable).row() add(editorPickTable).row()
setPosition(mapEditorScreen.stage.width - width, 0f)
} }
private fun setImprovements() { private fun setImprovements() {

View File

@ -10,14 +10,15 @@ import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.Policy import com.unciv.models.gamebasics.Policy
import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen
class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen() { class PolicyPickerScreen(val worldScreen: WorldScreen) : PickerScreen() {
internal val viewingCiv: CivilizationInfo = worldScreen.viewingCiv
private var pickedPolicy: Policy? = null private var pickedPolicy: Policy? = null
init { init {
val policies = civInfo.policies val policies = viewingCiv.policies
displayTutorials("PolicyPickerScreen") displayTutorials("PolicyPickerScreen")
rightSideButton.setText("{Adopt policy}\r\n(".tr() + policies.storedCulture + "/" + policies.getCultureNeededForNextPolicy() + ")") rightSideButton.setText("{Adopt policy}\r\n(".tr() + policies.storedCulture + "/" + policies.getCultureNeededForNextPolicy() + ")")
@ -30,14 +31,14 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen(
else onBackButtonClicked { UnCivGame.Current.setWorldScreen() } else onBackButtonClicked { UnCivGame.Current.setWorldScreen() }
rightSideButton.onClick("policy") { rightSideButton.onClick("policy") {
civInfo.policies.adopt(pickedPolicy!!) viewingCiv.policies.adopt(pickedPolicy!!)
// If we've moved to another screen in the meantime (great person pick, victory screen) ignore this // If we've moved to another screen in the meantime (great person pick, victory screen) ignore this
if(game.screen !is PolicyPickerScreen || !policies.canAdoptPolicy()){ if(game.screen !is PolicyPickerScreen || !policies.canAdoptPolicy()){
game.setWorldScreen() game.setWorldScreen()
dispose() dispose()
} }
else game.screen = PolicyPickerScreen(civInfo) // update policies else game.screen = PolicyPickerScreen(worldScreen) // update policies
} }
if(!UnCivGame.Current.worldScreen.isPlayersTurn) if(!UnCivGame.Current.worldScreen.isPlayersTurn)
rightSideButton.disable() rightSideButton.disable()
@ -78,10 +79,11 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen(
} }
private fun pickPolicy(policy: Policy) { private fun pickPolicy(policy: Policy) {
if (civInfo.policies.isAdopted(policy.name) if (!worldScreen.isPlayersTurn
|| viewingCiv.policies.isAdopted(policy.name)
|| policy.name.endsWith("Complete") || policy.name.endsWith("Complete")
|| !civInfo.policies.isAdoptable(policy) || !viewingCiv.policies.isAdoptable(policy)
|| !civInfo.policies.canAdoptPolicy()) { || !viewingCiv.policies.canAdoptPolicy()) {
rightSideButton.disable() rightSideButton.disable()
} else { } else {
rightSideButton.enable() rightSideButton.enable()
@ -106,9 +108,9 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen(
policyButton = TextButton(policy.name.tr(), skin) policyButton = TextButton(policy.name.tr(), skin)
} }
if (civInfo.policies.isAdopted(policy.name)) { // existing if (viewingCiv.policies.isAdopted(policy.name)) { // existing
policyButton.color = Color.GREEN policyButton.color = Color.GREEN
} else if (!civInfo.policies.isAdoptable(policy)) } else if (!viewingCiv.policies.isAdoptable(policy))
// non-available // non-available
{ {
policyButton.color = Color.GRAY policyButton.color = Color.GRAY

View File

@ -14,13 +14,14 @@ import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.disable import com.unciv.ui.utils.disable
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.worldscreen.optionstable.YesNoPopupTable
class LoadMapScreen(previousMap: TileMap) : PickerScreen(){ class LoadMapScreen(previousMap: TileMap) : PickerScreen(){
var chosenMap = "" var chosenMap = ""
val deleteMapButton = TextButton("Delete map",skin) val deleteMapButton = TextButton("Delete map",skin)
init { init {
rightSideButton.setText("Load map") rightSideButton.setText("Load map".tr())
rightSideButton.onClick { rightSideButton.onClick {
UnCivGame.Current.screen = MapEditorScreen(chosenMap) UnCivGame.Current.screen = MapEditorScreen(chosenMap)
dispose() dispose()
@ -50,8 +51,10 @@ class LoadMapScreen(previousMap: TileMap) : PickerScreen(){
rightSideTable.add(loadFromClipboardButton).row() rightSideTable.add(loadFromClipboardButton).row()
deleteMapButton.onClick { deleteMapButton.onClick {
YesNoPopupTable("Are you sure you want to delete this map?", {
MapSaver().deleteMap(chosenMap) MapSaver().deleteMap(chosenMap)
UnCivGame.Current.screen = LoadMapScreen(previousMap) UnCivGame.Current.screen = LoadMapScreen(previousMap)
}, this)
} }
deleteMapButton.disable() deleteMapButton.disable()
deleteMapButton.color = Color.RED deleteMapButton.color = Color.RED

View File

@ -137,5 +137,8 @@ class MinimapHolder(tileMapHolder: TileMapHolder): Table(){
return toggleIconTable return toggleIconTable
} }
fun update(civInfo:CivilizationInfo){minimap.update(civInfo)} fun update(civInfo:CivilizationInfo){
isVisible = UnCivGame.Current.settings.showMinimap
minimap.update(civInfo)
}
} }

View File

@ -75,7 +75,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
if(viewingCiv.policies.adoptedPolicies.isNotEmpty() || viewingCiv.policies.canAdoptPolicy()) { if(viewingCiv.policies.adoptedPolicies.isNotEmpty() || viewingCiv.policies.canAdoptPolicy()) {
val policyScreenButton = Button(skin) val policyScreenButton = Button(skin)
policyScreenButton.add(ImageGetter.getImage("PolicyIcons/Constitution")).size(30f).pad(15f) policyScreenButton.add(ImageGetter.getImage("PolicyIcons/Constitution")).size(30f).pad(15f)
policyScreenButton.onClick { game.screen = PolicyPickerScreen(viewingCiv) } policyScreenButton.onClick { game.screen = PolicyPickerScreen(this) }
techPolicyandVictoryHolder.add(policyScreenButton).pad(10f) techPolicyandVictoryHolder.add(policyScreenButton).pad(10f)
} }
@ -186,7 +186,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
if(!isSomethingOpen) { if(!isSomethingOpen) {
when { when {
!gameInfo.oneMoreTurnMode && gameInfo.civilizations.any { it.victoryManager.hasWon() } -> game.screen = VictoryScreen() !gameInfo.oneMoreTurnMode && gameInfo.civilizations.any { it.victoryManager.hasWon() } -> game.screen = VictoryScreen()
viewingCiv.policies.freePolicies > 0 -> game.screen = PolicyPickerScreen(viewingCiv) viewingCiv.policies.freePolicies > 0 -> game.screen = PolicyPickerScreen(this)
viewingCiv.greatPeople.freeGreatPeople > 0 -> game.screen = GreatPersonPickerScreen() viewingCiv.greatPeople.freeGreatPeople > 0 -> game.screen = GreatPersonPickerScreen()
viewingCiv.tradeRequests.isNotEmpty() -> TradePopup(this) viewingCiv.tradeRequests.isNotEmpty() -> TradePopup(this)
viewingCiv.popupAlerts.any() -> AlertPopup(this, viewingCiv.popupAlerts.first()) viewingCiv.popupAlerts.any() -> AlertPopup(this, viewingCiv.popupAlerts.first())
@ -298,7 +298,7 @@ class WorldScreen(val viewingCiv:CivilizationInfo) : CameraStageBaseScreen() {
game.screen = TechPickerScreen(viewingCiv.tech.freeTechs != 0, viewingCiv) game.screen = TechPickerScreen(viewingCiv.tech.freeTechs != 0, viewingCiv)
return@onClick return@onClick
} else if (viewingCiv.policies.shouldOpenPolicyPicker) { } else if (viewingCiv.policies.shouldOpenPolicyPicker) {
game.screen = PolicyPickerScreen(viewingCiv) game.screen = PolicyPickerScreen(this)
viewingCiv.policies.shouldOpenPolicyPicker = false viewingCiv.policies.shouldOpenPolicyPicker = false
return@onClick return@onClick
} }

View File

@ -105,7 +105,7 @@ class WorldScreenMenuTable(val worldScreen: WorldScreen) : PopupTable(worldScree
return@addButton return@addButton
} }
try { try {
val game = OnlineMultiplayer().tryDownloadGame(gameId) val game = OnlineMultiplayer().tryDownloadGame(gameId.trim())
UnCivGame.Current.loadGame(game) UnCivGame.Current.loadGame(game)
} catch (ex: Exception) { } catch (ex: Exception) {
badGameIdLabel.setText("Could not download game!".tr()) badGameIdLabel.setText("Could not download game!".tr())

View File

@ -80,6 +80,12 @@ class WorldScreenOptionsTable(val worldScreen:WorldScreen) : PopupTable(worldScr
update() update()
} }
innerTable.add("Show minimap".toLabel())
innerTable.addButton(if(settings.showMinimap) "Yes".tr() else "No".tr()) {
settings.showMinimap= !settings.showMinimap
update()
}
addLanguageSelectBox(innerTable) addLanguageSelectBox(innerTable)
addFontSelectBox(innerTable) addFontSelectBox(innerTable)

View File

@ -2,7 +2,7 @@
So you want to add your favorite civilization? So you want to add your favorite civilization?
There are a few steps requires, so we'll walk you through them! There are a few steps required, so we'll walk you through them!
## Fill in your Nation info ## Fill in your Nation info
@ -19,7 +19,7 @@ will notify translators that they should translate them =)
Each civ has an icon, like the wreath for Rome, for instant identification. Each civ has an icon, like the wreath for Rome, for instant identification.
All of these icons are white on a transparent background, and are 100x100 pixels. All of these icons are white on a transparent background, and are 100x100 pixels - see [icon considerations](#icon-considerations) for details
You'll need to put your icon in the [NationIcons folder](/android/Images/NationIcons). You'll need to put your icon in the [NationIcons folder](/android/Images/NationIcons).
@ -35,7 +35,7 @@ But apart from the flavor, they are boring gameplay-wise, so now we need to add
Units in general are added in the [Units.json](/android/assets/jsons/Units.json) file, with an icon in the Units in general are added in the [Units.json](/android/assets/jsons/Units.json) file, with an icon in the
[UnitIcons](/android/Images/UnitIcons) folder. [UnitIcons](/android/Images/UnitIcons) folder.
The icon must be 200x200 pixels, white on transparent background. The icon must be 200x200 pixels, white on transparent background - see [icon considerations](#icon-considerations) for details
Remember that these are unique units, so search for an existing unique unit to see how they replace their regular counterparts! Remember that these are unique units, so search for an existing unique unit to see how they replace their regular counterparts!
@ -45,7 +45,7 @@ Again, [translation file](/android/assets/jsons/Translations/Units%2CPromotions.
Same as the units - info is in the [Buildings.json](/android/assets/jsons/Buildings.json) file Same as the units - info is in the [Buildings.json](/android/assets/jsons/Buildings.json) file
and icons in the [BuildingIcons](/android/Images/BuildingIcons) folder, and icons in the [BuildingIcons](/android/Images/BuildingIcons) folder,
same rules for the icons apply. same rules for the icons apply (200x200 pixels, icon considerations)
Again, [translation file](/android/assets/jsons/Translations/Buildings.json) for bonus points! Again, [translation file](/android/assets/jsons/Translations/Buildings.json) for bonus points!
@ -53,3 +53,13 @@ Again, [translation file](/android/assets/jsons/Translations/Buildings.json) for
All Civ uniques require touching actual code - you can try it if ou feel you're up to it, but if not, All Civ uniques require touching actual code - you can try it if ou feel you're up to it, but if not,
send me an email to yairm210@hotmail.com (if you've finished all of the above) and I'll be happy to lend you a hand! send me an email to yairm210@hotmail.com (if you've finished all of the above) and I'll be happy to lend you a hand!
## Icon considerations
ALL icons must be legally acceptable, meaning they either come from from open sources or you act according to their licence (for Creative Commons, for instance, you have to specify the source and the creator).
Icons directly from the base game belong to Firaxis, so I'm not sure we're legally allowed to use them - please use other sources!
One source I use constantly is [The Noun Project](https://thenounproject.com) - everything there is Creative Commons or open, so they can all be used!
Credits for icons should go in the [Credits](Credits.md) page