{"id":20712985,"url":"https://github.com/jzechy/zengine","last_synced_at":"2025-04-23T07:55:22.810Z","repository":{"id":187084682,"uuid":"676289674","full_name":"JZechy/zengine","owner":"JZechy","description":"Custom made game engine written in C# \u0026 .NET 6","archived":false,"fork":false,"pushed_at":"2025-02-08T14:27:02.000Z","size":209,"stargazers_count":10,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T07:55:21.122Z","etag":null,"topics":["architecture","csharp","csharp-library","custom-engine","custom-game-engine","dependency-injection","dotnet","engine","event-mediator","exercise","game-development","game-engine","game-loop","gamedev","learning","messaging-system","modular","open-source"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JZechy.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":"2023-08-08T21:42:58.000Z","updated_at":"2025-03-09T17:18:28.000Z","dependencies_parsed_at":"2023-12-01T16:29:15.821Z","dependency_job_id":"cd27ac40-fa35-4139-880a-263e805add5c","html_url":"https://github.com/JZechy/zengine","commit_stats":null,"previous_names":["jzechy/zengine"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JZechy%2Fzengine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JZechy%2Fzengine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JZechy%2Fzengine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JZechy%2Fzengine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JZechy","download_url":"https://codeload.github.com/JZechy/zengine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250395201,"owners_count":21423376,"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":["architecture","csharp","csharp-library","custom-engine","custom-game-engine","dependency-injection","dotnet","engine","event-mediator","exercise","game-development","game-engine","game-loop","gamedev","learning","messaging-system","modular","open-source"],"created_at":"2024-11-17T02:22:51.400Z","updated_at":"2025-04-23T07:55:22.804Z","avatar_url":"https://github.com/JZechy.png","language":"C#","readme":"﻿# ZEngine (Zechy's Engine)\n\nThe goal of this project is to create a custom game engine, entirely written in the C# language and using the .NET framework, incorporating\nmodern techniques and practices. For linking game systems, dependency injection is used, and for primary logging,\nnative extensions from Microsoft are utilized. It also focuses on native multi-threading support.\n\n_The main motivation for creating this engine was primarily the desire to delve deeper into the intricacies of game engine development, and\nto learn about the things that are hidden behind engine creation. The engine does not claim to be professional, and any potential use\nis at one's own risk._\n\n## Architecture\n\nThe foundation of game objects is based on components, where basic ones, like transformation, are provided by the engine. Users have\nthe freedom to expand the logic of game objects with their own components.\n\n### Communication\n\nThe engine offers two methods of communication between objects.\n\n#### Messages\n\nGame objects can communicate with each other through messages. These can be sent to any object that implements the\n`IMessageReceiver` interface. A unified approach to processing this communication has been created in the form of `MessageHandler`, which can be embedded in objects.\n\nWith `SendMessage`, one can target specific methods offered by objects. Specific recipients must be marked with\nthe `MessageReceiverAttribute`.\n\n#### Events\n\nEvents are managed through the `EventMediator`, and are intended for cases when the source or recipient of the message is unknown. Any method can register\nwith the mediator, which is accessible via DI, to receive messages of a certain type.\n\nMessages are objects that inherit the `IEventMessage` interface.\n\n### Systems\n\nThe main building blocks for the engine's operation are modular systems. These are independent parts that manage specific\nlogic. For example, the management of game objects, rendering, or inputs. These systems are connected to the engine via DI or\ncan be additionally added to the `GameManager`. Using the `IGameSystem` interface, one can create their own, additional systems.\n\n#### Game Object System\n\nThis system is responsible for the creation and destruction of game objects. Developers can access these methods through\nthe `ObjectManager`.\n\n#### Input System\n\nThe system for processing user inputs. At the moment, we are only implementing the keyboard and mouse within the Windows environment.\nFor interactions in one's own code, the `InputManager` is available, through which one can subscribe to events received from\ndevices.\n\n### GameBuilder\n\nAn object that helps create a basic environment and dependencies from which the `GameManager` can then be further developed.\n\n### GameManager\n\nThe main class responsible for the game loop and managing all systems. The GameManager is registered in the game's DI as a singleton,\nwhich should be loaded and initiated in the player's implementation.\n\n## Project Layout\n\nThe structure of the project is as follows:\n\n* **Solutions Items** contains files like this readme or `.gitignore`.\n* **Sources** Contains the engine's source codes.\n    1. **Architecture** Contains libraries defining the engine's basic architecture.\n    2. **Game Core** The core responsible for the basic game loop process.\n    3. **Game Systems** Systems responsible for the engine's individual functional units.\n* **Tests** Contains tests for the engine.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzechy%2Fzengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjzechy%2Fzengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzechy%2Fzengine/lists"}