From 4330508d2e61e4d0ee6f18a5f5d4bb601885979a Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 22 May 2019 22:15:48 +0200 Subject: [PATCH] using StringAction for string-encoded actions used throughout the app --- core/src/com/unciv/logic/map/MapUnit.kt | 5 +++-- .../unciv/logic/map/action/MapUnitAction.kt | 5 ++--- .../com/unciv/logic/map/action/StringAction.kt | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 core/src/com/unciv/logic/map/action/StringAction.kt diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 3c673f8e52..b569cbf18a 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -7,6 +7,7 @@ import com.unciv.logic.automation.UnitAutomation import com.unciv.logic.automation.WorkerAutomation import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.action.MapUnitAction +import com.unciv.logic.map.action.StringAction import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.TechEra import com.unciv.models.gamebasics.tile.TerrainType @@ -38,8 +39,8 @@ class MapUnit { var mapUnitAction : MapUnitAction? = null var action: String? // work, automation, fortifying, I dunno what. // getter and setter for compatibility: make sure string-based actions still work - get() = mapUnitAction?.name - set(value) { mapUnitAction = value?.let{ MapUnitAction(this, value) } } + get() = (mapUnitAction as? StringAction)?.action ?: mapUnitAction?.let { "" } // null if no action is assigned. + set(value) { mapUnitAction = value?.let{ StringAction(this, value) } } // wrap traditional string-encoded actions into StringAction var attacksThisTurn = 0 var promotions = UnitPromotions() diff --git a/core/src/com/unciv/logic/map/action/MapUnitAction.kt b/core/src/com/unciv/logic/map/action/MapUnitAction.kt index 0b29d42166..c53ea1b464 100644 --- a/core/src/com/unciv/logic/map/action/MapUnitAction.kt +++ b/core/src/com/unciv/logic/map/action/MapUnitAction.kt @@ -3,13 +3,12 @@ package com.unciv.logic.map.action import com.unciv.logic.map.MapUnit open class MapUnitAction( - @Transient var unit: MapUnit = MapUnit(), - var name: String = "" + @Transient var unit: MapUnit = MapUnit() ) { /** return true if this action is possible in the given conditions */ open fun isAvailable(): Boolean = true open fun doPreTurnAction() {} - open fun shouldStopOnEnemyInSight(): Boolean = name.startsWith("moveTo") + open fun shouldStopOnEnemyInSight(): Boolean = false } diff --git a/core/src/com/unciv/logic/map/action/StringAction.kt b/core/src/com/unciv/logic/map/action/StringAction.kt new file mode 100644 index 0000000000..17f60dd1ef --- /dev/null +++ b/core/src/com/unciv/logic/map/action/StringAction.kt @@ -0,0 +1,18 @@ +package com.unciv.logic.map.action + +import com.unciv.logic.map.MapUnit + +/** + * this class represents all actions that are identified by string only. + * this is the traditional way of handling actions in UnCiv: by coding relevant information + * into a string. This class is here to maintain compatibility to that method, preventing from a huge + * refactoring going on here. + */ +class StringAction( + unit: MapUnit = MapUnit(), + val action: String = "" // traditional string-encoded action like "moveTo x,y" +): MapUnitAction(unit) { + + override fun shouldStopOnEnemyInSight(): Boolean = action.startsWith("moveTo") + +} \ No newline at end of file