Skip to content

Commit

Permalink
refactor(character): clean up code using reified inline function
Browse files Browse the repository at this point in the history
relates to #7
  • Loading branch information
Patrick Hoefer committed Jan 1, 2021
1 parent 472dc82 commit 09da76e
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 196 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.github.xetra11.ck3workbench.app

import com.github.xetra11.ck3workbench.app.NotificationsService.error
import com.github.xetra11.ck3workbench.app.NotificationsService.warn
import com.github.xetra11.ck3workbench.app.dialog.DialogManager
import com.github.xetra11.ck3workbench.app.project.ProjectManager
Expand All @@ -26,8 +25,6 @@ class AppShutdownService {
projectManager.saveCurrentProject()
}
session.save()
} ?: run {
error("No session was found to be saved")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -254,136 +254,10 @@ class TraitSelection {
}

@Composable
fun DescendantTraits(
inline fun <reified T> Traits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<DescendantTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun DynastyTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<DynastyTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun DiseaseTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<DiseaseTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun HealthTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<HealthTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun ChildhoodTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<ChildhoodTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun CopingTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<CopingTrait>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun CriminalTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<CriminalTrait>().toList().chunked(4)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun CommanderTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<CommanderTrait>().toList().chunked(6)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun LifestyleTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<LifestyleTrait>().toList().chunked(6)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun PersonalityTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<PersonalityTrait>().toList().chunked(6)
) where T : Enum<T>, T : Trait {
val chunks = enumValues<T>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
Expand Down Expand Up @@ -422,32 +296,6 @@ class TraitSelection {
}
}

@Composable
fun PhysicalTraits(selectionState: SnapshotStateMap<Trait, Boolean>) {
val chunks = enumValues<PhysicalTrait>().toList().chunked(3)
chunks.forEach { chunk ->
Row {
chunk.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
fun CongenitalTraits(
selectionState: SnapshotStateMap<Trait, Boolean>
) {
val chunks = enumValues<CongenitalTrait>().toList().chunked(6)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}

@Composable
private fun TraitIcon(
leveledTrait: LeveledTrait,
Expand Down Expand Up @@ -479,7 +327,7 @@ class TraitSelection {
}

@Composable
private fun TraitIcon(
fun TraitIcon(
trait: Trait,
selectionState: SnapshotStateMap<Trait, Boolean>
) {
Expand Down Expand Up @@ -507,7 +355,7 @@ class TraitSelection {
}

@Composable
private fun TraitIconImage(
fun TraitIconImage(
selectionModifier: Modifier,
trait: Trait
) {
Expand All @@ -518,14 +366,14 @@ class TraitSelection {
}

@Composable
private fun TraitLabel(trait: Trait) {
fun TraitLabel(trait: Trait) {
Text(
fontSize = TextUnit.Em(0.7),
text = trait.label
)
}

private fun traitImage(trait: Trait): ImageBitmap {
fun traitImage(trait: Trait): ImageBitmap {
return imageFromResource(iconPath(trait.code))
}

Expand All @@ -534,8 +382,8 @@ class TraitSelection {
return imageFromResource(leveledIconPath(leveledTrait.code, theLevel))
}

private fun iconPath(traitCode: String): String {
return "$traitIconPath/trait_$traitCode.png"
fun iconPath(traitCode: String): String {
return "icons/trait_icons/trait_$traitCode.png"
}

private fun leveledIconPath(traitCode: String, level: Int): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,29 +39,30 @@ import com.github.xetra11.ck3workbench.app.ViewManager.View.CHARACTER_VIEW
import com.github.xetra11.ck3workbench.app.ui.CustomComponents.Spoiler
import com.github.xetra11.ck3workbench.module.character.CK3Character
import com.github.xetra11.ck3workbench.module.character.TraitSelection
import com.github.xetra11.ck3workbench.module.character.TraitSelection.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

@Composable
fun CharacterFactoryView() {
val traitSelection = TraitSelection()

val personalityTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val congenitalTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val physicalTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val lifestyleTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val commanderTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val criminalTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val copingTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val childhoodTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val healthTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val diseaseTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val dynastyTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val descendantTraitSelectionState = remember { mutableStateMapOf<TraitSelection.Trait, Boolean>() }
val personalityTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val congenitalTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val physicalTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val lifestyleTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val commanderTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val criminalTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val copingTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val childhoodTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val healthTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val diseaseTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val dynastyTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }
val descendantTraitSelectionState = remember { mutableStateMapOf<Trait, Boolean>() }

val educationalTraitSelectionState = remember { mutableStateMapOf<TraitSelection.LeveledTrait, Int>() }
val leveledLifestyleTraitSelectionState = remember { mutableStateMapOf<TraitSelection.LeveledTrait, Int>() }
val leveledCongenitalTraitSelectionState = remember { mutableStateMapOf<TraitSelection.LeveledTrait, Int>() }
val educationalTraitSelectionState = remember { mutableStateMapOf<LeveledTrait, Int>() }
val leveledLifestyleTraitSelectionState = remember { mutableStateMapOf<LeveledTrait, Int>() }
val leveledCongenitalTraitSelectionState = remember { mutableStateMapOf<LeveledTrait, Int>() }

Column(
modifier = Modifier.padding(top = 15.dp, bottom = 7.dp).fillMaxSize(),
Expand Down Expand Up @@ -114,46 +115,46 @@ fun CharacterFactoryView() {
Spacer(Modifier.height(20.dp))

TraitSection("Personality Traits") {
traitSelection.PersonalityTraits(personalityTraitSelectionState)
traitSelection.Traits<PersonalityTrait>(personalityTraitSelectionState)
}
TraitSection("Commander Traits") {
traitSelection.CommanderTraits(commanderTraitSelectionState)
traitSelection.Traits<CommanderTrait>(commanderTraitSelectionState)
}
TraitSection("Criminal Traits") {
traitSelection.CriminalTraits(criminalTraitSelectionState)
traitSelection.Traits<CriminalTrait>(criminalTraitSelectionState)
}
TraitSection("Coping Traits") {
traitSelection.CopingTraits(copingTraitSelectionState)
traitSelection.Traits<CopingTrait>(copingTraitSelectionState)
}
TraitSection("Health Traits") {
traitSelection.HealthTraits(healthTraitSelectionState)
traitSelection.Traits<HealthTrait>(healthTraitSelectionState)
}
TraitSection("Dynasty Traits") {
traitSelection.DynastyTraits(dynastyTraitSelectionState)
traitSelection.Traits<DynastyTrait>(dynastyTraitSelectionState)
}
TraitSection("Descendant Traits") {
traitSelection.DescendantTraits(descendantTraitSelectionState)
traitSelection.Traits<DescendantTrait>(descendantTraitSelectionState)
}
TraitSection("Disease Traits") {
traitSelection.DiseaseTraits(diseaseTraitSelectionState)
traitSelection.Traits<DiseaseTrait>(diseaseTraitSelectionState)
}
TraitSection("Childhood Traits") {
traitSelection.ChildhoodTraits(childhoodTraitSelectionState)
traitSelection.Traits<ChildhoodTrait>(childhoodTraitSelectionState)
}
TraitSection("Educational Traits") {
traitSelection.EducationalTraits(educationalTraitSelectionState)
}
TraitSection("Physical Traits") {
traitSelection.PhysicalTraits(physicalTraitSelectionState)
traitSelection.Traits<PhysicalTrait>(physicalTraitSelectionState)
}
TraitSection("Lifestyle Traits") {
traitSelection.LifestyleTraits(lifestyleTraitSelectionState)
traitSelection.Traits<LifestyleTrait>(lifestyleTraitSelectionState)
}
TraitSection("Leveled Lifestyle Traits") {
traitSelection.LeveledLifestyleTraits(leveledLifestyleTraitSelectionState)
}
TraitSection("Congenital Traits") {
traitSelection.CongenitalTraits(congenitalTraitSelectionState)
traitSelection.Traits<CongenitalTrait>(congenitalTraitSelectionState)
}
TraitSection("Leveled Congenital Traits") {
traitSelection.LeveledCongenitalTraits(leveledCongenitalTraitSelectionState)
Expand Down Expand Up @@ -220,7 +221,7 @@ private fun TraitSection(
}

@Composable
private fun CharacterPreview(traitSelectionState: SnapshotStateMap<TraitSelection.Trait, Boolean>) {
private fun CharacterPreview(traitSelectionState: SnapshotStateMap<Trait, Boolean>) {
Text("Character Preview")

Row(Modifier.fillMaxWidth()) {
Expand Down Expand Up @@ -309,8 +310,8 @@ private fun CreateButton(
culture: MutableState<String>,
birth: MutableState<String>,
death: MutableState<String>,
personalityTraitSelectionState: SnapshotStateMap<TraitSelection.Trait, Boolean>,
educationalTraitSelectionState: SnapshotStateMap<TraitSelection.LeveledTrait, Int>
personalityTraitSelectionState: SnapshotStateMap<Trait, Boolean>,
educationalTraitSelectionState: SnapshotStateMap<LeveledTrait, Int>
) {
Button(
onClick = {
Expand Down Expand Up @@ -346,8 +347,8 @@ private fun CreateButton(

private fun createNewCharacter(
characterValues: Map<String, String>,
personalityTraits: Map<TraitSelection.Trait, Boolean>,
educationalTraits: Map<TraitSelection.LeveledTrait, Int>
personalityTraits: Map<Trait, Boolean>,
educationalTraits: Map<LeveledTrait, Int>
) {

val traits = mutableListOf<String>()
Expand Down

0 comments on commit 09da76e

Please sign in to comment.