Esta é uma questão de design ... Tenho certeza de que isso poderia ser mais generalizado, mas estou tendo dificuldades com isso. Estou pensando em design para interações com objetos de jogos - aqui está o meu exemplo (jogo de plataformas em 2D).
Digamos que o jogador esteja tentando progredir em um nível. Existem muitas luzes que podem ser apontadas em direções diferentes. Aqui está um exemplo de como esses objetos de luz podem interagir ...
- Uma luz projeta uma plataforma que permite ao jogador atravessar uma lacuna
- Uma luz diminui os coeficientes de atrito de qualquer coisa que toque, outra aumenta
- Uma luz anula os efeitos de todas as luzes, o que faria a plataforma desaparecer enquanto essa luz estiver acesa e anula os modificadores de atrito
- Etc ...
Qual é a melhor maneira de abordar esse problema ao usar uma arquitetura de componentes? Os componentes para cada objeto principal parecem óbvios, bem como uma maneira limpa de definir seus efeitos no ambiente. Uma classe para "resolver" a interação (parece que isso pode se tornar uma bagunça rapidamente)? Algum uso do padrão decorador para criar objetos combinados para aqueles que estão interagindo em um determinado momento? Uma estrutura de dados que se presta a isso?
Além disso, conectando o áudio a essas interações? Parece que conectar o áudio ao sistema seria como conectar qualquer outra propriedade, como visibilidade ou movimento / colisão do player.
Obviamente, à medida que mais componentes são adicionados, seria bom se houvesse um sistema robusto que pudesse lidar com novos com poucas modificações, mas não estou familiarizado com o modo de projetar isso.
Outras informações: O mecanismo que estou usando é um mecanismo XNA chamado IceCream .