Update README.md to include project description, developer documentation links, and license information.
CI / build-test (push) Successful in 1m6s
CI / build-test (push) Successful in 1m6s
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# mrgameeng
|
||||
|
||||
2D game engine built on MonoGame 3.8.4 (DesktopGL), .NET 8, C#.
|
||||
ECS-first: Friflo.Engine.ECS 3.6 is tightly integrated into the core — all gameplay
|
||||
state lives in components, all logic in systems.
|
||||
|
||||
Design docs and developer documentation live in `docs/` and are written in **Russian**.
|
||||
Keep them up to date when architecture or conventions change.
|
||||
|
||||
## Solution layout
|
||||
|
||||
```
|
||||
src/ MrGameEng.* engine libraries (one per functional area)
|
||||
samples/ MrGameEng.Sample — demo game showcasing every engine feature
|
||||
tests/ xUnit test projects, one per engine library
|
||||
docs/ architecture, conventions, roadmap (Russian)
|
||||
```
|
||||
|
||||
Engine modules: `Core` (game loop, ECS world, scenes, time), `Graphics` (custom batched
|
||||
renderer, camera, sprites), `Input`, `Audio`, `Assets` (runtime loading, no content
|
||||
pipeline), `Assets.Generator` (Roslyn source generator for typed asset handles).
|
||||
Dependency rule: every module may depend only on `Core`; `Core` depends only on
|
||||
MonoGame and Friflo.Engine.ECS. `Assets.Generator` is a netstandard2.0 analyzer.
|
||||
|
||||
## Commands
|
||||
|
||||
```
|
||||
dotnet build MrGameEng.sln
|
||||
dotnet test MrGameEng.sln
|
||||
dotnet run --project samples/MrGameEng.Sample
|
||||
```
|
||||
|
||||
## Architecture rules
|
||||
|
||||
- ECS-first: components are plain data (`struct` implementing `IComponent`),
|
||||
behavior goes into Friflo systems (`QuerySystem`), wired through `SystemRoot`.
|
||||
No `Update()` methods on game objects, no inheritance-based entities.
|
||||
- Hot paths (per-frame systems) must be allocation-free.
|
||||
- Rendering: custom batcher in `Graphics` (vertex buffers, layer→depth→texture sort,
|
||||
atlas support); `SpriteBatch` is not used in engine code. Draw systems write vertices
|
||||
directly from Friflo chunk iteration. Orthographic camera (one active per scene),
|
||||
registered render layers (World or Screen space, optional Y-sort), AABB culling
|
||||
against the camera rect before vertices are written.
|
||||
- No MGCB content pipeline. Assets are raw files under `Assets/`, loaded at runtime
|
||||
(textures via `Texture2D.FromFile`, fonts via FontStashSharp, ogg via NVorbis,
|
||||
shaders precompiled by `dotnet-mgfxc` at build time). Game code references assets
|
||||
only through generated typed handles (`AssetRef<T>`), never string paths.
|
||||
- New engine functionality goes into the matching module, or a new
|
||||
`MrGameEng.<Area>` library if it is a distinct area — never into `Core` by default.
|
||||
- Every public engine feature must be demonstrated in `MrGameEng.Sample`
|
||||
and covered by tests where logic is testable without a GPU.
|
||||
|
||||
## Code conventions
|
||||
|
||||
- Nullable reference types enabled, warnings as errors, file-scoped namespaces.
|
||||
- Public engine API requires XML doc comments (English).
|
||||
- Tests: xUnit, named `Method_Scenario_Expectation`.
|
||||
Reference in New Issue
Block a user