Neste artigo descreverei aproximadamente o padrão ECS e minha implementação no Flame Steel Engine Game Toolkit. O padrão Entity Component System é usado em jogos, incl. no motor Unity. Cada objeto no jogo é uma Essência preenchida com Componentes. Por que isso é necessário se existe POO?
Em seguida, altere as propriedades, comportamento e exibição de objetos diretamente durante a execução do jogo. Essas coisas não são encontradas em aplicativos do mundo real; a dinâmica de alteração de parâmetros, propriedades de objetos, exibição e som é mais característica de jogos do que de software de contabilidade.
Não passamos bananas
Digamos que temos uma classe de banana em nosso jogo. E o designer do jogo queria que as bananas fossem usadas como armas. Digamos que na arquitetura atual as bananas não tenham nada a ver com armas. Fazendo de uma banana uma arma? Fazer todos os itens armas?
A ECS oferece uma solução para este problema premente – Todos os objetos do jogo devem consistir em componentes. Anteriormente banana era a classe Banana, agora faremos ela, e todos os outros objetos, a classe Entity, adicionando componentes a eles. Digamos que uma banana agora consiste nos seguintes componentes:
- Componente de posição (coordenadas no mundo do jogo – x, y, z)
- Componente de rotação (coordenadas x, y, z)
- Componente calórico de uma banana (o personagem principal não deve engordar muito)
- Componente de imagem de banana
Agora estamos adicionando um novo componente para todas as bananas, que é um sinalizador de que elas podem ser usadas como arma – Componente de arma. Agora, quando o sistema do jogo vê que um jogador se aproximou de uma banana, ele verifica a presença de um componente de arma na banana e, se isso acontecer, arma o jogador com uma banana.
No meu jogo Flame Steel Call Of The Death Mask, o padrão ECS é usado por toda parte. Os objetos são compostos de componentes e os próprios componentes podem conter componentes. Em geral, dividir o objeto < – > o componente está faltando na minha implementação, mas isso é até uma vantagem.

A espingarda nesta captura de tela é um componente do jogador e, ao mesmo tempo, a segunda espingarda simplesmente fica pendurada no mapa do jogo como um objeto comum.
Nesta captura de tela, há dois sistemas em execução – renderizador de cena e renderizador de interface. O renderizador de cena funciona com o componente de imagem shotgun no mapa, o renderizador de interface funciona com o componente de imagem shotgun nas mãos do jogador.
Links relacionados:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M