Closed manueldidonna closed 4 years ago
interface Pokemon { val form: Form? sealed class Form { /** * Accepted values for [letter] are A-Z, !, ?. * [letter] is case-insensitive. */ data class Unown(val letter: String) : Form() /** * Giratina has 2 forms: altered and origin */ data class Giratina(val isAltered: Boolean): Form() } } fun getAllowedFormNames(pokemon: Pokemon): List<String> { return when(pokemon.form) { is Pokemon.Form.Unown -> listOf("A", "B", "C", ...) is Pokemon.Form.Giratina -> listOf("Altered", "Origin") else -> emptyList() } } fun setForm(pokemon: MutablePokemon, formName: String) { if(formName.isEmpty) return val currentForm = pokemon.form ?: return val newForm = when(currentForm) { is Pokemon.Form.Unown -> currentForm.copy(letter = formName) is Pokemon.Form.Giratina -> currentForm.copy(isAltered = formName == "Altered") } pokemon.mutator.form(newForm) }