manueldidonna / pokemon-save-editor-android

A work-in-progress pokémon save editor for Android
GNU General Public License v3.0
0 stars 0 forks source link

Support pokemon with multiple forms #7

Closed manueldidonna closed 4 years ago

manueldidonna commented 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)
}