{"id":19392076,"url":"https://github.com/davidraab/demoengine-monogame-fs","last_synced_at":"2026-04-17T06:02:31.933Z","repository":{"id":197203279,"uuid":"531220176","full_name":"DavidRaab/DemoEngine-MonoGame-FS","owner":"DavidRaab","description":"DemoEngine - MonoGame + F#","archived":false,"fork":false,"pushed_at":"2024-07-24T17:06:36.000Z","size":1594,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-24T21:12:33.060Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DavidRaab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2022-08-31T18:59:50.000Z","updated_at":"2024-08-24T02:10:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"949d01ec-3111-488e-8277-704f63b6edf1","html_url":"https://github.com/DavidRaab/DemoEngine-MonoGame-FS","commit_stats":null,"previous_names":["davidraab/monogamefs","davidraab/demoengine-monogame-fs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/DavidRaab/DemoEngine-MonoGame-FS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidRaab%2FDemoEngine-MonoGame-FS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidRaab%2FDemoEngine-MonoGame-FS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidRaab%2FDemoEngine-MonoGame-FS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidRaab%2FDemoEngine-MonoGame-FS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DavidRaab","download_url":"https://codeload.github.com/DavidRaab/DemoEngine-MonoGame-FS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidRaab%2FDemoEngine-MonoGame-FS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31917372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":[],"created_at":"2024-11-10T10:30:20.956Z","updated_at":"2026-04-17T06:02:31.915Z","avatar_url":"https://github.com/DavidRaab.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"### About the Project: MonoGame + F#\n\nI started game development some years ago and was unhappy about most engines.\nI learned Unity first but the way how you structure your project is just horrible\nin my opinion. Even if they say it would be an ECS system, it isn't. Unity\njust provides Components with the lack of Entity and the Systems making\nit a different kind of an architecture.\n\nOn top I was already used to functional programming before from Perl \u0026 JavaScript\nand really disliked OO over the years more and more. So working with Unity\nand C# became more and more pain to me to. Especially after learning F#. When I\nstarted to learn F# I already used it with Unity but it doesn't worked well together.\n\nSo after I deleted all my projects I started again and choosed MonoGame as\na development platform.\n\nMonogame has the advantage of full control. Basically just four methods to\noverwrite. How you structure and design your game is your own choice. But\nthat's also its disadvantage as you have to write everything from the ground up\nyourself. What also is an advantage as I learn myself a lot about game\ndevelopment.\n\nThis project aims to become a general engine on top of Monogame. The goal is to\nprovide a true ECS architecture combined with the MVU architecture introduced\nby Elm.\n\nA game is really nothing else as a continous call to an `update` function,\npreferrably running at least with 60 frames per second and then `draw` the\ncurrent state (Model) of the game.\n\nBut a game has some critical performance requirements. It doesn't make\nsense if everything becomes immutable. That's why it is still the Elm architecture.\nThe performance critical things are written with mutability in most cases, but\nthe less critical things, what is still most of the game logic, can use immutability.\n\nWith this project I work towards this goal. I implement most of the features\nthat a basic 2D game needs. Providing abstraction of the most parts with an ECS\narchitecture that works well in a functional approach.\n\nWhen the goal complets a user of the engine will only have to write `09_Assets.fs`\nand `10_Program.fs` for his own game. Maybe adding other files for his/her own\ncomponents and systems.\n\n# Features implemented\n\n* **Entity**: Everything is an entity and you can add/remove components at runtime.\n* Sprite Sheet \u0026 Sprite Sheet Animations\n* **Transforms**: Every Entity can have a parent and is positioned, scaled and rotated to its parent\n* **Camera**: It supports multiple cameras that you can move or Zoom\n* **Input Handling**: Inputs are transformed to Actions\n* **Timer System**: Running code periodically or after a specific time-frame that depends on the GameTime\n* **RenderTarget**: You specify an internal resolution and the game scales with the display resolution\n* **Fixed Update**: A fixed update loop that runs as often as needed per seconds independent from the frame-rate.\n\n# Features to come\n\n## Important\n\nWhen those are implemented, it is possible to create some games.\n\n* UI\n* Scenes / LevelEditor (Loading)\n* Multiple GameTime's\n* State Machine or Behaviour Trees\n* Sound / Music\n\n## Secondly\n\nNeat feature to have, but some games work without those.\n\n* Animation System\n* Basic Collision System maybe Physics\n* Particle System\n\n## Least important\n\n* Separation into its own library.\n\n# Stability\n\nCurrently nothing is stable. The whole API and data-structures will likely change\nover time as I see fit to it. The engine will only target F# and no other .NET language.\n\n### License\n\n[![CC0 1.0 Universal](https://licensebuttons.net/p/zero/1.0/88x31.png)](http://creativecommons.org/publicdomain/zero/1.0/)\n\nLicense: ([CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0/)) You're free to use the code in any project, personal or commercial. There's no need to ask permission before using these. Giving attribution is not required, but is greatly appreciated!\n\n### Asset Licenses\n\nSome Assets are not my own see Resources.md for those Licenses!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidraab%2Fdemoengine-monogame-fs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidraab%2Fdemoengine-monogame-fs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidraab%2Fdemoengine-monogame-fs/lists"}