{"id":27372868,"url":"https://github.com/andreaslrx/ecstasy","last_synced_at":"2025-04-13T10:40:35.292Z","repository":{"id":63425357,"uuid":"551599673","full_name":"AndreasLrx/ecstasy","owner":"AndreasLrx","description":"Entity Component System Toward Architecture Saving Years","archived":false,"fork":false,"pushed_at":"2025-04-11T08:13:12.000Z","size":187605,"stargazers_count":5,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-11T09:47:46.451Z","etag":null,"topics":["cpp-library","cpp20","ecs","library"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AndreasLrx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-14T18:03:15.000Z","updated_at":"2025-04-11T08:12:23.000Z","dependencies_parsed_at":"2023-11-08T23:32:25.342Z","dependency_job_id":"f8344ec4-b3b7-4a11-9704-9a2d0e4316ab","html_url":"https://github.com/AndreasLrx/ecstasy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasLrx%2Fecstasy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasLrx%2Fecstasy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasLrx%2Fecstasy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasLrx%2Fecstasy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreasLrx","download_url":"https://codeload.github.com/AndreasLrx/ecstasy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248700882,"owners_count":21147929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp-library","cpp20","ecs","library"],"created_at":"2025-04-13T10:40:34.485Z","updated_at":"2025-04-13T10:40:35.284Z","avatar_url":"https://github.com/AndreasLrx.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ECSTASY (Entity Component System Toward Architecture Saving Years)\n\n\u003c!--\n@cond TURN_OFF_DOXYGEN\n--\u003e\n\n[![Build](https://github.com/AndreasLrx/ecstasy/actions/workflows/build-tests.yml/badge.svg)](https://github.com/AndreasLrx/ecstasy/actions/workflows/build-tests.yml)\n[![Documentation](https://img.shields.io/badge/Documentation-Doxygen-blue)](https://andreaslrx.github.io/ecstasy/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)\n[![codecov](https://codecov.io/gh/AndreasLrx/ecstasy/branch/main/graph/badge.svg?token=9TIAMB7WTF)](https://codecov.io/gh/AndreasLrx/ecstasy)\n\n\u003c!--\n@endcond TURN_OFF_DOXYGEN\n--\u003e\n\n###### If you're wondering if the name of the project has any real significance, it doesn't.\n\n\u003c!--\n@cond TURN_OFF_DOXYGEN\n--\u003e\n\n# Table of Contents\n\n- [Introduction](#introduction)\n- [Code Example](#code-example)\n- [Building](#building)\n- [Documentation](#documentation)\n- [Contributing](#contributing)\n- [License](#license)\n- [Authors](#authors)\n\n\u003c!--\n@endcond TURN_OFF_DOXYGEN\n--\u003e\n\n## Introduction\n\nEcstasy is a modern C++ library that implements an Entity Component System (ECS) architecture with a strong focus on performance, flexibility, and ease of use.\n\nSome key features include:\n\n- Advanced usage of templates to shift computations from runtime to compile time, resulting in faster and more efficient applications (in theory, because I don't know how to make benchmarks).\n- Support for complex queries using boolean operations (And/Or/Xor/Not) to filter and retrieve entities based on component criteria.\n- Built-in integrations for common game mechanics, such as events, user actions, and graphic libraries to simplify game development.\n- Designed with the zero-overhead principle in mind to ensure minimal runtime impact and maximum performance.\n- Provides an excellent opportunity for cooking eggs during compilation 😉\n\nGet started with Ecstasy today and experience a new level of performance and productivity in your ECS-based projects!\n\n## Code Example\n\n_The following is a basic example extracted from the [Tutorial](https://andreaslrx.github.io/ecstasy/md_doc_2_tutorial.html)._\n\n```cpp\n#include \u003cecstasy/registry/Registry.hpp\u003e\n#include \u003cecstasy/system/ISystem.hpp\u003e\n#include \u003cecstasy/storages/MapStorage.hpp\u003e\n\nstruct Position {\n    float x;\n    float y;\n};\n\nstruct Velocity {\n    float x;\n    float y;\n};\n\nstruct Movement : public ecstasy::ISystem {\n    void run(ecstasy::Registry \u0026registry) override final\n    {\n        for (auto [position, velocity] : registry.query\u003cPosition, const Velocity\u003e()) {\n            position.x += velocity.x;\n            position.y += velocity.y;\n        }\n    }\n};\n\n\nint main() {\n    // Declare your registry\n    ecstasy::Registry registry;\n\n    // Register your systems\n    registry.addSystem\u003cMovement\u003e();\n\n    // Populate the registry with some entities\n    for (int i = 0; i \u003c 10; i++) {\n        auto builder = registry.entityBuilder();\n        builder.with\u003cPosition\u003e(i * 2, i * 10);\n        if (i % 2 == 0)\n            builder.with\u003cVelocity\u003e(i * 10, i * 2);\n        ecstasy::Entity entity = builder.build();\n        // If needed, use the entity\n    }\n\n    while (true) {\n        registry.runSystems();\n    }\n}\n```\n\n## Building\n\nFollow the [building documentation](https://andreaslrx.github.io/ecstasy/md_doc_2_building.html)\n\n## Documentation\n\nYou can see the documentation [online](https://andreaslrx.github.io/ecstasy/).\n\nYou can also build it locally using [Doxygen](https://www.doxygen.nl/):\n\n```sh\n# Run at the root of the project\ndoxygen\n\n# Open the generated pages\nxdg-open doc/build/html/index.html\n```\n\n## Contributing\n\nECSTASY is an open source project. If you want to get involved and suggest some additional features, file a bug report or submit a patch, create an issue or submit a pull request.\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\nIf you want to contribute with pull requests, look at the [Contributing.md](/CONTRIBUTING.md)\n\n## License\n\nThe ECSTASY library is distributed under the [MIT license](https://opensource.org/licenses/MIT).\nIn short, ECSTASY is free for any use (commercial or personal, proprietary or open-source). You can use ECSTASY in your project without any restriction. You can even omit to mention that you use ECSTASY -- although it would be appreciated.\n\n### External tools License\n\nSome of ECSTASY parts use external tools. Therefore their licenses extend to your project if you use the associated [options](https://andreaslrx.github.io/ecstasy/md_doc_2_building.html#CMakeOptions).\n\n- [Google Tests](https://github.com/google/googletest/) [[BSD 3-Clause](https://github.com/google/googletest/blob/main/LICENSE)]: BUILD_TEST_SUITE\n- [Rapidjson](https://github.com/Tencent/rapidjson/) [[MIT](https://github.com/Tencent/rapidjson/blob/master/license.txt)]: ECSTASY_SERIALIZER_JSON\n- [Toml++](https://github.com/marzer/tomlplusplus/) [[MIT](https://github.com/marzer/tomlplusplus/blob/master/LICENSE)]: ECSTASY_SERIALIZER_TOML (Also induced by ECSTASY_INTEGRATIONS_USER_ACTION)\n- [SFML](https://github.com/SFML/SFML/) [[ZLIB](https://github.com/SFML/SFML/blob/master/license.md)]: ECSTASY_INTEGRATIONS_SFML\n\n## Authors\n\n- Andréas Leroux (andreas.leroux@epitech.eu)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreaslrx%2Fecstasy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreaslrx%2Fecstasy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreaslrx%2Fecstasy/lists"}