ECS de ida y vuelta

Hola Habr! Les presento la traducción del artículo "ECS de ida y vuelta - Parte 1 - Introducción" de Michele skypjack Caini .


ECS de ida y vuelta


Parte 1 - Introducción.


Cuando supe por primera vez sobre el sistema de componentes de entidad de entidad de plantilla arquitectónica, fui a buscar más información al respecto en Internet. Pero, desafortunadamente, entonces no se arrojó suficiente luz sobre este tema, y ​​no hubo recursos donde se describieran diferentes enfoques con sus pros y sus contras. Casi todos los artículos, publicaciones y comentarios (una proporción significativa de ellos) se referían a una implementación específica y solo se referían ligeramente a otros ejemplos.


En esta publicación, intentaré ponerte al día y descubrir algunos modelos introductorios para ti, dando algunos consejos para que puedas hacer tu propio ECS.


¿Por qué debería usar ECS?


Trate de no dejarse engañar por lo que dicen a su alrededor. Si está trabajando en proyectos AAA a un nivel serio, la razón principal por la que debe usar una herramienta tan seria es la organización del código, y no (solo) el rendimiento. Por supuesto, el rendimiento no es lo último, pero una base de código bien organizada no tiene precio, y con la mayoría de los juegos no tendrás problemas de rendimiento, ya sea que se escriban utilizando el paradigma OPP o con otra implementación opcional de la plantilla del componente.


En esencia, la programación orientada a componentes es una herramienta extremadamente poderosa que le permite hacer que el código sea fácilmente extensible y acelerar el ciclo de desarrollo. Sin lugar a dudas, todo esto debería ser su objetivo principal.


, . , , .



, .


, . () . , , , , . : .
, . , , , .


, , , . , , .


?


( ), update . , , , .


, . . , , . , .


, , - .


ECS back and forth


ECS.


, , .
«Game Programing Patterns». -.


, ECS , .


, , .



- . , , . , . , .


– . .


. , — . , .


, , , , -. - , , . , - . , , , - .


family generator. , . , : entityx and EnTT.


family generator.


class family {
    static std::size_t identifier() noexcept {
        static std::size_t value = 0;
        return value++;
    } 

public:
    template<typename>
    static std::size_t type() noexcept {
        static const std::size_t value = identifier();
        return value;
    }
};

:


const auto id = family::type<my_type>();

. . , , .


family generator . , , , .


:


- ( ) . – ECS, , , - .


, , - , .


?


, , . , , . bitset .


, , . family generator , . .


, — . , , , . :


void my_nth_system(std::vector<game_objects> &objects) {
    for(auto &&object: objects) {
        if(object.has<position, velocity>()) {
            auto &pos = object.get<position>();
            auto &vel = object.get<velocity>();

            // ...
        }
    }
}

, : , . , , .


. , . , : , , .


. , , , . , , , , , . , . , , .


, – . ? . , . , ? , - , .


: —


– .


. , . . , . .


, , - , — :). , . 0, – 1, . , , 0, 1.


? , , , 0 0, 1 1, . , N M , .


. , , . , . - , entityx, ECS C++.


bitset . . , C N > 0. C , N . C 0, . ? Bitsets – .


, , , bitsets .


, , . , , , , , -, . , : - - , , . , , , , , . bitset , .


?


, . , , , , , .


, . , , , , .


,


, , .


, , GitHub , . , .


.


All Articles