Skip to content

Commit c4ec5e8

Browse files
committed
Replace current/max stats with base/advances characteritistcs
1 parent 4d6dcbe commit c4ec5e8

File tree

12 files changed

+73
-58
lines changed

12 files changed

+73
-58
lines changed

app/src/main/java/cz/muni/fi/rpg/model/domain/character/Character.kt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cz.muni.fi.rpg.model.domain.character
22

3+
import com.fasterxml.jackson.annotation.JsonAlias
34
import cz.muni.fi.rpg.model.domain.common.Ambitions
45
import cz.muni.fi.rpg.model.domain.common.Money
56
import java.lang.IllegalArgumentException
@@ -12,8 +13,9 @@ data class Character(
1213
private var psychology: String,
1314
private var motivation: String,
1415
private var race: Race,
15-
private var stats: Stats,
16-
private var maxStats: Stats,
16+
@JsonAlias("stats") // TODO: Remove alias in 1.10
17+
private var characteristicsBase: Stats,
18+
private var characteristicsAdvances: Stats = Stats(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
1719
private var points: Points,
1820
private var ambitions: Ambitions = Ambitions("", ""),
1921
private var mutation: String = "",
@@ -48,8 +50,8 @@ data class Character(
4850
career: String,
4951
socialClass: String,
5052
race: Race,
51-
stats: Stats,
52-
maxStats: Stats,
53+
characteristicsBase: Stats,
54+
characteristicsAdvances: Stats,
5355
maxWounds: Int,
5456
psychology: String,
5557
motivation: String,
@@ -60,7 +62,6 @@ data class Character(
6062
require(name.length <= NAME_MAX_LENGTH) { "Character name is too long" }
6163
require(career.length <= CAREER_MAX_LENGTH) { "Career is too long" }
6264
require(socialClass.length <= SOCIAL_CLASS_MAX_LENGTH) { "Social class is too long" }
63-
require(stats.allLowerOrEqualTo(maxStats)) { "Stats cannot be larger than max stats" }
6465
require(psychology.length <= PSYCHOLOGY_MAX_LENGTH) { "Psychology is too long" }
6566
require(motivation.length <= MOTIVATION_MAX_LENGTH) { "Motivation is too long" }
6667
require(note.length <= NOTE_MAX_LENGTH) { "Note is too long" }
@@ -70,9 +71,9 @@ data class Character(
7071
this.career = career
7172
this.socialClass = socialClass
7273
this.race = race
73-
this.stats = stats
74-
this.maxStats = maxStats
75-
points = points.withMaxWounds(maxWounds, if (hardyTalent) stats.getToughnessBonus() else 0)
74+
this.characteristicsBase = characteristicsBase
75+
this.characteristicsAdvances = characteristicsAdvances
76+
points = points.withMaxWounds(maxWounds, if (hardyTalent) getCharacteristics().getToughnessBonus() else 0)
7677
this.psychology = psychology
7778
this.motivation = motivation
7879
this.note = note
@@ -107,15 +108,16 @@ data class Character(
107108
fun updatePoints(newPoints: Points) {
108109
require(
109110
(!hardyTalent && newPoints.hardyWoundsBonus == 0) ||
110-
(hardyTalent && newPoints.hardyWoundsBonus == stats.getToughnessBonus())
111+
(hardyTalent && newPoints.hardyWoundsBonus == getCharacteristics().getToughnessBonus())
111112
) { "Hardy talent and wounds bonus are wrong" }
112113
points = newPoints
113114
}
114115

115116
fun getPoints(): Points = points
116117

117-
fun getStats(): Stats = stats
118-
fun getMaxStats(): Stats = maxStats
118+
fun getCharacteristics(): Stats = characteristicsBase + characteristicsAdvances
119+
fun getCharacteristicsBase() = characteristicsBase
120+
fun getCharacteristicsAdvances() = characteristicsAdvances
119121

120122
fun updateAmbitions(ambitions: Ambitions) {
121123
this.ambitions = ambitions

app/src/main/java/cz/muni/fi/rpg/model/domain/character/Stats.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,22 @@ data class Stats(
2525
intelligence,
2626
willPower,
2727
fellowship
28-
).all { it in 0..100 }
28+
).all { it >= 0 }
2929
)
3030
}
3131

32-
fun allLowerOrEqualTo(other: Stats): Boolean {
33-
return weaponSkill <= other.weaponSkill
34-
&& dexterity <= other.dexterity
35-
&& ballisticSkill <= other.ballisticSkill
36-
&& strength <= other.strength
37-
&& toughness <= other.toughness
38-
&& agility <= other.agility
39-
&& intelligence <= other.intelligence
40-
&& initiative <= other.initiative
41-
&& willPower <= other.willPower
42-
&& fellowship <= other.fellowship
43-
}
32+
operator fun plus(other: Stats) = Stats(
33+
weaponSkill = weaponSkill + other.weaponSkill,
34+
dexterity = dexterity + other.dexterity,
35+
ballisticSkill = ballisticSkill + other.ballisticSkill,
36+
strength = strength + other.strength,
37+
toughness = toughness + other.toughness,
38+
agility = agility + other.agility,
39+
intelligence = intelligence + other.intelligence,
40+
initiative = initiative + other.initiative,
41+
willPower = willPower + other.willPower,
42+
fellowship = fellowship + other.fellowship
43+
)
4444

4545
fun getToughnessBonus() = toughness / 10
4646
}

app/src/main/java/cz/muni/fi/rpg/ui/character/CharacterStatsFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.lifecycle.observe
99
import cz.muni.fi.rpg.R
1010
import cz.muni.fi.rpg.model.domain.character.CharacterId
1111
import cz.muni.fi.rpg.model.domain.character.Points
12+
import cz.muni.fi.rpg.model.map
1213
import cz.muni.fi.rpg.model.right
1314
import cz.muni.fi.rpg.ui.common.parcelableArgument
1415
import cz.muni.fi.rpg.ui.views.CharacterPoint
@@ -40,7 +41,9 @@ class CharacterStatsFragment : Fragment(R.layout.fragment_character_stats),
4041
}
4142

4243
private fun bindStats() {
43-
Transformations.map(viewModel.character.right()) { character -> character.getStats() }
44+
viewModel.character
45+
.right()
46+
.map { character -> character.getCharacteristics() }
4447
.observe(viewLifecycleOwner) { statsTable.setValue(it) }
4548
}
4649

app/src/main/java/cz/muni/fi/rpg/ui/character/edit/CharacterEditFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class CharacterEditFragment(
106106

107107
private suspend fun updateCharacter(
108108
info: CharacterInfoFormFragment.Data,
109-
statsData: CharacterStatsFormFragment.Data,
109+
statsData: CharacterStatsFormFragment.CharacteristicsData,
110110
maxWounds: Int,
111111
hardyTalent: Boolean
112112
) {
@@ -117,8 +117,8 @@ class CharacterEditFragment(
117117
career = info.career,
118118
socialClass = info.socialClass,
119119
race = info.race,
120-
stats = statsData.stats,
121-
maxStats = statsData.maxStats,
120+
characteristicsBase = statsData.base,
121+
characteristicsAdvances = statsData.advances,
122122
maxWounds = maxWounds,
123123
psychology = info.psychology,
124124
motivation = info.motivation,

app/src/main/java/cz/muni/fi/rpg/ui/character/skills/CharacterSkillsFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class CharacterSkillsFragment : Fragment(R.layout.fragment_character_skills),
5353
CombinedLiveData(viewModel.skills, characterVm.character.right())
5454
.observe(viewLifecycleOwner) { pair ->
5555
val skills = pair.first
56-
val stats = pair.second.getStats()
56+
val stats = pair.second.getCharacteristics()
5757

5858
adapter.submitList(
5959
skills

app/src/main/java/cz/muni/fi/rpg/ui/characterCreation/CharacterCreationFragment.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class CharacterCreationFragment(
4646
private var currentFragmentIndex = 0
4747

4848
private var characterInfo: CharacterInfoFormFragment.Data? = null
49-
private var characterStatsData: CharacterStatsFormFragment.Data? = null
49+
private var characterStatsData: CharacterStatsFormFragment.CharacteristicsData? = null
5050

5151
override fun onStart() {
5252
super.onStart()
@@ -139,7 +139,7 @@ class CharacterCreationFragment(
139139

140140
private fun saveCharacter(
141141
info: CharacterInfoFormFragment.Data,
142-
statsData: CharacterStatsFormFragment.Data,
142+
statsData: CharacterStatsFormFragment.CharacteristicsData,
143143
points: Points
144144
) {
145145
launch {
@@ -153,8 +153,8 @@ class CharacterCreationFragment(
153153
career = info.career,
154154
socialClass = info.socialClass,
155155
race = info.race,
156-
stats = statsData.stats,
157-
maxStats = statsData.maxStats,
156+
characteristicsBase = statsData.base,
157+
characteristicsAdvances = statsData.advances,
158158
points = points,
159159
psychology = info.psychology,
160160
motivation = info.motivation,

app/src/main/java/cz/muni/fi/rpg/ui/characterCreation/CharacterStatsFormFragment.kt

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import cz.muni.fi.rpg.ui.common.forms.Form
99
import kotlinx.android.synthetic.main.fragment_character_stats_form.*
1010

1111
class CharacterStatsFormFragment :
12-
CharacterFormStep<CharacterStatsFormFragment.Data>(R.layout.fragment_character_stats_form) {
12+
CharacterFormStep<CharacterStatsFormFragment.CharacteristicsData>(R.layout.fragment_character_stats_form) {
1313

14-
data class Data(
15-
val stats: Stats,
16-
val maxStats: Stats
14+
data class CharacteristicsData(
15+
val base: Stats,
16+
val advances: Stats
1717
)
1818

1919
var character: Character? = null
@@ -53,24 +53,19 @@ class CharacterStatsFormFragment :
5353
setShowErrorInEditText()
5454
addLiveRule(R.string.error_required) { !it.isNullOrBlank() }
5555
addLiveRule(R.string.error_value_over_100) { it.toString().toInt() <= 100 }
56-
addLiveRule(R.string.error_value_over_max) {
57-
val maxValue = entry.value.getValue().toIntOrNull()
58-
59-
maxValue == null || it.toString().toInt() <= maxValue
60-
}
6156
}
6257
}
6358

6459
setDefaultValues()
6560
}
6661

67-
override fun submit(): Data? {
62+
override fun submit(): CharacteristicsData? {
6863
if (!form.validate()) {
6964
return null
7065
}
7166

72-
return Data(
73-
stats = Stats(
67+
return CharacteristicsData(
68+
base = Stats(
7469
agility = agilityInput.getValue().toInt(),
7570
ballisticSkill = ballisticSkillInput.getValue().toInt(),
7671
dexterity = dexterityInput.getValue().toInt(),
@@ -82,7 +77,7 @@ class CharacterStatsFormFragment :
8277
weaponSkill = weaponSkillInput.getValue().toInt(),
8378
willPower = willPowerInput.getValue().toInt()
8479
),
85-
maxStats = Stats(
80+
advances = Stats(
8681
agility = maxAgilityInput.getValue().toInt(),
8782
ballisticSkill = maxBallisticSkillInput.getValue().toInt(),
8883
dexterity = maxDexterityInput.getValue().toInt(),
@@ -122,8 +117,8 @@ class CharacterStatsFormFragment :
122117
val currentInput = entry.key.first
123118
val maxInput = entry.key.second
124119

125-
currentInput.setDefaultValue(entry.value(character.getStats()).toString(), force = true)
126-
maxInput.setDefaultValue(entry.value(character.getMaxStats()).toString(), force = true)
120+
currentInput.setDefaultValue(entry.value(character.getCharacteristicsBase()).toString(), force = true)
121+
maxInput.setDefaultValue(entry.value(character.getCharacteristicsAdvances()).toString(), force = true)
127122
}
128123
}
129124
}

app/src/main/res/layout/fragment_character_stats_form.xml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,17 @@
1010

1111
<TextView
1212
android:id="@+id/currentLabel"
13-
style="@style/InputLabel"
1413
android:layout_width="wrap_content"
1514
android:layout_height="wrap_content"
16-
android:text="@string/label_current"
15+
android:text="@string/label_base"
1716
app:layout_constraintEnd_toEndOf="@id/weaponSkillInput"
1817
app:layout_constraintStart_toStartOf="@id/weaponSkillInput"
1918
app:layout_constraintTop_toTopOf="parent" />
2019

2120
<TextView
22-
style="@style/InputLabel"
2321
android:layout_width="wrap_content"
2422
android:layout_height="wrap_content"
25-
android:text="@string/label_max"
23+
android:text="@string/label_advances"
2624
app:layout_constraintEnd_toEndOf="@id/maxWeaponSkillInput"
2725
app:layout_constraintStart_toStartOf="@id/maxWeaponSkillInput"
2826
app:layout_constraintTop_toTopOf="parent" />

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@
183183
<string name="title_misc">Misc</string>
184184
<string name="spell_casting_number_shortcut">CN</string>
185185
<string name="title_character_creation_points">Point pools</string>
186-
<string name="label_current">Current</string>
187-
<string name="label_max">Max</string>
186+
<string name="label_base">Base</string>
187+
<string name="label_advances">Advances</string>
188188
<string name="label_checkbox_single_player">Create Single-Player Party</string>
189189

190190
<string name="description_character_point_down">Decrease points amount by 1</string>

app/src/test/java/cz/muni/fi/rpg/model/domain/character/CharacterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class CharacterTest {
2525
getCareer(),
2626
getSocialClass(),
2727
Race.DWARF,
28-
getStats(),
29-
getMaxStats(),
28+
getCharacteristicsBase(),
29+
getCharacteristicsAdvances(),
3030
getPoints().maxWounds,
3131
getPsychology(),
3232
getMotivation(),

0 commit comments

Comments
 (0)