mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-30 07:21:34 -04:00
Battle table indicates damage with health bars
This commit is contained in:
parent
b38c615056
commit
0cd5426440
@ -7,6 +7,10 @@ import com.unciv.models.gamebasics.GameBasics
|
|||||||
import com.unciv.models.gamebasics.unit.UnitType
|
import com.unciv.models.gamebasics.unit.UnitType
|
||||||
|
|
||||||
class CityCombatant(val city: CityInfo) : ICombatant {
|
class CityCombatant(val city: CityInfo) : ICombatant {
|
||||||
|
override fun getMaxHealth(): Int {
|
||||||
|
return city.getMaxHealth()
|
||||||
|
}
|
||||||
|
|
||||||
override fun getHealth(): Int = city.health
|
override fun getHealth(): Int = city.health
|
||||||
override fun getCivilization(): CivilizationInfo = city.civInfo
|
override fun getCivilization(): CivilizationInfo = city.civInfo
|
||||||
override fun getTile(): TileInfo = city.getCenterTile()
|
override fun getTile(): TileInfo = city.getCenterTile()
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package com.unciv.logic.battle
|
package com.unciv.logic.battle
|
||||||
|
|
||||||
import com.unciv.logic.civilization.CivilizationInfo
|
import com.unciv.logic.civilization.CivilizationInfo
|
||||||
import com.unciv.logic.map.MapUnit
|
|
||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.models.gamebasics.unit.UnitType
|
import com.unciv.models.gamebasics.unit.UnitType
|
||||||
|
|
||||||
interface ICombatant{
|
interface ICombatant{
|
||||||
fun getName(): String
|
fun getName(): String
|
||||||
fun getHealth():Int
|
fun getHealth():Int
|
||||||
|
fun getMaxHealth():Int
|
||||||
fun getUnitType(): UnitType
|
fun getUnitType(): UnitType
|
||||||
fun getAttackingStrength(): Int
|
fun getAttackingStrength(): Int
|
||||||
fun getDefendingStrength(): Int
|
fun getDefendingStrength(): Int
|
||||||
|
@ -7,6 +7,7 @@ import com.unciv.models.gamebasics.unit.UnitType
|
|||||||
|
|
||||||
class MapUnitCombatant(val unit: MapUnit) : ICombatant {
|
class MapUnitCombatant(val unit: MapUnit) : ICombatant {
|
||||||
override fun getHealth(): Int = unit.health
|
override fun getHealth(): Int = unit.health
|
||||||
|
override fun getMaxHealth() = 100
|
||||||
override fun getCivilization(): CivilizationInfo = unit.civInfo
|
override fun getCivilization(): CivilizationInfo = unit.civInfo
|
||||||
override fun getTile(): TileInfo = unit.getTile()
|
override fun getTile(): TileInfo = unit.getTile()
|
||||||
override fun getName(): String = unit.name
|
override fun getName(): String = unit.name
|
||||||
|
@ -267,7 +267,7 @@ open class TileGroup(var tileInfo: TileInfo) : Group() {
|
|||||||
}
|
}
|
||||||
if (roadStatus == RoadStatus.None) continue // no road image
|
if (roadStatus == RoadStatus.None) continue // no road image
|
||||||
|
|
||||||
val image = if (roadStatus == RoadStatus.Road) ImageGetter.getWhiteDot().apply { color = Color.BROWN }
|
val image = if (roadStatus == RoadStatus.Road) ImageGetter.getDot(Color.BROWN)
|
||||||
else ImageGetter.getImage("OtherIcons/Railroad.png")
|
else ImageGetter.getImage("OtherIcons/Railroad.png")
|
||||||
roadImage.image = image
|
roadImage.image = image
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ object ImageGetter {
|
|||||||
// and the atlas is what tells us what was packed where.
|
// and the atlas is what tells us what was packed where.
|
||||||
var atlas = TextureAtlas("game.atlas")
|
var atlas = TextureAtlas("game.atlas")
|
||||||
fun getWhiteDot() = getImage(whiteDotLocation)
|
fun getWhiteDot() = getImage(whiteDotLocation)
|
||||||
|
fun getDot(dotColor: Color) = getWhiteDot().apply { color = dotColor}
|
||||||
|
|
||||||
fun getExternalImage(fileName:String): Image {
|
fun getExternalImage(fileName:String): Image {
|
||||||
return Image(TextureRegion(Texture("ExtraImages/$fileName.png")))
|
return Image(TextureRegion(Texture("ExtraImages/$fileName.png")))
|
||||||
@ -158,7 +158,7 @@ object ImageGetter {
|
|||||||
healthPercent > 1 / 3f -> Color.ORANGE
|
healthPercent > 1 / 3f -> Color.ORANGE
|
||||||
else -> Color.RED
|
else -> Color.RED
|
||||||
}
|
}
|
||||||
val emptyPartOfBar = ImageGetter.getWhiteDot().apply { color = Color.BLACK }
|
val emptyPartOfBar = ImageGetter.getDot(Color.BLACK)
|
||||||
healthBar.add(healthPartOfBar).width(healthBarSize * healthPercent).height(5f)
|
healthBar.add(healthPartOfBar).width(healthBarSize * healthPercent).height(5f)
|
||||||
healthBar.add(emptyPartOfBar).width(healthBarSize * (1 - healthPercent)).height(5f)
|
healthBar.add(emptyPartOfBar).width(healthBarSize * (1 - healthPercent)).height(5f)
|
||||||
healthBar.pack()
|
healthBar.pack()
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package com.unciv.ui.worldscreen.bottombar
|
package com.unciv.ui.worldscreen.bottombar
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.actions.Actions
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.actions.RepeatAction
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.Image
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Label
|
import com.badlogic.gdx.scenes.scene2d.ui.Label
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
import com.badlogic.gdx.scenes.scene2d.ui.TextButton
|
||||||
@ -118,12 +121,10 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
|
|||||||
add("{Captured!}".tr())
|
add("{Captured!}".tr())
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
|
||||||
add("{Health}: ".tr() + attacker.getHealth().toString() + " -> "
|
|
||||||
+ (attacker.getHealth() - damageToAttacker))
|
|
||||||
|
|
||||||
add("{Health}: ".tr() + defender.getHealth().toString() + " -> "
|
else {
|
||||||
+ (defender.getHealth() - damageToDefender))
|
add(getHealthBar(attacker.getHealth(), attacker.getMaxHealth(), damageToAttacker))
|
||||||
|
add(getHealthBar(defender.getHealth(), defender.getMaxHealth(), damageToDefender))
|
||||||
}
|
}
|
||||||
|
|
||||||
row().pad(5f)
|
row().pad(5f)
|
||||||
@ -171,4 +172,32 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
|
|||||||
setPosition(worldScreen.stage.width/2-width/2, 5f)
|
setPosition(worldScreen.stage.width/2-width/2, 5f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getHealthBar(currentHealth: Int, maxHealth: Int, expectedDamage:Int): Table {
|
||||||
|
val healthBar = Table()
|
||||||
|
val totalWidth = 100f
|
||||||
|
fun addHealthToBar(image: Image, amount:Int){
|
||||||
|
healthBar.add(image).size(amount*totalWidth/maxHealth,3f)
|
||||||
|
}
|
||||||
|
addHealthToBar(ImageGetter.getDot(Color.BLACK), maxHealth-currentHealth)
|
||||||
|
|
||||||
|
val damagedHealth = ImageGetter.getDot(Color.RED)
|
||||||
|
damagedHealth.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.sequence(
|
||||||
|
Actions.color(Color.BLACK,0.7f),
|
||||||
|
Actions.color(Color.RED,0.7f)
|
||||||
|
)))
|
||||||
|
addHealthToBar(damagedHealth,expectedDamage)
|
||||||
|
|
||||||
|
val remainingHealth = currentHealth-expectedDamage
|
||||||
|
val remainingHealthDot = ImageGetter.getWhiteDot()
|
||||||
|
remainingHealthDot.color = when {
|
||||||
|
remainingHealth / maxHealth.toFloat() > 2 / 3f -> Color.GREEN
|
||||||
|
remainingHealth / maxHealth.toFloat() > 1 / 3f -> Color.ORANGE
|
||||||
|
else -> Color.RED
|
||||||
|
}
|
||||||
|
addHealthToBar(remainingHealthDot ,remainingHealth)
|
||||||
|
|
||||||
|
healthBar.pack()
|
||||||
|
return healthBar
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package com.unciv.ui.worldscreen.bottombar
|
package com.unciv.ui.worldscreen.bottombar
|
||||||
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.Touchable
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
import com.badlogic.gdx.scenes.scene2d.ui.Table
|
||||||
import com.unciv.logic.map.TileInfo
|
import com.unciv.logic.map.TileInfo
|
||||||
import com.unciv.ui.worldscreen.WorldScreen
|
import com.unciv.ui.worldscreen.WorldScreen
|
||||||
@ -11,7 +10,6 @@ class WorldScreenBottomBar(val worldScreen: WorldScreen) : Table(){
|
|||||||
val tileInfoTable = TileInfoTable(worldScreen)
|
val tileInfoTable = TileInfoTable(worldScreen)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
touchable= Touchable.enabled
|
|
||||||
add(unitTable).width(worldScreen.stage.width/3).fill()
|
add(unitTable).width(worldScreen.stage.width/3).fill()
|
||||||
add().width(worldScreen.stage.width/3) // empty space for the battle table
|
add().width(worldScreen.stage.width/3) // empty space for the battle table
|
||||||
add(tileInfoTable).width(worldScreen.stage.width/3).fill()
|
add(tileInfoTable).width(worldScreen.stage.width/3).fill()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user