Added promotion jsons, icons and organized unit types (scout is now its own!)

This commit is contained in:
Yair Morgenstern 2018-06-10 17:44:05 +03:00
parent adeaa5907a
commit 8d5fd730a0
27 changed files with 182 additions and 16 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,88 @@
[
{
name:"Accuracy I",
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Accuracy II",
prerequisites:["Accuracy I"],
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Accuracy III",
prerequisites:["Accuracy II"],
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Barrage I",
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Barrage II",
prerequisites:["Barrage I"],
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Barrage III",
prerequisites:["Barrage II"],
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Siege","Ranged"]
}
{
name:"Shock I",
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Shock II",
prerequisites:["Shock I"],
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Shock III",
prerequisites:["Shock II"],
effect:"Bonus vs units in open terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Drill I",
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Drill II",
prerequisites:["Drill I"],
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Drill III",
prerequisites:["Drill II"],
effect:"Bonus vs units in rough terrain +15%",
unitTypes:["Melee","Mounted"]
}
{
name:"Scouting I",
effect:"+1 Visibility Range",
unitTypes:["Melee","Mounted"]
}
{
name:"Scouting II",
prerequisites:["Scouting I"],
effect:"+1 Visibility Range",
unitTypes:["Melee","Mounted"]
}
{
name:"Scouting III",
prerequisites:["Scouting II"],
effect:"+1 Visibility Range",
unitTypes:["Melee","Mounted"]
}
]

View file

@ -22,7 +22,7 @@
{
name:"Scout",
cost:25,
unitType:"Melee",
unitType:"Scout",
strength:5,
uniques:["Ignores terrain cost"]
movement:2

View file

@ -16,9 +16,9 @@ interface ICombatant{
fun getTile(): TileInfo
fun isMelee(): Boolean {
return this.getUnitType() in listOf(UnitType.Melee, UnitType.Mounted)
return this.getUnitType().isMelee()
}
fun isRanged(): Boolean {
return this.getUnitType() in listOf(UnitType.Ranged, UnitType.Siege)
return this.getUnitType().isRanged()
}
}

View file

@ -6,6 +6,7 @@ import com.unciv.models.gamebasics.tile.Terrain
import com.unciv.models.gamebasics.tile.TileImprovement
import com.unciv.models.gamebasics.tile.TileResource
import com.unciv.models.gamebasics.unit.Unit
import com.unciv.models.gamebasics.unit.UnitPromotion
import com.unciv.models.stats.INamed
import kotlin.collections.set
@ -17,6 +18,7 @@ object GameBasics {
val Technologies = LinkedHashMap<String, Technology>()
val Helps = LinkedHashMap<String, BasicHelp>()
val Units = LinkedHashMap<String, Unit>()
val UnitPromotions = LinkedHashMap<String, UnitPromotion>()
val Civilizations = LinkedHashMap<String, Civilization>()
val PolicyBranches = LinkedHashMap<String, PolicyBranch>()
val Tutorials = LinkedHashMap<String, List<String>>()
@ -41,6 +43,7 @@ object GameBasics {
TileImprovements += createHashmap(getFromJson(Array<TileImprovement>::class.java, "TileImprovements"))
Helps += createHashmap(getFromJson(Array<BasicHelp>::class.java, "BasicHelp"))
Units += createHashmap(getFromJson(Array<Unit>::class.java, "Units"))
UnitPromotions += createHashmap(getFromJson(Array<UnitPromotion>::class.java, "UnitPromotions"))
PolicyBranches += createHashmap(getFromJson(Array<PolicyBranch>::class.java, "Policies"))
Civilizations += createHashmap(getFromJson(Array<Civilization>::class.java, "Civilizations"))

View file

@ -9,11 +9,11 @@ import java.util.*
class TileImprovement : NamedStats(), ICivilopedia {
@JvmField var terrainsCanBeBuiltOn: Collection<String> = ArrayList()
@JvmField var techRequired: String? = null
var terrainsCanBeBuiltOn: Collection<String> = ArrayList()
var techRequired: String? = null
@JvmField var improvingTech: String? = null
@JvmField var improvingTechStats: Stats? = null
var improvingTech: String? = null
var improvingTechStats: Stats? = null
private val turnsToBuild: Int = 0 // This is the base cost.
fun getTurnsToBuild(civInfo: CivilizationInfo): Int {
@ -47,3 +47,4 @@ class TileImprovement : NamedStats(), ICivilopedia {
return stringBuilder.toString()
}
}

View file

@ -0,0 +1,15 @@
package com.unciv.models.gamebasics.unit
import com.unciv.models.gamebasics.ICivilopedia
import com.unciv.models.stats.INamed
class UnitPromotion : ICivilopedia, INamed{
override lateinit var name: String
override val description: String
get(){
return effect
}
var prerequisites = listOf<String>()
lateinit var effect:String;
var unitTypes = listOf<UnitType>()
}

View file

@ -5,6 +5,14 @@ enum class UnitType{
Civilian,
Melee,
Ranged,
Scout,
Mounted,
Siege
Siege;
fun isMelee(): Boolean {
return this in listOf(Melee, Mounted, Scout)
}
fun isRanged(): Boolean {
return this in listOf(Ranged, Siege)
}
}

View file

@ -48,3 +48,4 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() {
topTable.add(regularImprovements)
}
}

View file

@ -0,0 +1,45 @@
package com.unciv.ui.pickerscreens
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.Button
import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup
import com.unciv.logic.map.MapUnit
import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.unit.UnitPromotion
import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.addClickListener
import com.unciv.ui.utils.setFontColor
class PromotionPickerScreen(mapUnit: MapUnit) : PickerScreen() {
private var selectedPromotion: UnitPromotion? = null
init {
rightSideButton.setText("Pick promotion")
rightSideButton.addClickListener {
// todo add promotion to unit and decrease XP
game.setWorldScreen()
dispose()
}
val availablePromotions = VerticalGroup()
availablePromotions.space(10f)
for (promotion in GameBasics.UnitPromotions.values) {
if (!promotion.unitTypes.contains(mapUnit.getBaseUnit().unitType)) continue
val promotionButton = Button(skin)
promotionButton.add(ImageGetter.getPromotionIcon(promotion.name)).size(30f).pad(10f)
promotionButton.add(Label(promotion.name, skin)
.setFontColor(Color.WHITE)).pad(10f)
promotionButton.addClickListener {
selectedPromotion = promotion
pick(promotion.name)
descriptionLabel.setText(promotion.effect)
}
availablePromotions.addActor(promotionButton)
}
topTable.add(availablePromotions)
}
}

View file

@ -50,5 +50,9 @@ object ImageGetter {
return getImage("ImprovementIcons/" + improvementName.replace(' ', '_') + "_(Civ5).png")
}
fun getPromotionIcon(promotionName:String):Image{
return getImage("UnitPromotionIcons/" + promotionName.replace(' ', '_') + "_(Civ5).png")
}
fun getBlue() = Color(0x004085bf)
}

View file

@ -99,11 +99,12 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap:
for(tile: TileInfo in unit.getDistanceToTiles().keys)
tileGroups[tile]!!.showCircle(colorFromRGB(0, 120, 215))
val attackableTiles: List<TileInfo> = when(unit.getBaseUnit().unitType){
UnitType.Civilian -> unit.getDistanceToTiles().keys.toList()
UnitType.Melee, UnitType.Mounted -> unit.getDistanceToTiles().keys.toList()
UnitType.Ranged, UnitType.Siege -> unit.getTile().getTilesInDistance(2)
UnitType.City -> throw Exception("A unit shouldn't have a City unittype!")
val unitType = unit.getBaseUnit().unitType
val attackableTiles: List<TileInfo> = when{
unitType==UnitType.Civilian -> unit.getDistanceToTiles().keys.toList()
unit.getBaseUnit().unitType.isMelee() -> unit.getDistanceToTiles().keys.toList()
unitType.isRanged() -> unit.getTile().getTilesInDistance(2)
else -> throw Exception("UnitType isn't Civilian, Melee or Ranged???")
}