{"id":17946585,"url":"https://github.com/gliderkite/semeion","last_synced_at":"2025-03-24T20:32:49.477Z","repository":{"id":48608770,"uuid":"260772230","full_name":"gliderkite/semeion","owner":"gliderkite","description":"A 2D environment simulator, that let's you define the behavior and the shape of your entities, while taking care of dispatching events generation after generation.","archived":false,"fork":false,"pushed_at":"2022-01-11T20:48:15.000Z","size":23088,"stargazers_count":62,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-20T14:12:36.755Z","etag":null,"topics":["2d","2d-game-engine","engine","entity-framework","rust","simulation"],"latest_commit_sha":null,"homepage":"https://gliderkite.github.io/posts/semeion","language":"Rust","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/gliderkite.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}},"created_at":"2020-05-02T20:47:13.000Z","updated_at":"2025-02-27T14:16:34.000Z","dependencies_parsed_at":"2022-09-26T20:31:40.255Z","dependency_job_id":null,"html_url":"https://github.com/gliderkite/semeion","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/gliderkite%2Fsemeion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gliderkite%2Fsemeion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gliderkite%2Fsemeion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gliderkite%2Fsemeion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gliderkite","download_url":"https://codeload.github.com/gliderkite/semeion/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245348318,"owners_count":20600626,"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":["2d","2d-game-engine","engine","entity-framework","rust","simulation"],"created_at":"2024-10-29T07:06:34.441Z","updated_at":"2025-03-24T20:32:48.937Z","avatar_url":"https://github.com/gliderkite.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# semeion\n\nA 2D environment simulator, that let's you define the behavior and the shape\nof your entities, while taking care of dispatching events generation after\ngeneration.\n\n[![docs.rs](https://docs.rs/semeion/badge.svg)](https://docs.rs/semeion)\n[![crates.io](https://img.shields.io/crates/v/semeion.svg)](https://crates.io/crates/semeion)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n\n## Overview\n\nFor an overview of what you can do, and how you can do it with this library, the\nbest way to start is to read the\n[introductive blog post](https://gliderkite.github.io/posts/semeion), or to have\na look at the several [examples](#examples) that come with this project.\nEach of these aims to show a subset of the features set of `semeion`, while\ngiving an example of how to make the best use of it.\nWhile, if you want to have a look at a more complete project that uses\n`semeion` as its entity engine, check out\n[formicarium](https://github.com/gliderkite/formicarium).\n\nNote: if you want to clone this repository without having to download the\n.gif assets you can do so with:\n```bash\ngit clone --single-branch https://github.com/gliderkite/semeion.git\n```\n\n## Optional Features\n\nBy default, `semeion` uses an environment engine that schedules all the entity\ncallbacks on the same single thread, therefore no synchronization is required\n(no user's implemented `Entity` needs to be sent or shared between threads).\n\nNevertheless, there may be scenarios in which you are running a simulation that\nincludes a significant number of entities *and* each of these entity tasks,\nrequired to proceed to the next generation, is considerably resource consuming.\nFor these situations, it is possible to gain significant advantage by spawning\nmultiple threads and running the simulation in parallel (profiling your code is\nalways advised before taking final decisions).\n\nAt the moment, you can enable this (non *additive*) feature only at compile time,\nby specifying the optional feature `parallel` in your `Cargo.toml`:\n\n```toml\nsemeion = { version = \"0.9\", features = [\"parallel\"] }\n```\n\nThe only requirement is that all your entities need to be\n[Send](https://doc.rust-lang.org/std/marker/trait.Send.html) and\n[Sync](https://doc.rust-lang.org/std/marker/trait.Sync.html).\n\n\n## Examples\n\n - [Langton's Ant](https://en.wikipedia.org/wiki/Langton%27s_ant)\n\n   ```bash\n   cargo run --release --example langton\n   ```\n   \u003cimg src=\"../assets/langton.gif\" width=\"300\" height=\"240\"\u003e\n\n - [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)\n\n   ```bash\n   cargo run --release --example life\n   ```\n   \u003cimg src=\"../assets/life.gif\" width=\"350\" height=\"300\"\u003e\n\n\n - [Rule](https://en.wikipedia.org/wiki/Elementary_cellular_automaton)\n\n    ```bash\n    cargo run --release --example rule -- 161\n    ```\n   \u003cimg src=\"../assets/rule.gif\" width=\"350\" height=\"210\"\u003e\n\n\n - [Wireworld](https://en.wikipedia.org/wiki/Wireworld)\n\n   ```bash\n   cargo run --release --example wireworld\n   ```\n   \u003cimg src=\"../assets/wireworld.gif\" width=\"300\" height=\"300\"\u003e\n\n\n - [Mandelbrot](https://en.wikipedia.org/wiki/Mandelbrot_set)\n\n   ```bash\n   cargo run --release --example mandelbrot --features parallel\n   ```\n   \u003cimg src=\"../assets/mandelbrot.gif\" width=\"350\" height=\"200\"\u003e\n\n\n - [Camera](https://en.wikipedia.org/wiki/Transformation_matrix)\n\n    ```bash\n    cargo run --release --example camera\n    ```\n   \u003cimg src=\"../assets/camera.gif\" width=\"300\" height=\"300\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgliderkite%2Fsemeion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgliderkite%2Fsemeion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgliderkite%2Fsemeion/lists"}