From 67820e8870c41719fdb3249f79c2000e2a73a7ca Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 17 Jun 2021 19:49:20 +0300 Subject: [PATCH] Unitfilter now accepts multiple filters (see wiki/uniques for details) --- android/assets/jsons/Civ V - Vanilla/Buildings.json | 4 ++-- android/assets/jsons/Civ V - Vanilla/Nations.json | 2 +- android/assets/jsons/Civ V - Vanilla/Policies.json | 2 +- core/src/com/unciv/logic/map/MapUnit.kt | 3 +++ core/src/com/unciv/models/ruleset/unit/BaseUnit.kt | 1 - 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index 1b54947ce6..256c0f5b46 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -203,8 +203,8 @@ "greatPersonPoints": {"gold": 1}, "isWonder": true, "providesFreeBuilding": "Lighthouse", - "uniques": ["Must be next to [Coast]", "+[1] Movement for all [military water] units", - "+[1] Sight for all [military water] units"], + "uniques": ["Must be next to [Coast]", "+[1] Movement for all [{Military} {Water}] units", + "+[1] Sight for all [{Military} {Water}] units"], "requiredTech": "Optics", "quote": "'They that go down to the sea in ships, that do business in great waters; these see the works of the Lord, and his wonders in the deep.' - The Bible, Psalms 107:23-24" }, diff --git a/android/assets/jsons/Civ V - Vanilla/Nations.json b/android/assets/jsons/Civ V - Vanilla/Nations.json index a8f170481d..1de6c12fbd 100644 --- a/android/assets/jsons/Civ V - Vanilla/Nations.json +++ b/android/assets/jsons/Civ V - Vanilla/Nations.json @@ -262,7 +262,7 @@ "outerColor": [ 28,51,119], "innerColor": [255,255,255], "uniqueName": "Manifest Destiny", - "uniques": ["+[1] Sight for all [military land] units", "-[50]% Gold cost of acquiring tiles [in all cities]"], + "uniques": ["+[1] Sight for all [{Military} {Land}] units", "-[50]% Gold cost of acquiring tiles [in all cities]"], "cities": ["Washington","New York","Boston","Philadelphia","Atlanta","Chicago","Seattle","San Francisco","Los Angeles","Houston", "Portland","St. Louis","Miami","Buffalo","Detroit","New Orleans","Baltimore","Denver","Cincinnati","Dallas","Memphis", "Cleveland","Kansas City","San Diego","Richmond","Las Vegas","Phoenix","Albuquerque","Minneapolis","Pittsburgh", diff --git a/android/assets/jsons/Civ V - Vanilla/Policies.json b/android/assets/jsons/Civ V - Vanilla/Policies.json index d2fadf0f69..b2717f3920 100644 --- a/android/assets/jsons/Civ V - Vanilla/Policies.json +++ b/android/assets/jsons/Civ V - Vanilla/Policies.json @@ -226,7 +226,7 @@ "policies": [ { "name": "Naval Tradition", - "uniques": ["+[1] Movement for all [military water] units", "+[1] Sight for all [military water] units", + "uniques": ["+[1] Movement for all [{Military} {Water}] units", "+[1] Sight for all [{Military} {Water}] units", "Free [Great Admiral] appears", "+[2] Movement for all [Great Admiral] units" ], "row": 1, diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index e6780e1b3a..0effc519dc 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -892,6 +892,9 @@ class MapUnit { } fun matchesFilter(filter: String): Boolean { + if (filter.contains('{')) // multiple types at once - AND logic. Looks like:"{Military} {Land}" + return filter.removePrefix("{").removeSuffix("}").split("} {") + .all { matchesFilter(it) } return when (filter) { "Wounded", "wounded units" -> health < 100 "Barbarians", "Barbarian" -> civInfo.isBarbarian() diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 296af4219e..35f729a31e 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -242,7 +242,6 @@ class BaseUnit : INamed, IConstruction { "non-air" -> !unitType.isAirUnit() "Military", "military units" -> unitType.isMilitary() "military water" -> unitType.isMilitary() && unitType.isWaterUnit() - "military land" -> unitType.isMilitary() && unitType.isLandUnit() else -> false } }