Add Militaristic type city-state.

This commit is contained in:
Duan Tao 2019-07-09 19:05:53 +08:00 committed by Yair Morgenstern
parent 3b515f58d7
commit a8e248b892
5 changed files with 44 additions and 2 deletions

View File

@ -939,6 +939,19 @@
secondaryColor:[194,97,255], secondaryColor:[194,97,255],
cities:["Antwerp"] 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", name:"Tyre",

View File

@ -3,5 +3,6 @@ package com.unciv.logic.civilization
enum class CityStateType{ enum class CityStateType{
Cultured, Cultured,
Maritime, Maritime,
Mercantile Mercantile,
Militaristic
} }

View File

@ -6,6 +6,7 @@ import com.badlogic.gdx.math.Vector2
import com.unciv.Constants import com.unciv.Constants
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.logic.automation.NextTurnAutomation
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.civilization.diplomacy.DiplomacyManager import com.unciv.logic.civilization.diplomacy.DiplomacyManager
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
@ -397,5 +398,18 @@ class CivilizationInfo {
updateStatsForNextTurn() 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 //endregion
} }

View File

@ -3,6 +3,7 @@ package com.unciv.logic.civilization.diplomacy
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.unciv.Constants import com.unciv.Constants
import com.unciv.logic.civilization.AlertType import com.unciv.logic.civilization.AlertType
import com.unciv.logic.civilization.CityStateType
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.PopupAlert import com.unciv.logic.civilization.PopupAlert
import com.unciv.logic.trade.Trade import com.unciv.logic.trade.Trade
@ -30,7 +31,8 @@ enum class DiplomacyFlags{
BorderConflict, BorderConflict,
SettledCitiesNearUs, SettledCitiesNearUs,
AgreedToNotSettleNearUs, AgreedToNotSettleNearUs,
IgnoreThemSettlingNearUs IgnoreThemSettlingNearUs,
ProvideMilitaryUnit
} }
enum class DiplomaticModifiers{ enum class DiplomaticModifiers{
@ -260,12 +262,23 @@ class DiplomacyManager() {
if(!hasFlag(DiplomacyFlags.DeclarationOfFriendship)) if(!hasFlag(DiplomacyFlags.DeclarationOfFriendship))
revertToZero(DiplomaticModifiers.DeclarationOfFriendship, 1/2f) //decreases slowly and will revert to full if it is declared later 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()) { for(flag in flagsCountdown.keys.toList()) {
flagsCountdown[flag] = flagsCountdown[flag]!! - 1 flagsCountdown[flag] = flagsCountdown[flag]!! - 1
if(flagsCountdown[flag]==0) { if(flagsCountdown[flag]==0) {
flagsCountdown.remove(flag) flagsCountdown.remove(flag)
if(flag==DiplomacyFlags.AgreedToNotSettleNearUs.name) if(flag==DiplomacyFlags.AgreedToNotSettleNearUs.name)
addModifier(DiplomaticModifiers.FulfilledPromiseToNotSettleCitiesNearUs,10f) addModifier(DiplomaticModifiers.FulfilledPromiseToNotSettleCitiesNearUs,10f)
else if(flag==DiplomacyFlags.ProvideMilitaryUnit.name)
civInfo.giftMilitaryUnitBy(otherCiv())
} }
} }

View File

@ -104,6 +104,7 @@ class DiplomacyScreen:CameraStageBaseScreen() {
CityStateType.Cultured -> "Provides [" + (3 * (currentPlayerCiv.getEra().ordinal+1)).toString() + "] culture at [30] Influence" 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.Maritime -> "Provides 3 food in capital and 1 food in other cities at [30] Influence"
CityStateType.Mercantile -> "Provides 3 happiness 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() val friendBonusLabel = friendBonusText.toLabel()