0
respostas

Dúvida sobre utilização de atributos de uma classe por uma função em outra

Olá,

Estava treinando para ver se conseguia criar algo com o que aprendi até agora, o intuito foi gerar um sistema de RPG que possui "stats", "modificadores de stats" entre outras funções, entretanto, o arquivo STATS que gerei possuía diversas variáveis e parecia não ser uma boa prática, não sei a forma correta de organizar o código, resolvi então criar uma classe diferente separando os atributos (com todas as informações de "STATS" no mesmo arquivos as coisas funcionavam), porém, não consegui pensar como poderiautilizar um atributo de uma classe como parte da operação em outra.


abstract class Creature(
    val name: String,  // existem mais variáveis, mas vou deixar apenas uma para demonstrar como estou estruturando.
)

Criei a classe criatura para ter uma abstração maior e conseguir distinguir futuramente entre Personagens e Monstros.

class Character(
    name: String
) : Creature(
        name = name
    ){
    val stats: Stats = Stats()
    val statsModifier: StatsModifier = StatsModifier()
}

Caso eu não esteja enganado STATS e STATS MODIFIER são instanciados assim que o Personagem é criado, recebendo assim os atributos, é isso mesmo?

class Stats {

    var strength: Int = 0
        private set

    fun addSubStats(value: Int, stats: Int) = when (stats) {
        strength -> this.strength += value
    }
}

Separei desta forma:

class StatsModifier {

    var strengthModifier: Int = 0
        private set

    fun statsModifier(value: Int): Int {
        return Math.floorDiv((value - 10), 2)
    }

    fun refreshStatsModifier() {
        this.strengthModifier = statsModifier(**????????**)

A minha dúvida é quanto a como vou estruturar a função refreshStatsModifier() , ela é necessário para que toda a vez que haja uma alteração nos atributos "stats" a conta seja refeita, a função funcionava da seguinte forma antes da separação dos arquivos.

fun refreshStatsModifier() {
        this.strengthModifier = statsModifier(strength)

A primeiro momento achei que fosse possível fazer a seguinte modificação:

fun refreshStatsModifier() {
        this.strengthModifier = statsModifier(Character().stats.strength)

Acredito que não funcionará porque não tenho relação entre os objetos.

Poderiam esclarecer por gentileza, manter STATS e STATS MODIFIER no mesmo arquivo, é uma boa prática? Caso não seja, como eu poderia solucionar isto?

Muito obrigado.