{"id":23085457,"url":"https://github.com/arkaht/cpp-ekosystem","last_synced_at":"2026-05-19T03:07:14.994Z","repository":{"id":249270853,"uuid":"824322721","full_name":"arkaht/cpp-ekosystem","owner":"arkaht","description":"Ekosystem ─ a simple data-driven simulation game in C++ using Suprengine and ImGui","archived":false,"fork":false,"pushed_at":"2025-04-27T12:13:18.000Z","size":1456,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-27T13:23:23.953Z","etag":null,"topics":["cpp","custom-engine","data-driven","ecosystem","imgui","opengl","sdl2","simulation"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arkaht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-07-04T21:38:28.000Z","updated_at":"2025-04-27T12:13:22.000Z","dependencies_parsed_at":"2024-10-26T15:51:00.341Z","dependency_job_id":"4f12d325-706a-40d3-81fa-3d89bd760f43","html_url":"https://github.com/arkaht/cpp-ekosystem","commit_stats":{"total_commits":97,"total_committers":1,"mean_commits":97.0,"dds":0.0,"last_synced_commit":"67dcada530159cb8e414b5face8aee22a93e8455"},"previous_names":["arkaht/cpp-ekosystem"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arkaht/cpp-ekosystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkaht%2Fcpp-ekosystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkaht%2Fcpp-ekosystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkaht%2Fcpp-ekosystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkaht%2Fcpp-ekosystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arkaht","download_url":"https://codeload.github.com/arkaht/cpp-ekosystem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkaht%2Fcpp-ekosystem/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266802641,"owners_count":23986384,"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","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","custom-engine","data-driven","ecosystem","imgui","opengl","sdl2","simulation"],"created_at":"2024-12-16T17:55:16.939Z","updated_at":"2026-05-19T03:07:14.965Z","avatar_url":"https://github.com/arkaht.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ekosystem\n**Ekosystem is a C++ 3D \"game\" focused around simulating a simple data-driven ecosystem of animals.**\n\nIt is built using [suprengine](https://github.com/arkaht/cpp-suprengine), my custom engine which uses OpenGL and SDL2.\n\n![image](https://github.com/user-attachments/assets/8476bda7-4dc5-4abb-a424-a4038f6897ae)\n\n## Dependencies\n### Project\n+ C++20 compiler\n+ OpenGL 3.3.0\n+ CMake 3.11\n\n### Libraries\n+ [cpp-suprengine](https://github.com/arkaht/cpp-suprengine)\n\n## Features\n+ Data-driven simulation: each animal type is defined by a data asset to specify behavior, movement and visuals (which means you can easily make rabbits carnivore and wolves photosynthetic)\n+ Serialization of animals data asset with JSON files.\n+ Animals eat according to their metabolism, reproduce within their own species, wander around and flee from their predators.\n+ Animals have 3D models and movement animations.\n+ Finite State Machine for AI logic, designed mixing with a Behavior Tree.\n+ Complete user interface tool using **ImGui** for both system balancing and debugging\n\n## Project Structure\nThis project only holds the engine code since it is de-coupled from games code.\n\n**Folder structure:**\n+ **`assets/`** contains game assets, such as data defining pawns, curves, etc.\n+ **`src/`** contains source files of the game.\n\n## Build the project\nThis project is built using **CMake 3.11**, ensure you have already installed a compatible version.\n\n### Steps\n0. Create a folder anywhere for the installation, we'll name it `ekosystem`. The reason for this is that the game's `CMakeLists.txt` will attempt to finds the engine's folder directly from its own parent folder, if you don't want that, look at the [Troubleshooting](#troubleshooting) section.\n1. Clone the engine's [repository](https://github.com/arkaht/cpp-suprengine) in `ekosystem/cpp-suprengine`.\n2. Run command `git submodule update --init` in the engine's folder.\n3. Clone the game's repository (this one) in `ekosystem/cpp-ekosystem`.\n4. Run the game's `CMakeLists.txt` either by using CMake's command line interpreter, CMake's GUI or your favorite IDE.\n\n### Troubleshooting\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eChange engine's folder location\u003c/b\u003e\u003c/summary\u003e\n\nIf for some reasons you want to move the engine's or game's folder apart from each other,\nyou can configure the location of the engine using the CMake variable `SUPRENGINE_PATH`.\n\nUsing command line:\n```cmd\ncd build\ncmake .. -DSUPRENGINE_PATH=C:/Path/To/Engine/\n```\n\nYou can also use **cmake-gui** to change this variable.\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eCouldn't update engine's Git Submodules\u003c/b\u003e\u003c/summary\u003e\n\nIf running the git submodule update command didn't work for any reasons, replace the folder `libs/curve-x` by cloning [arkaht/cpp-curve-x](https://github.com/arkaht/cpp-curve-x).\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eNeed administrator privileges to run the CMakeLists.txt\u003c/b\u003e\u003c/summary\u003e\n\nI'm using symbolic links to avoid having to copy the assets folder each time I compile. The problem is that on Windows, the symlink command requires administrator privileges. To resolve that, you can either:\n+ Enable Windows developper mode (not recommended).\n+ Run your IDE or CLI with administrator privileges.\n+ Edit the `CMakeLists.txt` by replacing `suprengine_symlink_assets` with `suprengine_copy_assets`\n\u003c/details\u003e\n\n### Credits\n+ Wolf model by [Ezgarth](https://sketchfab.com/Ezgarth) from [Sketchfab](https://skfb.ly/698Sv)\n+ Hare model by [616](https://sketchfab.com/Hangry_Cat) from [Sketchfab](https://skfb.ly/o9PB6)\n+ Dirt texture by [Cethiel](https://opengameart.org/users/cethiel) from [OpenGameArt](https://opengameart.org/content/tileable-dirt-textures)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkaht%2Fcpp-ekosystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farkaht%2Fcpp-ekosystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkaht%2Fcpp-ekosystem/lists"}