EnTT
3.6.0
|
The entity-component-system (also known as ECS) is an architectural pattern used mostly in game development. For further details:
This project started off as a pure entity-component system. Over time the codebase has grown as more and more classes and functionalities were added.
Here is a brief, yet incomplete list of what it offers today:
constexpr
utility for human readable resource names.Consider this list a work in progress as well as the project. The whole API is fully documented in-code for those who are brave enough to read it.
It is also known that EnTT
(version 3) is used in Minecraft.
Given that the game is available literally everywhere, I can confidently say that the library has been sufficiently tested on every platform that can come to mind.
I started developing EnTT
for the wrong reason: my goal was to design an entity-component system to beat another well known open source solution both in terms of performance and possibly memory usage.
In the end, I did it, but it wasn't very satisfying. Actually it wasn't satisfying at all. The fastest and nothing more, fairly little indeed. When I realized it, I tried hard to keep intact the great performance of EnTT
and to add all the features I wanted to see in my own library at the same time.
Nowadays, EnTT
is finally what I was looking for: still faster than its competitors, lower memory usage in the average case, a really good API and an amazing set of features. And even more, of course.
The proposed entity-component system is incredibly fast to iterate entities and components, this is a fact. Some compilers make a lot of optimizations because of how EnTT
works, some others aren't that good. In general, if we consider real world cases, EnTT
is somewhere between a bit and much faster than many of the other solutions around, although I couldn't check them all for obvious reasons.
If you are interested, you can compile the benchmark
test in release mode (to enable compiler optimizations, otherwise it would make little sense) by setting the ENTT_BUILD_BENCHMARK
option of CMake
to ON
, then evaluate yourself whether you're satisfied with the results or not.
Honestly I got tired of updating the README file whenever there is an improvement.
There are already a lot of projects out there that use EnTT
as a basis for comparison (this should already tell you a lot). Many of these benchmarks are completely wrong, many others are simply incomplete, good at omitting some information and using the wrong function to compare a given feature. Certainly there are also good ones but they age quickly if nobody updates them, especially when the library they are dealing with is actively developed.
The choice to use EnTT
should be based on its carefully designed API, its set of features and the general performance, not because some single benchmark shows it to be the fastest tool available.
In the future I'll likely try to get even better performance while still adding new features, mainly for fun.
If you want to contribute and/or have suggestions, feel free to make a PR or open an issue to discuss your idea.
To be able to use EnTT
, users must provide a full-featured compiler that supports at least C++17.
The requirements below are mandatory to compile the tests and to extract the documentation:
CMake
version 3.7 or later.Doxygen
version 1.8 or later.Alternatively, Bazel is also supported as a build system (credits to zaucy who offered to maintain it).
In the documentation below I'll still refer to CMake
, this being the official build system of the library.
If you are looking for a C++14 version of EnTT
, check out the git tag cpp14
.
EnTT
is a header-only library. This means that including the entt.hpp
header is enough to include the library as a whole and use it. For those who are interested only in the entity-component system, consider to include the sole entity/registry.hpp
header instead.
It's a matter of adding the following line to the top of a file:
Use the line below to include only the entity-component system instead:
Then pass the proper -I
argument to the compiler to add the src
directory to the include paths.
The documentation is based on doxygen. To build it:
$ cd build $ cmake .. -DENTT_BUILD_DOCS=ON $ make
The API reference will be created in HTML format within the directory build/docs/html
. To navigate it with your favorite browser:
$ cd build $ your_favorite_browser docs/html/index.html
To compile and run the tests, EnTT
requires googletest.
cmake
will download and compile the library before compiling anything else. In order to build the tests, set the CMake option ENTT_BUILD_TESTING
to ON
.
To build the most basic set of tests:
$ cd build
$ cmake -DENTT_BUILD_TESTING=ON ..
$ make
$ make test
Note that benchmarks are not part of this set.
EnTT
is available for some of the most known packaging tools. In particular:
Conan
, the C/C++ Package Manager for Developers.vcpkg
, Microsoft VC++ Packaging Tool.EnTT
in just a few simple steps:The EnTT
port in vcpkg
is kept up to date by Microsoft team members and community contributors.
If the version is out of date, please create an issue or pull request on the vcpkg
repository.
Homebrew
, the missing package manager for macOS.build2
, build toolchain for developing and packaging C and C++ code.entt
package in a build2
project, add the following line or a similar one to the manifest
file:Also check that the configuration refers to a valid repository, so that the package can be found by build2
:
cppget.org
, the open-source community central repository, accessible as https://pkg.cppget.org/1/stable
.https://github.com/build2-packaging/entt.git
or ssh://git@github.com/build2-packaging/entt.git
. Feel free to report issues with this package.Both can be used with bpkg add-repo
or added in a project repositories.manifest
. See the official documentation for more details.
Consider this list a work in progress and help me to make it longer.
Code and documentation Copyright (c) 2017-2021 Michele Caini.
Colorful logo Copyright (c) 2018-2021 Richard Caseres.
Code released under the MIT license.
Documentation released under CC BY 4.0.
All logos released under CC BY-SA 4.0.