Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import dev.icerock.moko.parcelize.Parcelize
import kotlinx.serialization.Contextual
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonClassDiscriminator

typealias LocalCharacterId = String

Expand Down Expand Up @@ -50,6 +51,7 @@ data class Character(
val avatarUrl: String? = null,
val money: Money = Money.ZERO,
val hiddenTabs: Set<CharacterTab> = emptySet(),
val relationships: Map<LocalCharacterId, Relationship> = emptyMap(),
val size: Size? = null,
) : Parcelable {

Expand Down Expand Up @@ -89,6 +91,18 @@ data class Character(
characteristics,
)
require(points.wounds <= maxWounds) { "Wounds (${points.wounds} are greater than max Wounds ($maxWounds)" }
require(relationships.count { it.value is Relationship.Mount && it.value.riding } <= 1) {
"Character can ride at most one mount at he mount"
}
}

@JsonClassDiscriminator("type")
sealed interface Relationship {
@SerialName("FAMILIAR")
object Familiar : Relationship

@SerialName("MOUNT")
data class Mount(val riding: Boolean) : Relationship
}

@Parcelize
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ package cz.frantisekmasa.wfrp_master.common.core.domain.character
enum class CharacterType {
PLAYER_CHARACTER,
NPC,
FAMILIAR,
HIRELING,
}
6 changes: 4 additions & 2 deletions firebase/firestore.rules
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,8 @@ service cloud.firestore {
"archived",
"woundsModifiers",
"compendiumCareer",
"encumbranceBonus"
"encumbranceBonus",
"relationships",
].hasAll(character.keys())
&& character.id == characterId
&& (
Expand Down Expand Up @@ -614,7 +615,8 @@ service cloud.firestore {
character.compendiumCareer.careerId is string && isValidUuid(character.compendiumCareer.careerId) &&
character.compendiumCareer.levelId is string && isValidUuid(character.compendiumCareer.levelId)
))
&& character.encumbranceBonus is number && character.encumbranceBonus >= 0;
&& character.encumbranceBonus is number && character.encumbranceBonus >= 0
&& (! ("relationships" in character) || character.relationships is map);
}
}

Expand Down