{"id":28637717,"url":"https://github.com/jasonxudeveloper/easyecs","last_synced_at":"2025-06-12T18:32:28.223Z","repository":{"id":273191748,"uuid":"918949731","full_name":"JasonXuDeveloper/EasyEcs","owner":"JasonXuDeveloper","description":"An Entity-Component-System library","archived":false,"fork":false,"pushed_at":"2025-06-01T10:40:47.000Z","size":124,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-01T12:09:30.223Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/JasonXuDeveloper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-19T10:08:08.000Z","updated_at":"2025-06-01T10:40:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"1e310241-dca2-4322-8186-e2d236f68da6","html_url":"https://github.com/JasonXuDeveloper/EasyEcs","commit_stats":null,"previous_names":["jasonxudeveloper/easyecs"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/JasonXuDeveloper/EasyEcs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonXuDeveloper%2FEasyEcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonXuDeveloper%2FEasyEcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonXuDeveloper%2FEasyEcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonXuDeveloper%2FEasyEcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JasonXuDeveloper","download_url":"https://codeload.github.com/JasonXuDeveloper/EasyEcs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonXuDeveloper%2FEasyEcs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259519177,"owners_count":22870324,"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":[],"created_at":"2025-06-12T18:30:50.422Z","updated_at":"2025-06-12T18:32:28.199Z","avatar_url":"https://github.com/JasonXuDeveloper.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EasyEcs\n\n![build](https://img.shields.io/github/actions/workflow/status/JasonXuDeveloper/EasyEcs/.github/workflows/dotnet.yml?branch=master)\n![license](https://img.shields.io/github/license/JasonXuDeveloper/EasyEcs)\n\nAn Entity-Component-System library\n\n## Why?\n\nSometimes we may want to remove bidirectional dependencies between our code, and ECS is a good way to do this.\n\nThis design pattern offers a clean way to separate the data from the logic, and it's also a good way to improve the performance.\n\n## What is ECS?\n\nE - Entity\n\nC - Component\n\nS - System\n\nBut what really is it?\n\nWell, as a human, we (entities) live in the world (context), and we have some properties (components). Moreover, we have things to do based on our properties (systems).\n\n## Concepts in EasyEcs\n\n- A `Context` holds several `Entity` instances, some `System` instances and some `SingletonComponent` instances.\n- Each `Entity` has some `Component` instances. \n- Each `Component` (or `SingletonComponent`) has only data properties.\n- Each `System` can filter lots of `Entity` instances in the same `Context` by their components and operate logics on them.\n\n## Why it removes bidirectional dependencies?\n\n- Only `System` contains logics and none of them should reference on each other. But we allow one system depends on another by specifying `Priority`. (They should only depend on the filtered entities/components)\n- `Component` only contains data properties and no logics. (Again, no way to have dependency)\n- `Entity` only contains components. (It is really just a container)\n\n\n## Why is it fast?\n\n- As a `System` can operate on a batch of entities with components, we can well utilize the cache of the MMU.\n- We can also easily parallelize the systems to improve the performance, in a multi-core CPU environment.\n\n## Anything special in EasyEcs?\n\n- We have **priority** for `System`, so you can control the order of systems.\n- We have **frequency** for `System`, so you can control the frequency of systems being executed.\n- We only allow **asynchronous** interfaces for `System` and `Context`, so our ECS should not block the thread (unless you screw up).\n- We introduce built-in **parallelism** and/or **concurrency** for `System`, so you can easily parallelize your systems (for those who are in the same priority) and well utilize the multi-core CPU.\n- We have a cool guy who is maintaining this library. (Just kidding)\n\n## Example\n\nJust check out the `EasyEcs.UnitTest` project. I have comments there.\n\n## Documentation\n\nBelieve me, one day I will make a website for this and document everything.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonxudeveloper%2Feasyecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjasonxudeveloper%2Feasyecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonxudeveloper%2Feasyecs/lists"}