EnTTtem sido um sonho até agora, não encontramos um único bug até hoje e é super fácil de trabalhar com- Todo usuário da ENTT de todos os tempos
EnTT é uma biblioteca apenas para cabeçalho, pequena e fácil de usar para programação de jogos e muito mais escrita no C ++ moderno .
Entre outros, é usado no Minecraft por Mojang, os SDKs do ArcGIS Runtime de Esri e o incrível Ragdoll .
Se você não vir seu projeto na lista, abra um problema, envie um PR ou adicione a tag #ENTT aos seus tópicos ! ?
Deseja acompanhar as alterações ou tem uma pergunta que não exige que você abra um problema?
Participe do canal Gitter e do Discord Server, conheça outros usuários como você. Quanto mais somos, melhor para todos.
Não se esqueça de verificar as perguntas frequentes e o wiki também. Suas respostas já podem estar lá.
Você quer apoiar EnTT ? Considere se tornar um patrocinador ou fazer uma doação via PayPal .
Muito obrigado a essas pessoas e agradecimentos especiais a:


O sistema de entidade-componente (também conhecido como ECS ) é um padrão arquitetônico usado principalmente no desenvolvimento de jogos. Para mais detalhes:
Este projeto começou como um sistema de componente de entidade pura. Com o tempo, a base de código cresceu à medida que mais e mais classes e funcionalidades foram adicionadas.
Aqui está uma lista breve, mas incompleta do que oferece hoje:
constexpr para nomes de recursos legíveis por humanos. Considere esta lista um trabalho em andamento, bem como o projeto. Toda a API está totalmente documentada no código para aqueles que são corajosos o suficiente para lê-la.
Por favor, observe que todas as ferramentas também são amigáveis à DLL agora e corra sem problemas através dos limites.
Uma coisa conhecida pela maioria é que EnTT também é usada no Minecraft .
Dado que o jogo está disponível literalmente em toda parte, posso dizer com confiança que a biblioteca foi suficientemente testada em todas as plataformas que podem vir à mente.
# include < entt/entt.hpp >
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update (entt::registry ®istry) {
auto view = registry. view < const position, velocity>();
// use a callback
view. each ([]( const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view. each ([]( const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for ( auto [entity, pos, vel]: view. each ()) {
// ...
}
// use forward iterators and get only the components of interest
for ( auto entity: view) {
auto &vel = view. get <velocity>(entity);
// ...
}
}
int main () {
entt::registry registry;
for ( auto i = 0u ; i < 10u ; ++i) {
const auto entity = registry. create ();
registry. emplace <position>(entity, i * 1 . f , i * 1 . f );
if (i % 2 == 0 ) { registry. emplace <velocity>(entity, i * . 1f , i * . 1f ); }
}
update (registry);
} Comecei a desenvolver EnTT pelo motivo errado : meu objetivo era projetar um sistema de entidade-componente para vencer outra biblioteca de código aberto bem conhecido, tanto em termos de desempenho quanto de uso da memória.
No final, eu fiz isso, mas não foi muito satisfatório. Na verdade, não foi satisfatório. O mais rápido e nada mais, bastante pouco. Quando percebi, tentei manter intacto o excelente desempenho da EnTT e adicionar todos os recursos que queria ver em minha própria biblioteca ao mesmo tempo.
Atualmente, EnTT é finalmente o que eu estava procurando: ainda mais rápido que seus concorrentes , menor uso da memória no caso médio, uma API realmente boa e um incrível conjunto de recursos. E ainda mais, é claro.
Pelo que vale a pena, você nunca me verá tentando fazer com que outros projetos pareçam ruins ou ofereçam comparações duvidosas apenas para fazer com que essa biblioteca pareça mais legal.
Deixo essa atividade para outros, se eles gostam (e parece que algumas pessoas realmente gostam). Prefiro fazer melhor uso do meu tempo.
Se você estiver interessado, poderá compilar o teste benchmark no modo de liberação (para ativar otimizações do compilador, caso contrário, faria pouco sentido) definindo a opção de CMake ON ENTT_BUILD_BENCHMARK e avaliar se está satisfeito com os resultados ou não.
Também existem muitos projetos por aí que usam EnTT como base para comparação (isso já deve dizer muito). Muitos desses benchmarks estão completamente errados, muitos outros são simplesmente incompletos, bons em omitir algumas informações e usar a função errada para comparar um determinado recurso. Certamente, também existem bons, mas eles envelhecem rapidamente se ninguém os atualizar, especialmente quando a biblioteca com a qual estão lidando é desenvolvida ativamente.
De todos eles, esse parece o projeto mais atualizado e também abrange um certo número de bibliotecas. Não posso dizer exatamente se EnTT é usado corretamente ou não. No entanto, mesmo se usada mal, ele ainda deve dar ao leitor uma idéia de onde vai operar.
EnTT é uma biblioteca somente para cabeçalho. Isso significa que incluir o cabeçalho entt.hpp é suficiente para incluir a biblioteca como um todo e usá -lo. Para aqueles que estão interessados apenas no sistema de componentes de entidade, considere incluir a única entity/registry.hpp cabeçalho.
É uma questão de adicionar a seguinte linha ao topo de um arquivo:
# include < entt/entt.hpp >Use a linha abaixo para incluir apenas o sistema de componentes de entidade:
# include < entt/entity/registry.hpp > Em seguida, passe o argumento -I adequado ao compilador para adicionar o diretório src aos caminhos de inclusão.
Para poder usar EnTT , os usuários devem fornecer um compilador completo que suporta pelo menos C ++ 17.
Os requisitos abaixo são obrigatórios para compilar os testes e extrair a documentação:
CMake versão 3.7 ou posterior.Doxygen versão 1.8 ou posterior. Como alternativa, o Bazel também é apoiado como um sistema de construção (créditos para Zaucy que se ofereceram para mantê -lo).
Na documentação abaixo, ainda vou me referir ao CMake , sendo este o sistema oficial de construção da biblioteca.
Para usar EnTT de um projeto CMake , basta vincular um alvo existente ao alias EnTT::EnTT .
A biblioteca oferece tudo o que você precisa para localizar (como em find_package ), incorporar (como em add_subdirectory ), buscar (como no FetchContent ) ou usá -lo de muitas das maneiras que você consegue pensar e que envolve CMake .
Cobrir todos os casos possíveis exigiria um tratado e não um arquivo de leitura simples, mas estou confiante de que qualquer pessoa que esteja lendo esta seção também saiba do que se trata e pode usar EnTT de um projeto CMake sem problemas.
Ao usar CMake , basta ativar a opção ENTT_INCLUDE_NATVIS e aproveite.
Caso contrário, a maioria das ferramentas é abordada via Natvis e todos os arquivos podem ser encontrados no diretório natvis , dividido pelo módulo.
Se você identificar erros ou ter sugestões, qualquer contribuição é bem -vinda!
EnTT está disponível para algumas das ferramentas de embalagem mais conhecidas. Em particular:
Conan , o gerenciador de pacotes C/C ++ para desenvolvedores.
vcpkg , ferramenta de embalagem Microsoft VC ++.
Você pode baixar e instalar EnTT em apenas algumas etapas simples:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
Ou você pode usar o recurso experimental para testar as últimas alterações:
vcpkg install entt[experimental] --head
A porta EnTT no vcpkg é mantida atualizada pelos membros da equipe da Microsoft e pelos colaboradores da comunidade.
Se a versão estiver desatualizada, crie uma solicitação de problema ou puxe no repositório vcpkg .
Homebrew , o gerenciador de pacotes ausentes para o MacOS.
Disponível como uma fórmula homebrew. Basta digitar o seguinte para instalá -lo:
brew install skypjack/entt/entt
build2 , construa a cadeia de ferramentas para o desenvolvimento e embalagem do código C e C ++.
Para usar o pacote entt em um projeto build2 , adicione a seguinte linha ou uma semelhante ao arquivo manifest :
depends: entt ^3.0.0
Verifique também se a configuração se refere a um repositório válido, para que o pacote possa ser encontrado pelo build2 :
cppget.org , o repositório central da comunidade de código aberto, acessível como https://pkg.cppget.org/1/stable .
Repositório de origem do pacote: acessível como https://github.com/build2-packaging/entt.git ou ssh://[email protected]/build2-packaging/entt.git . Sinta -se à vontade para relatar problemas com este pacote.
Ambos podem ser usados com bpkg add-repo ou adicionados em um projeto repositories.manifest . Veja a documentação oficial para obter mais detalhes.
bzlmod , sistema de gerenciamento de dependência externa da Bazel.
Para usar o módulo entt em um projeto bazel , adicione o seguinte ao seu MODULE.bazel arquivo:
bazel_dep ( name = "entt" , version = "3.12.2" ) O ENTT agora estará disponível como @entt (abreviação de @entt//:entt ) a ser usado nos seus deps cc_* regra.
Considere esta lista um trabalho em andamento e ajude -me a demorar mais, se quiser.
EnTT também suporta pkg-config (para algumas definições de suporte , pelo menos). Um arquivo adequado chamado entt.pc é gerado e instalado em um diretório adequado ao executar CMake .
Isso também deve facilitar o uso de ferramentas como Meson ou similar.
A documentação é baseada em doxygen. Para construir:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
A referência da API é criada no formato HTML no diretório build/docs/html . Para navegar com seu navegador favorito:
$ cd build
$ your_favorite_browser docs/html/index.html
A mesma versão também está disponível online para o lançamento mais recente, que é a última tag estável.
Além disso, existe um wiki dedicado ao projeto em que os usuários podem encontrar todas as páginas de documentação relacionadas.
Para compilar e executar os testes, EnTT requer GoogleTest .
cmake Downloads e compila a biblioteca antes de compilar qualquer outra coisa. Para criar os testes, defina a opção CMake ENTT_BUILD_TESTING como ON .
Para construir o conjunto mais básico de testes:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testObserve que os benchmarks não fazem parte desse conjunto.
EnTT é amplamente utilizado em aplicações privadas e comerciais. Não posso nem mencionar a maioria deles por causa de algumas assinaturas que coloquei em alguns documentos tempo atrás. Felizmente, também há pessoas que dedicaram um tempo para implementar projetos de código aberto com base no EnTT e não se conteverem quando se tratava de documentá -los.
Aqui você pode encontrar uma lista incompleta de jogos, aplicativos e artigos que podem ser usados como referência.
Se você conhece outros recursos por aí que são sobre EnTT , sinta -se à vontade para abrir um problema ou um PR e ficarei feliz em adicioná -los à lista.
Os pedidos de recursos, PRs, sugestões e feedback são muito apreciados.
Se você achar que pode ajudar e querer contribuir para o projeto com sua experiência ou deseja fazer parte do projeto por algum outro motivo, não hesite em entrar em contato comigo diretamente (você pode encontrar o e -mail no perfil).
Não posso prometer que toda e qualquer contribuição será aceita, mas posso garantir que farei o possível para levá -los o mais rápido possível.
Se você decidir participar, consulte as diretrizes para contribuir antes para criar problemas ou fazer solicitações.
Dê uma olhada também na lista dos colaboradores para saber quem participou até agora.
Código e documentação Copyright (c) 2017-2024 Michele Caini.
Logo Colorido Copyright (c) 2018-2021 Richard Caseres.
Código liberado sob a licença do MIT.
Documentação lançada no CC por 4.0.
Todos os logotipos lançados no CC BY-SA 4.0.