From a8e248b89257adfb0ed819533b19a104822ba522 Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Tue, 9 Jul 2019 19:05:53 +0800 Subject: [PATCH] Add Militaristic type city-state. --- android/assets/jsons/Nations.json | 13 +++++++++++++ .../com/unciv/logic/civilization/CityStateType.kt | 3 ++- .../unciv/logic/civilization/CivilizationInfo.kt | 14 ++++++++++++++ .../civilization/diplomacy/DiplomacyManager.kt | 15 ++++++++++++++- core/src/com/unciv/ui/trade/DiplomacyScreen.kt | 1 + 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/android/assets/jsons/Nations.json b/android/assets/jsons/Nations.json index 1be4baff7c..877ffb679b 100644 --- a/android/assets/jsons/Nations.json +++ b/android/assets/jsons/Nations.json @@ -939,6 +939,19 @@ secondaryColor:[194,97,255], cities:["Antwerp"] }, + { + name:"Dublin", + adjective:["Dublin"], + cityStateType:"Militaristic", + + declaringWar:"You leave us no choice. War it must be.", + attacked:"Very well, this shall not be forgotten.", + afterPeace:"May peace forever bless our lands.", + + mainColor:[0, 0, 0], + secondaryColor:[211,180,113], + cities:["Dublin"] + }, /* { name:"Tyre", diff --git a/core/src/com/unciv/logic/civilization/CityStateType.kt b/core/src/com/unciv/logic/civilization/CityStateType.kt index 8c1440e91c..9f9dce2860 100644 --- a/core/src/com/unciv/logic/civilization/CityStateType.kt +++ b/core/src/com/unciv/logic/civilization/CityStateType.kt @@ -3,5 +3,6 @@ package com.unciv.logic.civilization enum class CityStateType{ Cultured, Maritime, - Mercantile + Mercantile, + Militaristic } \ No newline at end of file diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index e54ca4a6fa..855478e51f 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.math.Vector2 import com.unciv.Constants import com.unciv.UnCivGame import com.unciv.logic.GameInfo +import com.unciv.logic.automation.NextTurnAutomation import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.diplomacy.DiplomacyManager import com.unciv.logic.civilization.diplomacy.DiplomaticStatus @@ -397,5 +398,18 @@ class CivilizationInfo { updateStatsForNextTurn() } + fun giftMilitaryUnitBy(otherCiv: CivilizationInfo) { + val city = NextTurnAutomation().getClosestCities(this, otherCiv).city1 + if (city == null) { + addNotification("Exception! Failed to find a suitable city to place gift unit.".tr(), null, Color.RED) + } else { + var militaryUnit = city.cityConstructions + .getConstructableUnits().filter { !it.unitType.isCivilian() && it.unitType.isLandUnit()} + .random() + placeUnitNearTile(city.location, militaryUnit.name) + addNotification("[${otherCiv.civName}] gave us a [${militaryUnit.name}] as gift near [${city.name}]!".tr(), null, Color.RED) + } + } + //endregion } diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index 7cb6de89c4..67f7ae2487 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -3,6 +3,7 @@ package com.unciv.logic.civilization.diplomacy import com.badlogic.gdx.graphics.Color import com.unciv.Constants import com.unciv.logic.civilization.AlertType +import com.unciv.logic.civilization.CityStateType import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.PopupAlert import com.unciv.logic.trade.Trade @@ -30,7 +31,8 @@ enum class DiplomacyFlags{ BorderConflict, SettledCitiesNearUs, AgreedToNotSettleNearUs, - IgnoreThemSettlingNearUs + IgnoreThemSettlingNearUs, + ProvideMilitaryUnit } enum class DiplomaticModifiers{ @@ -260,12 +262,23 @@ class DiplomacyManager() { if(!hasFlag(DiplomacyFlags.DeclarationOfFriendship)) revertToZero(DiplomaticModifiers.DeclarationOfFriendship, 1/2f) //decreases slowly and will revert to full if it is declared later + if(otherCiv().isCityState() && otherCiv().getCityStateType() == CityStateType.Militaristic) { + if (relationshipLevel() < RelationshipLevel.Friend) { + if (hasFlag(DiplomacyFlags.ProvideMilitaryUnit)) removeFlag(DiplomacyFlags.ProvideMilitaryUnit) + } + else { + if (!hasFlag(DiplomacyFlags.ProvideMilitaryUnit)) setFlag(DiplomacyFlags.ProvideMilitaryUnit, 20) + } + } + for(flag in flagsCountdown.keys.toList()) { flagsCountdown[flag] = flagsCountdown[flag]!! - 1 if(flagsCountdown[flag]==0) { flagsCountdown.remove(flag) if(flag==DiplomacyFlags.AgreedToNotSettleNearUs.name) addModifier(DiplomaticModifiers.FulfilledPromiseToNotSettleCitiesNearUs,10f) + else if(flag==DiplomacyFlags.ProvideMilitaryUnit.name) + civInfo.giftMilitaryUnitBy(otherCiv()) } } diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index 978416b664..abeb4e0f21 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -104,6 +104,7 @@ class DiplomacyScreen:CameraStageBaseScreen() { CityStateType.Cultured -> "Provides [" + (3 * (currentPlayerCiv.getEra().ordinal+1)).toString() + "] culture at [30] Influence" CityStateType.Maritime -> "Provides 3 food in capital and 1 food in other cities at [30] Influence" CityStateType.Mercantile -> "Provides 3 happiness at [30] Influence" + CityStateType.Militaristic -> "Provides land units every 20 turns at [30] Influence" } val friendBonusLabel = friendBonusText.toLabel()