Skip to content

Commit 7bd3ac0

Browse files
authored
Merge pull request #16 from fmasa/combat-improvements
Combat improvements
2 parents aee2bea + add9311 commit 7bd3ac0

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/combat/ActiveCombatScreen.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ class ActiveCombatScreen(
402402

403403
NumberPicker(
404404
label = LocalStrings.current.combat.labelAdvantage,
405-
value = advantage.value.toInt(),
405+
value = advantage.value,
406406
onIncrement = { updateAdvantage(advantage.inc().coerceAtMost(advantageCap)) },
407407
onDecrement = { updateAdvantage(advantage.dec()) },
408408
)
@@ -445,10 +445,14 @@ class ActiveCombatScreen(
445445
},
446446
text = { Text(combatant.name) },
447447
trailing = {
448-
val advantage = combatant.combatant.advantage
448+
Column(horizontalAlignment = Alignment.End) {
449+
Text("I: ${combatant.combatant.initiative}")
449450

450-
if (advantage > Advantage.ZERO) {
451-
Text("$advantage A", fontWeight = FontWeight.Bold)
451+
val advantage = combatant.combatant.advantage
452+
453+
if (advantage > Advantage.ZERO) {
454+
Text("A: $advantage", fontWeight = FontWeight.Bold)
455+
}
452456
}
453457
}
454458
)

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/combat/CombatScreenModel.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class CombatScreenModel(
134134
val globalEncounterId = EncounterId(partyId, encounterId)
135135
val combatants =
136136
characters.map {
137-
it.characteristics to Combatant.Character(
137+
characteristics(it) to Combatant.Character(
138138
id = uuid4(),
139139
characterId = it.id,
140140
initiative = 1,
@@ -148,17 +148,19 @@ class CombatScreenModel(
148148
)
149149
} +
150150
npcCharacters.flatMap { (character, count) ->
151+
val characteristics = characteristics(character)
152+
151153
if (count == 1)
152154
listOf(
153-
character.characteristics to Combatant.Character(
155+
characteristics to Combatant.Character(
154156
id = uuid4(),
155157
name = character.publicName,
156158
characterId = character.id,
157159
initiative = 1,
158160
)
159161
)
160162
else (1..count).map { index ->
161-
character.characteristics to Combatant.Character(
163+
characteristics to Combatant.Character(
162164
id = uuid4(),
163165
characterId = character.id,
164166
initiative = 1,
@@ -175,6 +177,16 @@ class CombatScreenModel(
175177
Reporter.recordEvent("combat_started", mapOf("partyId" to partyId.toString()))
176178
}
177179

180+
private suspend fun characteristics(character: Character): Stats {
181+
val talents = talents.findAllForCharacter(CharacterId(partyId, character.id)).first()
182+
183+
val initiativeIncrease = talents
184+
.filter { it.name.equals("Combat Reflexes", ignoreCase = true) }
185+
.sumOf { it.taken } * 10
186+
187+
return character.characteristics + Stats.ZERO.copy(initiative = initiativeIncrease)
188+
}
189+
178190
suspend fun previousTurn() = updateCombat { it.previousTurn() }
179191

180192
suspend fun nextTurn() = updateCombat { it.nextTurn() }

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/ui/StatBlock.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import androidx.compose.foundation.layout.width
1414
import androidx.compose.foundation.text.ClickableText
1515
import androidx.compose.material.CircularProgressIndicator
1616
import androidx.compose.material.Divider
17+
import androidx.compose.material.LocalContentAlpha
18+
import androidx.compose.material.LocalContentColor
1719
import androidx.compose.material.MaterialTheme
1820
import androidx.compose.material.Text
1921
import androidx.compose.runtime.Composable
@@ -175,7 +177,12 @@ private fun <T : CharacterItem> CharacterItemList(
175177
}
176178
}
177179

178-
ClickableText(text) { offset ->
180+
ClickableText(
181+
text,
182+
style = MaterialTheme.typography.body2.copy(
183+
color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current),
184+
)
185+
) { offset ->
179186
text.getStringAnnotations(SkillTag, offset, offset)
180187
.firstOrNull()
181188
?.let { range ->

0 commit comments

Comments
 (0)