mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-25 04:43:05 -04:00
Linting
This commit is contained in:
parent
dbc3bcb5a1
commit
db87c04017
@ -24,6 +24,7 @@ object HexMath {
|
||||
fun getLatitude(vector: Vector2): Float {
|
||||
return vector.x + vector.y
|
||||
}
|
||||
|
||||
fun getLongitude(vector: Vector2): Float {
|
||||
return vector.x - vector.y
|
||||
}
|
||||
@ -35,7 +36,7 @@ object HexMath {
|
||||
return Vector2.Zero
|
||||
|
||||
val nTiles = getNumberOfTilesInHexagon(size)
|
||||
val width = round(sqrt(nTiles.toFloat()/ratio))
|
||||
val width = round(sqrt(nTiles.toFloat() / ratio))
|
||||
val height = round(width * ratio)
|
||||
return Vector2(width, height)
|
||||
}
|
||||
@ -88,11 +89,12 @@ object HexMath {
|
||||
fun cubic2EvenQCoords(cubicCoord: Vector3): Vector2 {
|
||||
return Vector2(cubicCoord.x, cubicCoord.z + (cubicCoord.x + (cubicCoord.x.toInt() and 1)) / 2)
|
||||
}
|
||||
|
||||
fun evenQ2CubicCoords(evenQCoord: Vector2): Vector3 {
|
||||
val x = evenQCoord.x
|
||||
val z = evenQCoord.y - (evenQCoord.x + (evenQCoord.x.toInt() and 1)) / 2
|
||||
val y = -x-z
|
||||
return Vector3(x,y,z)
|
||||
val y = -x - z
|
||||
return Vector3(x, y, z)
|
||||
}
|
||||
|
||||
fun evenQ2HexCoords(evenQCoord: Vector2): Vector2 {
|
||||
@ -112,11 +114,11 @@ object HexMath {
|
||||
val deltaZ = abs(rz - cubicCoords.z)
|
||||
|
||||
if (deltaX > deltaY && deltaX > deltaZ)
|
||||
rx = -ry-rz
|
||||
rx = -ry - rz
|
||||
else if (deltaY > deltaZ)
|
||||
ry = -rx-rz
|
||||
ry = -rx - rz
|
||||
else
|
||||
rz = -rx-ry
|
||||
rz = -rx - ry
|
||||
|
||||
return Vector3(rx, ry, rz)
|
||||
}
|
||||
@ -145,7 +147,7 @@ object HexMath {
|
||||
}
|
||||
for (i in 0 until distance) { // 10 to 12
|
||||
vectors += current.cpy()
|
||||
if (!worldWrap || distance != maxDistance || i != 0)
|
||||
if (!worldWrap || distance != maxDistance || i != 0)
|
||||
vectors += origin.cpy().scl(2f).sub(current) // Get vector on other side of clock
|
||||
current.add(0f, 1f)
|
||||
}
|
||||
@ -154,18 +156,18 @@ object HexMath {
|
||||
|
||||
fun getVectorsInDistance(origin: Vector2, distance: Int, worldWrap: Boolean): List<Vector2> {
|
||||
val hexesToReturn = mutableListOf<Vector2>()
|
||||
for (i in 0 .. distance) {
|
||||
for (i in 0..distance) {
|
||||
hexesToReturn += getVectorsAtDistance(origin, i, distance, worldWrap)
|
||||
}
|
||||
return hexesToReturn
|
||||
}
|
||||
|
||||
fun getDistance(origin: Vector2, destination: Vector2): Int {
|
||||
val relative_x = origin.x-destination.x
|
||||
val relative_y = origin.y-destination.y
|
||||
val relative_x = origin.x - destination.x
|
||||
val relative_y = origin.y - destination.y
|
||||
if (relative_x * relative_y >= 0)
|
||||
return max(abs(relative_x),abs(relative_y)).toInt()
|
||||
return max(abs(relative_x), abs(relative_y)).toInt()
|
||||
else
|
||||
return (abs(relative_x) + abs(relative_y)).toInt()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
package com.unciv.logic.automation
|
||||
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.unciv.Constants
|
||||
import com.unciv.logic.battle.*
|
||||
import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.civilization.GreatPersonManager
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.map.TileInfo
|
||||
|
@ -190,7 +190,7 @@ class WorkerAutomation(val unit: MapUnit) {
|
||||
}
|
||||
|
||||
// turnsToBuild is what defines them as buildable
|
||||
val tileImprovements = civInfo.gameInfo.ruleSet.tileImprovements.filter { it.value.turnsToBuild!=0 }
|
||||
val tileImprovements = civInfo.gameInfo.ruleSet.tileImprovements.filter { it.value.turnsToBuild != 0 }
|
||||
val uniqueImprovement = tileImprovements.values
|
||||
.firstOrNull { it.uniqueTo == civInfo.civName }
|
||||
|
||||
|
@ -486,7 +486,7 @@ class CityInfo {
|
||||
//endregion
|
||||
}
|
||||
|
||||
class CityInfoReligionManager: Counter<String>(){
|
||||
class CityInfoReligionManager: Counter<String>() {
|
||||
@Transient
|
||||
lateinit var cityInfo: CityInfo
|
||||
|
||||
@ -511,7 +511,7 @@ class CityInfoReligionManager: Counter<String>(){
|
||||
return toReturn
|
||||
}
|
||||
|
||||
fun getMajorityReligion():String? {
|
||||
fun getMajorityReligion(): String? {
|
||||
val followersPerReligion = getNumberOfFollowers()
|
||||
if (followersPerReligion.isEmpty()) return null
|
||||
val religionWithMaxFollowers = followersPerReligion.maxByOrNull { it.value }!!
|
||||
@ -528,5 +528,4 @@ class CityInfoReligionManager: Counter<String>(){
|
||||
else add(majorityReligionOfCity, 6) // todo - when holy cities are implemented, *5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -87,8 +87,9 @@ class CivilizationInfo {
|
||||
|
||||
/** for trades here, ourOffers is the current civ's offers, and theirOffers is what the requesting civ offers */
|
||||
val tradeRequests = ArrayList<TradeRequest>()
|
||||
|
||||
/** See DiplomacyManager.flagsCountdown to why not eEnum */
|
||||
private var flagsCountdown = HashMap<String,Int>()
|
||||
private var flagsCountdown = HashMap<String, Int>()
|
||||
|
||||
// if we only use lists, and change the list each time the cities are changed,
|
||||
// we won't get concurrent modification exceptions.
|
||||
@ -561,7 +562,7 @@ class CivilizationInfo {
|
||||
|
||||
fun addNotification(text: String, vararg notificationIcons: String) = addNotification(text, null, *notificationIcons)
|
||||
|
||||
fun addNotification(text: String, action:NotificationAction?, vararg notificationIcons: String) {
|
||||
fun addNotification(text: String, action: NotificationAction?, vararg notificationIcons: String) {
|
||||
if (playerType == PlayerType.AI) return // no point in lengthening the saved game info if no one will read it
|
||||
val arrayList = ArrayList<String>().apply { addAll(notificationIcons) }
|
||||
notifications.add(Notification(text, arrayList, action))
|
||||
|
@ -2,7 +2,7 @@ package com.unciv.logic.civilization
|
||||
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
|
||||
class GoldenAgeManager{
|
||||
class GoldenAgeManager {
|
||||
@Transient
|
||||
lateinit var civInfo: CivilizationInfo
|
||||
|
||||
@ -12,9 +12,9 @@ class GoldenAgeManager{
|
||||
|
||||
fun clone(): GoldenAgeManager {
|
||||
val toReturn = GoldenAgeManager()
|
||||
toReturn.numberOfGoldenAges=numberOfGoldenAges
|
||||
toReturn.storedHappiness=storedHappiness
|
||||
toReturn.turnsLeftForCurrentGoldenAge=turnsLeftForCurrentGoldenAge
|
||||
toReturn.numberOfGoldenAges = numberOfGoldenAges
|
||||
toReturn.storedHappiness = storedHappiness
|
||||
toReturn.turnsLeftForCurrentGoldenAge = turnsLeftForCurrentGoldenAge
|
||||
return toReturn
|
||||
}
|
||||
|
||||
@ -26,12 +26,12 @@ class GoldenAgeManager{
|
||||
|
||||
fun enterGoldenAge(unmodifiedNumberOfTurns: Int = 10) {
|
||||
var turnsToGoldenAge = unmodifiedNumberOfTurns.toFloat()
|
||||
for(unique in civInfo.getMatchingUniques("Golden Age length increased by []%"))
|
||||
turnsToGoldenAge *= (unique.params[0].toFloat()/100 + 1)
|
||||
for (unique in civInfo.getMatchingUniques("Golden Age length increased by []%"))
|
||||
turnsToGoldenAge *= (unique.params[0].toFloat() / 100 + 1)
|
||||
turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt()
|
||||
civInfo.addNotification("You have entered a Golden Age!", "StatIcons/Happiness")
|
||||
civInfo.popupAlerts.add(PopupAlert(AlertType.GoldenAge,""))
|
||||
civInfo.popupAlerts.add(PopupAlert(AlertType.GoldenAge, ""))
|
||||
}
|
||||
|
||||
fun endTurn(happiness: Int) {
|
||||
@ -46,4 +46,4 @@ class GoldenAgeManager{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -8,20 +8,20 @@ class GreatPersonManager {
|
||||
var pointsForNextGreatGeneral = 30
|
||||
var greatPersonPoints = Stats()
|
||||
var greatGeneralPoints = 0
|
||||
var freeGreatPeople=0
|
||||
var freeGreatPeople = 0
|
||||
|
||||
val statToGreatPersonMapping = HashMap<Stat,String>().apply {
|
||||
put(Stat.Science,"Great Scientist")
|
||||
put(Stat.Production,"Great Engineer")
|
||||
val statToGreatPersonMapping = HashMap<Stat, String>().apply {
|
||||
put(Stat.Science, "Great Scientist")
|
||||
put(Stat.Production, "Great Engineer")
|
||||
put(Stat.Gold, "Great Merchant")
|
||||
put(Stat.Culture, "Great Artist")
|
||||
}
|
||||
|
||||
fun clone(): GreatPersonManager {
|
||||
val toReturn = GreatPersonManager()
|
||||
toReturn.freeGreatPeople=freeGreatPeople
|
||||
toReturn.greatPersonPoints=greatPersonPoints.clone()
|
||||
toReturn.pointsForNextGreatPerson=pointsForNextGreatPerson
|
||||
toReturn.freeGreatPeople = freeGreatPeople
|
||||
toReturn.greatPersonPoints = greatPersonPoints.clone()
|
||||
toReturn.pointsForNextGreatPerson = pointsForNextGreatPerson
|
||||
toReturn.pointsForNextGreatGeneral = pointsForNextGreatGeneral
|
||||
toReturn.greatGeneralPoints = greatGeneralPoints
|
||||
return toReturn
|
||||
@ -37,10 +37,10 @@ class GreatPersonManager {
|
||||
}
|
||||
|
||||
val greatPersonPointsHashmap = greatPersonPoints.toHashMap()
|
||||
for(entry in statToGreatPersonMapping){
|
||||
if(greatPersonPointsHashmap[entry.key]!!>pointsForNextGreatPerson){
|
||||
greatPersonPoints.add(entry.key,-pointsForNextGreatPerson.toFloat())
|
||||
pointsForNextGreatPerson*=2
|
||||
for (entry in statToGreatPersonMapping) {
|
||||
if (greatPersonPointsHashmap[entry.key]!! > pointsForNextGreatPerson) {
|
||||
greatPersonPoints.add(entry.key, -pointsForNextGreatPerson.toFloat())
|
||||
pointsForNextGreatPerson *= 2
|
||||
return entry.value
|
||||
}
|
||||
}
|
||||
@ -51,5 +51,4 @@ class GreatPersonManager {
|
||||
greatPersonPoints.add(greatPersonPointsForTurn)
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -25,9 +25,10 @@ object NotificationIcon {
|
||||
*/
|
||||
open class Notification() {
|
||||
|
||||
var text: String=""
|
||||
var text: String = ""
|
||||
|
||||
@Deprecated("As of 3.13.10 - replaced with icons")
|
||||
var color: Color?=null
|
||||
var color: Color? = null
|
||||
var icons: ArrayList<String> = ArrayList() // Must be ArrayList and not List so it can be deserialized
|
||||
var action: NotificationAction? = null
|
||||
|
||||
@ -36,8 +37,6 @@ open class Notification() {
|
||||
this.icons = notificationIcons
|
||||
this.action = action
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** defines what to do if the user clicks on a notification */
|
||||
@ -48,7 +47,7 @@ interface NotificationAction {
|
||||
/** cycle through tiles */
|
||||
data class LocationAction(var locations: ArrayList<Vector2> = ArrayList()) : NotificationAction {
|
||||
|
||||
constructor(locations: List<Vector2>): this(ArrayList(locations))
|
||||
constructor(locations: List<Vector2>) : this(ArrayList(locations))
|
||||
|
||||
override fun execute(worldScreen: WorldScreen) {
|
||||
if (locations.isNotEmpty()) {
|
||||
@ -57,7 +56,6 @@ data class LocationAction(var locations: ArrayList<Vector2> = ArrayList()) : Not
|
||||
worldScreen.mapHolder.setCenterPosition(locations[index], selectUnit = false)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** show tech screen */
|
||||
@ -70,13 +68,11 @@ class TechAction(val techName: String = "") : NotificationAction {
|
||||
|
||||
/** enter city */
|
||||
data class CityAction(val city: Vector2 = Vector2.Zero): NotificationAction {
|
||||
|
||||
override fun execute(worldScreen: WorldScreen) {
|
||||
worldScreen.mapHolder.tileMap[city].getCity()?.let {
|
||||
worldScreen.game.setScreen(CityScreen(it))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
data class DiplomacyAction(val otherCivName: String = ""): NotificationAction {
|
||||
|
@ -24,4 +24,4 @@ class PopupAlert {
|
||||
}
|
||||
|
||||
constructor() // for json serialization
|
||||
}
|
||||
}
|
@ -580,4 +580,4 @@ class AssignedQuest(val questName: String = "",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -357,7 +357,7 @@ class MapUnit {
|
||||
if (currentMovement < 0) currentMovement = 0f
|
||||
}
|
||||
|
||||
fun getMovementDestination():TileInfo{
|
||||
fun getMovementDestination(): TileInfo {
|
||||
val destination = action!!.replace("moveTo ", "").split(",").dropLastWhile { it.isEmpty() }
|
||||
val destinationVector = Vector2(destination[0].toFloat(), destination[1].toFloat())
|
||||
return currentTile.tileMap[destinationVector]
|
||||
@ -418,7 +418,7 @@ class MapUnit {
|
||||
else {
|
||||
val removedFeatureName = tile.improvementInProgress!!.removePrefix("Remove ")
|
||||
val removedFeatureObject = tile.ruleset.terrains[removedFeatureName]
|
||||
if (removedFeatureObject!=null && removedFeatureObject.uniques
|
||||
if (removedFeatureObject != null && removedFeatureObject.uniques
|
||||
.contains("Provides a one-time Production bonus to the closest city when cut down")) {
|
||||
tryProvideProductionToClosestCity(removedFeatureName)
|
||||
}
|
||||
|
@ -200,7 +200,8 @@ open class TileInfo {
|
||||
if (naturalWonder != null) yield(getNaturalWonder())
|
||||
yieldAll(terrainFeatures.asSequence().mapNotNull { ruleset.terrains[it] })
|
||||
}
|
||||
fun hasUnique(unique:String) = getAllTerrains().any { it.uniques.contains(unique) }
|
||||
|
||||
fun hasUnique(unique: String) = getAllTerrains().any { it.uniques.contains(unique) }
|
||||
|
||||
fun getWorkingCity(): CityInfo? {
|
||||
val civInfo = getOwner()
|
||||
@ -210,7 +211,7 @@ open class TileInfo {
|
||||
|
||||
fun isWorked(): Boolean = getWorkingCity() != null
|
||||
fun providesYield() = getCity() != null && (isCityCenter() || isWorked()
|
||||
|| getTileImprovement()?.hasUnique("Tile provides yield without assigned population")==true)
|
||||
|| getTileImprovement()?.hasUnique("Tile provides yield without assigned population") == true)
|
||||
|
||||
fun isLocked(): Boolean {
|
||||
val workingCity = getWorkingCity()
|
||||
@ -332,10 +333,10 @@ open class TileInfo {
|
||||
return when {
|
||||
improvement.uniqueTo != null && improvement.uniqueTo != civInfo.civName -> false
|
||||
improvement.techRequired != null && !civInfo.tech.isResearched(improvement.techRequired!!) -> false
|
||||
getOwner() != civInfo && ! (
|
||||
improvement.hasUnique("Can be built outside your borders")
|
||||
// citadel can be built only next to or within own borders
|
||||
|| improvement.hasUnique("Can be built just outside your borders") && neighbors.any { it.getOwner() == civInfo }
|
||||
getOwner() != civInfo && !(
|
||||
improvement.hasUnique("Can be built outside your borders")
|
||||
// citadel can be built only next to or within own borders
|
||||
|| improvement.hasUnique("Can be built just outside your borders") && neighbors.any { it.getOwner() == civInfo }
|
||||
) -> false
|
||||
improvement.uniqueObjects.any {
|
||||
it.placeholderText == "Obsolete with []" && civInfo.tech.isResearched(it.params[0])
|
||||
@ -394,8 +395,8 @@ open class TileInfo {
|
||||
|| filter == naturalWonder
|
||||
|| terrainFeatures.isNotEmpty() && getTerrainFeatures().last().uniques.contains(filter)
|
||||
|| civInfo != null && hasViewableResource(civInfo) && resource == filter
|
||||
|| filter == "Foreign Land" && civInfo!=null && !isFriendlyTerritory(civInfo)
|
||||
|| filter == "Friendly Land" && civInfo!=null && isFriendlyTerritory(civInfo)
|
||||
|| filter == "Foreign Land" && civInfo != null && !isFriendlyTerritory(civInfo)
|
||||
|| filter == "Friendly Land" && civInfo != null && isFriendlyTerritory(civInfo)
|
||||
}
|
||||
|
||||
fun hasImprovementInProgress() = improvementInProgress != null
|
||||
@ -664,7 +665,7 @@ open class TileInfo {
|
||||
improvement = improvementObject.name
|
||||
}
|
||||
|
||||
private fun convertHillToTerrainFeature(){
|
||||
private fun convertHillToTerrainFeature() {
|
||||
if (baseTerrain == Constants.hill &&
|
||||
ruleset.terrains[Constants.hill]?.type == TerrainType.TerrainFeature) {
|
||||
val mostCommonBaseTerrain = neighbors.filter { it.isLand && !it.isImpassible() }
|
||||
|
@ -52,8 +52,8 @@ class TileMap {
|
||||
|
||||
/** generates a rectangular map of given width and height*/
|
||||
constructor(width: Int, height: Int, ruleset: Ruleset, worldWrap: Boolean = false) {
|
||||
val halfway = if(worldWrap) width/2-1 else width/2
|
||||
for (x in -width / 2 .. halfway)
|
||||
val halfway = if (worldWrap) width / 2 - 1 else width / 2
|
||||
for (x in -width / 2..halfway)
|
||||
for (y in -height / 2..height / 2)
|
||||
tileList.add(TileInfo().apply {
|
||||
position = HexMath.evenQ2HexCoords(Vector2(x.toFloat(), y.toFloat()))
|
||||
@ -128,7 +128,7 @@ class TileMap {
|
||||
}
|
||||
}.filterNotNull()
|
||||
|
||||
private fun getIfTileExistsOrNull(x: Int, y: Int) : TileInfo? {
|
||||
private fun getIfTileExistsOrNull(x: Int, y: Int): TileInfo? {
|
||||
if (contains(x, y))
|
||||
return get(x, y)
|
||||
|
||||
@ -321,7 +321,7 @@ class TileMap {
|
||||
* Returns the clockPosition of otherTile seen from tile's position
|
||||
* Returns -1 if not neighbors
|
||||
*/
|
||||
fun getNeighborTileClockPosition(tile: TileInfo, otherTile: TileInfo): Int{
|
||||
fun getNeighborTileClockPosition(tile: TileInfo, otherTile: TileInfo): Int {
|
||||
var radius = mapParameters.size.radius
|
||||
if (mapParameters.shape == MapShape.rectangular)
|
||||
radius = HexMath.getEquivalentRectangularSize(radius).x.toInt() / 2
|
||||
@ -348,7 +348,7 @@ class TileMap {
|
||||
* Returns the closest position to (0, 0) outside the map which can be wrapped
|
||||
* to the position of the given vector
|
||||
*/
|
||||
fun getUnWrappedPosition(position: Vector2) : Vector2 {
|
||||
fun getUnWrappedPosition(position: Vector2): Vector2 {
|
||||
if (!contains(position))
|
||||
return position //The position is outside the map so its unwrapped already
|
||||
|
||||
@ -364,4 +364,4 @@ class TileMap {
|
||||
else
|
||||
vectorUnwrappedLeft
|
||||
}
|
||||
}
|
||||
}
|
@ -228,7 +228,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam
|
||||
keyPressDispatcher[Input.Keys.F2] = { game.setScreen(EmpireOverviewScreen(selectedCiv, "Trades")) } // Economic info
|
||||
keyPressDispatcher[Input.Keys.F3] = { game.setScreen(EmpireOverviewScreen(selectedCiv, "Units")) } // Military info
|
||||
keyPressDispatcher[Input.Keys.F4] = { game.setScreen(EmpireOverviewScreen(selectedCiv, "Diplomacy")) } // Diplomacy info
|
||||
keyPressDispatcher[Input.Keys.F5] = { game.setScreen(PolicyPickerScreen(this, selectedCiv)) } // Social Policies Screen
|
||||
keyPressDispatcher[Input.Keys.F5] = { game.setScreen(PolicyPickerScreen(this, selectedCiv)) } // Social Policies Screen
|
||||
keyPressDispatcher[Input.Keys.F6] = { game.setScreen(TechPickerScreen(viewingCiv)) } // Tech Screen
|
||||
keyPressDispatcher[Input.Keys.F7] = { game.setScreen(EmpireOverviewScreen(selectedCiv, "Cities")) } // originally Notification Log
|
||||
keyPressDispatcher[Input.Keys.F8] = { game.setScreen(VictoryScreen(this)) } // Victory Progress
|
||||
@ -542,7 +542,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam
|
||||
}
|
||||
|
||||
|
||||
fun createNewWorldScreen(gameInfo:GameInfo) {
|
||||
fun createNewWorldScreen(gameInfo: GameInfo) {
|
||||
|
||||
game.gameInfo = gameInfo
|
||||
val newWorldScreen = WorldScreen(gameInfo, gameInfo.getPlayerToViewAs())
|
||||
@ -682,7 +682,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam
|
||||
beliefTable.onClick { viewingCiv.religionManager.choosePantheonBelief(belief); pantheonPopup.close(); shouldUpdate = true }
|
||||
beliefsTable.add(beliefTable).fillX().row()
|
||||
}
|
||||
pantheonPopup.add(ScrollPane(beliefsTable)).maxHeight(stage.height*.8f)
|
||||
pantheonPopup.add(ScrollPane(beliefsTable)).maxHeight(stage.height * .8f)
|
||||
pantheonPopup.open()
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user