diff --git a/examples/entt/CMakeLists.txt b/examples/entt/CMakeLists.txt new file mode 100644 index 0000000..5a8f719 --- /dev/null +++ b/examples/entt/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.14 FATAL_ERROR) + +# ---- Dependencies ---- + +include(../../cmake/CPM.cmake) + +CPMAddPackage( + NAME EnTT + VERSION 3.1.1 + GITHUB_REPOSITORY skypjack/entt + # EnTT's CMakeLists screws with configuration options + DOWNLOAD_ONLY True +) + +if (EnTT_ADDED) + add_library(EnTT INTERFACE) + target_include_directories(EnTT INTERFACE ${EnTT_SOURCE_DIR}/src) +endif() + +# ---- Executable ---- + +add_executable(CPMEnTTExample "main.cpp") +set_target_properties(CPMEnTTExample PROPERTIES CXX_STANDARD 17) +target_link_libraries(CPMEnTTExample EnTT) diff --git a/examples/entt/main.cpp b/examples/entt/main.cpp new file mode 100644 index 0000000..d3edf6a --- /dev/null +++ b/examples/entt/main.cpp @@ -0,0 +1,54 @@ +#include +#include + +struct position { + float x; + float y; +}; + +struct velocity { + float dx; + float dy; +}; + +void update(entt::registry ®istry) { + auto view = registry.view(); + + for(auto entity: view) { + // gets only the components that are going to be used ... + + auto &vel = view.get(entity); + + vel.dx = 0.; + vel.dy = 0.; + + // ... + } +} + +void update(std::uint64_t dt, entt::registry ®istry) { + registry.view().each([dt](auto &pos, auto &vel) { + // gets all the components of the view at once ... + + pos.x += vel.dx * dt; + pos.y += vel.dy * dt; + + // ... + }); +} + +int main() { + entt::registry registry; + std::uint64_t dt = 16; + + for(auto i = 0; i < 10; ++i) { + auto entity = registry.create(); + registry.assign(entity, i * 1.f, i * 1.f); + if(i % 2 == 0) { registry.assign(entity, i * .1f, i * .1f); } + } + + update(dt, registry); + update(registry); + + // ... +}