|
|
|
|
@ -14,6 +14,7 @@ import net.pokeranalytics.android.exceptions.PAIllegalStateException |
|
|
|
|
import net.pokeranalytics.android.model.handhistory.Street |
|
|
|
|
import net.pokeranalytics.android.ui.view.RowRepresentable |
|
|
|
|
import net.pokeranalytics.android.ui.view.RowViewType |
|
|
|
|
import timber.log.Timber |
|
|
|
|
|
|
|
|
|
interface CardProperty |
|
|
|
|
|
|
|
|
|
@ -24,11 +25,10 @@ fun List<Card>.formatted(context: Context) : CharSequence? { |
|
|
|
|
var span: CharSequence? = null |
|
|
|
|
this.forEach { |
|
|
|
|
val formatted = it.formatted(context) |
|
|
|
|
if (span == null) { |
|
|
|
|
span = formatted |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
span = TextUtils.concat(span, formatted) |
|
|
|
|
span = if (span == null) { |
|
|
|
|
formatted |
|
|
|
|
} else { |
|
|
|
|
TextUtils.concat(span, formatted) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return span |
|
|
|
|
@ -95,6 +95,10 @@ open class Card : RealmObject() { |
|
|
|
|
|
|
|
|
|
companion object { |
|
|
|
|
|
|
|
|
|
val baseSuits: List<Suit> by lazy { |
|
|
|
|
listOf(SPADES, HEART, DIAMOND, CLOVER) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val displaySuits: List<Suit> by lazy { |
|
|
|
|
listOf(SPADES, HEART, DIAMOND, CLOVER, UNDEFINED) |
|
|
|
|
} |
|
|
|
|
@ -240,9 +244,49 @@ open class Card : RealmObject() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun copy(): Card { |
|
|
|
|
val card = Card() |
|
|
|
|
card.value = this.value |
|
|
|
|
card.suit = this.suit |
|
|
|
|
return card |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val isWildCard: Boolean |
|
|
|
|
get() { |
|
|
|
|
return this.value == null || this.suit == null || this.suit == Suit.UNDEFINED |
|
|
|
|
return this.value == null || this.isSuitWildCard |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
val isSuitWildCard: Boolean |
|
|
|
|
get() { |
|
|
|
|
return this.suit == null || this.suit == Suit.UNDEFINED |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun List<Card>.putSuits(usedCards: MutableList<Card>) : List<Card> { |
|
|
|
|
|
|
|
|
|
fun getLeastUsedValidSuit(value: Int, usedCards: MutableList<Card>, addedCards: List<Card>): Card.Suit { |
|
|
|
|
val availableSuits = Card.Suit.baseSuits.toMutableList() |
|
|
|
|
usedCards.filter { it.value == value }.forEach { availableSuits.remove(it.suit) } |
|
|
|
|
|
|
|
|
|
val currentCards = this.drop(addedCards.size) + addedCards |
|
|
|
|
val cardsPerSuit = availableSuits.associateWith { suit -> |
|
|
|
|
currentCards.filter { it.suit == suit } |
|
|
|
|
} |
|
|
|
|
return cardsPerSuit.minByOrNull { it.value.count() }!!.key |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val list = mutableListOf<Card>() |
|
|
|
|
|
|
|
|
|
this.forEach { cardToClone -> |
|
|
|
|
val card = cardToClone.copy() |
|
|
|
|
if (card.value != null && card.isSuitWildCard) { |
|
|
|
|
card.suit = getLeastUsedValidSuit(card.value!!, usedCards, list) |
|
|
|
|
usedCards.add(card) |
|
|
|
|
Timber.d("Selected suit for wildcard: ${card.suit?.value}, value = ${card.value}") |
|
|
|
|
} |
|
|
|
|
list.add(card) |
|
|
|
|
} |
|
|
|
|
return list |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|