Added unit action icons on map units, so it'll be immediately visible what each unit is doing

This commit is contained in:
Yair Morgenstern 2021-05-28 14:06:30 +03:00
parent cf2be25c73
commit c7334a461f
2 changed files with 42 additions and 10 deletions

View File

@ -92,8 +92,10 @@ class TileGroupIcons(val tileGroup: TileGroup) {
// Instead of fading out the entire unit with its background, we just fade out its central icon, // Instead of fading out the entire unit with its background, we just fade out its central icon,
// that way it remains much more visible on the map // that way it remains much more visible on the map
if (!unit.isIdle() && unit.civInfo == viewingCiv) if (!unit.isIdle() && unit.civInfo == viewingCiv) {
newImage.unitBaseImage.color.a = 0.5f newImage.unitBaseImage.color.a = 0.5f
newImage.actionGroup?.color?.a = 0.5f
}
} }
return newImage return newImage
} }

View File

@ -5,17 +5,18 @@ import com.badlogic.gdx.scenes.scene2d.Group
import com.badlogic.gdx.scenes.scene2d.actions.Actions import com.badlogic.gdx.scenes.scene2d.actions.Actions
import com.badlogic.gdx.scenes.scene2d.actions.RepeatAction import com.badlogic.gdx.scenes.scene2d.actions.RepeatAction
import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.Image
import com.unciv.Constants
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
class UnitGroup(val unit: MapUnit, val size: Float): Group() { class UnitGroup(val unit: MapUnit, val size: Float): Group() {
var blackSpinningCircle:Image?=null var blackSpinningCircle: Image? = null
var actionGroup :Group? = null
val unitBaseImage = ImageGetter.getUnitIcon(unit.name, unit.civInfo.nation.getInnerColor()) val unitBaseImage = ImageGetter.getUnitIcon(unit.name, unit.civInfo.nation.getInnerColor())
.apply { setSize(size * 0.75f, size * 0.75f) } .apply { setSize(size * 0.75f, size * 0.75f) }
init { init {
val background = getBackgroundImageForUnit()
val background = getBackgroundImageForUnit(unit)
background.apply { background.apply {
this.color = unit.civInfo.nation.getOuterColor() this.color = unit.civInfo.nation.getOuterColor()
setSize(size, size) setSize(size, size)
@ -25,15 +26,24 @@ class UnitGroup(val unit: MapUnit, val size: Float): Group() {
unitBaseImage.center(this) unitBaseImage.center(this)
addActor(unitBaseImage) addActor(unitBaseImage)
val actionImage = getActionImage()
if (actionImage != null) {
actionImage.color = Color.BLACK
val actionCircle = actionImage.surroundWithCircle(size / 2 * 0.9f)
.surroundWithCircle(size / 2, false, Color.BLACK)
actionCircle.setPosition(size / 2, 0f)
addActor(actionCircle)
actionGroup = actionCircle
}
if (unit.health < 100) { // add health bar if (unit.health < 100) { // add health bar
addActor(ImageGetter.getHealthBar(unit.health.toFloat(), 100f, size)) addActor(ImageGetter.getHealthBar(unit.health.toFloat(), 100f, size))
} }
isTransform=false // performance helper - nothing here is rotated or scaled isTransform = false // performance helper - nothing here is rotated or scaled
} }
fun getBackgroundImageForUnit(unit: MapUnit): Image { fun getBackgroundImageForUnit(): Image {
return when { return when {
unit.isEmbarked() -> ImageGetter.getImage("OtherIcons/Banner") unit.isEmbarked() -> ImageGetter.getImage("OtherIcons/Banner")
unit.isFortified() -> ImageGetter.getImage("OtherIcons/Shield") unit.isFortified() -> ImageGetter.getImage("OtherIcons/Shield")
@ -41,9 +51,21 @@ class UnitGroup(val unit: MapUnit, val size: Float): Group() {
} }
} }
fun getActionImage(): Image? {
return when {
unit.isFortified() -> ImageGetter.getImage("OtherIcons/Shield")
unit.isSleeping() -> ImageGetter.getImage("OtherIcons/Sleep")
unit.isMoving() -> ImageGetter.getStatIcon("Movement")
unit.action == Constants.unitActionExplore -> ImageGetter.getUnitIcon("Scout")
unit.action == Constants.unitActionAutomation -> ImageGetter.getUnitIcon("Great Engineer")
unit.action == Constants.unitActionSetUp -> ImageGetter.getUnitIcon("Catapult")
else -> null
}
}
fun selectUnit() { fun selectUnit() {
val whiteHalo = getBackgroundImageForUnit(unit) val whiteHalo = getBackgroundImageForUnit()
val whiteHaloSize = 30f val whiteHaloSize = 30f
whiteHalo.setSize(whiteHaloSize, whiteHaloSize) whiteHalo.setSize(whiteHaloSize, whiteHaloSize)
whiteHalo.center(this) whiteHalo.center(this)
@ -57,9 +79,17 @@ class UnitGroup(val unit: MapUnit, val size: Float): Group() {
spinningCircle.color = Color.BLACK spinningCircle.color = Color.BLACK
spinningCircle.center(this) spinningCircle.center(this)
spinningCircle.x += whiteHaloSize / 2 // to edge of white halo spinningCircle.x += whiteHaloSize / 2 // to edge of white halo
spinningCircle.setOrigin(spinningCircle.width / 2 - whiteHaloSize / 2, spinningCircle.height / 2) spinningCircle.setOrigin(
spinningCircle.width / 2 - whiteHaloSize / 2,
spinningCircle.height / 2
)
addActor(spinningCircle) addActor(spinningCircle)
spinningCircle.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(90f, 1f))) spinningCircle.addAction(
Actions.repeat(
RepeatAction.FOREVER,
Actions.rotateBy(90f, 1f)
)
)
blackSpinningCircle = spinningCircle blackSpinningCircle = spinningCircle
} }
} }