From 5a6a9c975919f3f35121d77774da1e5b6bc7b3b8 Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Sun, 29 Aug 2021 10:33:20 +0200 Subject: [PATCH] Anti-Armor, negative tile yield, LoadScreen (#5018) * Harden against negative yields, Anti-Armor * Anti-Armor bad unitType, LoadScreen --- .../Images/UnitPromotionIcons/Anti-Armor.png | Bin 0 -> 1381 bytes android/assets/ExtraImages/LoadScreen.png | Bin 0 -> 12182 bytes .../jsons/Civ V - Vanilla/UnitPromotions.json | 13 +++++++------ core/src/com/unciv/UncivGame.kt | 10 +++++----- core/src/com/unciv/logic/map/TileInfo.kt | 7 ++++--- core/src/com/unciv/ui/cityscreen/YieldGroup.kt | 3 ++- core/src/com/unciv/ui/utils/ImageGetter.kt | 9 +++++++-- 7 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 android/Images/UnitPromotionIcons/Anti-Armor.png create mode 100644 android/assets/ExtraImages/LoadScreen.png diff --git a/android/Images/UnitPromotionIcons/Anti-Armor.png b/android/Images/UnitPromotionIcons/Anti-Armor.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e79f657b0ea2d5277d7c7c3494787f70b01bbf GIT binary patch literal 1381 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 literal 0 HcmV?d00001 diff --git a/android/assets/jsons/Civ V - Vanilla/UnitPromotions.json b/android/assets/jsons/Civ V - Vanilla/UnitPromotions.json index 76623dc11e..87dda583b2 100644 --- a/android/assets/jsons/Civ V - Vanilla/UnitPromotions.json +++ b/android/assets/jsons/Civ V - Vanilla/UnitPromotions.json @@ -422,13 +422,14 @@ }, { "name": "Anti-Armor I", - "uniques": ["+[25]% vs [Armored]"], - "unitTypes:": ["Helicopter"] + "uniques": ["+[25]% Strength vs [Armored]"], + "unitTypes": ["Helicopter"] }, { "name": "Anti-Armor II", - "uniques": ["+[25]% vs [Armored]"], - "unitTypes:": ["Helicopter"] + "prerequisites": ["Anti-Armor I"], + "uniques": ["+[25]% Strength vs [Armored]"], + "unitTypes": ["Helicopter"] }, // Mixed @@ -473,13 +474,13 @@ { "name": "Ambush I", - "uniques": ["+[33]% Strength vs [Armored]"], + "uniques": ["+[25]% Strength vs [Armored]"], "unitTypes": ["Sword","Gunpowder","Fighter","Bomber"] }, { "name": "Ambush II", "prerequisites": ["Ambush I"], - "uniques": ["+[33]% Strength vs [Armored]"], + "uniques": ["+[25]% Strength vs [Armored]"], "unitTypes": ["Sword","Gunpowder","Fighter","Bomber"] }, diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index b17a18ff6b..38712db4e2 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -84,8 +84,10 @@ class UncivGame(parameters: UncivGameParameters) : Game() { * - Skin (hence CameraStageBaseScreen.setSkin()) * - Font (hence Fonts.resetFont() inside setSkin()) */ - ImageGetter.resetAtlases() settings = GameSaver.getGeneralSettings() // needed for the screen + screen = LoadingScreen() // NOT dependent on any atlas or skin + + ImageGetter.resetAtlases() ImageGetter.setNewRuleset(ImageGetter.ruleset) // This needs to come after the settings, since we may have default visual mods if(settings.tileSet !in ImageGetter.getAvailableTilesets()) { // If one of the tilesets is no longer available, default back settings.tileSet = "FantasyHex" @@ -94,8 +96,6 @@ class UncivGame(parameters: UncivGameParameters) : Game() { CameraStageBaseScreen.setSkin() // needs to come AFTER the Texture reset, since the buttons depend on it Gdx.graphics.isContinuousRendering = settings.continuousRendering - screen = LoadingScreen() - thread(name = "LoadJSON") { RulesetCache.loadRulesets(printOutput = true) @@ -206,9 +206,9 @@ class UncivGame(parameters: UncivGameParameters) : Game() { } } -class LoadingScreen:CameraStageBaseScreen() { +private class LoadingScreen : CameraStageBaseScreen() { init { - val happinessImage = ImageGetter.getImage("StatIcons/Happiness") + val happinessImage = ImageGetter.getExternalImage("LoadScreen.png") happinessImage.center(stage) happinessImage.setOrigin(Align.center) happinessImage.addAction(Actions.sequence( diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index 04dcf40c6a..358635d8fb 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -230,7 +230,7 @@ open class TileInfo { else stats.add(terrainFeatureBase) } - + if (city != null) { var tileUniques = city.getMatchingUniques("[] from [] tiles []") .filter { city.matchesFilter(it.params[2]) } @@ -244,7 +244,7 @@ open class TileInfo { stats.add(unique.stats) } } - + for (unique in city.getMatchingUniques("[] from [] tiles without [] []")) if ( matchesTerrainFilter(unique.params[1]) && @@ -280,7 +280,8 @@ open class TileInfo { if (stats.gold != 0f && observingCiv.goldenAges.isGoldenAge()) stats.gold++ - if (stats.production < 0) stats.production = 0f + for ((stat, value) in stats) + if (value < 0f) stats[stat] = 0f return stats } diff --git a/core/src/com/unciv/ui/cityscreen/YieldGroup.kt b/core/src/com/unciv/ui/cityscreen/YieldGroup.kt index ebf190b088..091f92a83f 100644 --- a/core/src/com/unciv/ui/cityscreen/YieldGroup.kt +++ b/core/src/com/unciv/ui/cityscreen/YieldGroup.kt @@ -19,7 +19,8 @@ class YieldGroup : HorizontalGroup() { currentStats = stats clearChildren() for ((stat, amount) in stats) { - addActor(getStatIconsTable(stat.name, amount.toInt())) + if (amount > 0f) // Defense against upstream bugs - negatives would show as "lots" + addActor(getStatIconsTable(stat.name, amount.toInt())) } pack() } diff --git a/core/src/com/unciv/ui/utils/ImageGetter.kt b/core/src/com/unciv/ui/utils/ImageGetter.kt index 40a5e16e5c..50fcffcd44 100644 --- a/core/src/com/unciv/ui/utils/ImageGetter.kt +++ b/core/src/com/unciv/ui/utils/ImageGetter.kt @@ -3,6 +3,7 @@ package com.unciv.ui.utils import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.Texture.TextureFilter import com.badlogic.gdx.graphics.g2d.NinePatch import com.badlogic.gdx.graphics.g2d.TextureAtlas import com.badlogic.gdx.graphics.g2d.TextureRegion @@ -16,7 +17,6 @@ import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable import com.badlogic.gdx.utils.Align import com.unciv.Constants import com.unciv.UncivGame -import com.unciv.logic.map.TileMap import com.unciv.models.ruleset.Era import com.unciv.models.ruleset.Nation import com.unciv.models.ruleset.Ruleset @@ -153,7 +153,12 @@ object ImageGetter { fun getDot(dotColor: Color) = getWhiteDot().apply { color = dotColor } fun getExternalImage(fileName: String): Image { - return Image(TextureRegion(Texture("ExtraImages/$fileName"))) + // Since these are not packed in an atlas, they have no scaling filter metadata and + // default to Nearest filter, anisotropic level 1. Use Linear instead, helps + // loading screen and Tutorial.WorldScreen quite a bit. More anisotropy barely helps. + val texture = Texture("ExtraImages/$fileName") + texture.setFilter(TextureFilter.Linear, TextureFilter.Linear) + return Image(TextureRegion(texture)) } fun getImage(fileName: String): Image {