novolis-governance / imports-todo/gameengine-core-composition.md
Import: `Frank.GameEngine.Core` (composition facade)
Policies that keep the org coherent
dotnetgovernancenovolis
Source: D:\frankrepos\Frank.GameEngine\src\Frank.GameEngine.Core
What
| Type | Role |
|---|---|
| `GameEngine` / `GameEngine2D` | Wire physics, input, audio, renderer, scenes |
| `Simulator` | Simple update/draw loop host |
| `SceneManager`, `Scene2DManager` | Multi-scene switching |
| `RandomPile.*` | Aerodynamics toy calculators (overlap with `novolis-physics` domains) |
Also documents two execution models in docs/architecture.md: classic loop vs Raylib Generic Host channel experiment (RayLibHostedPhysicsService).
Why
- Gap between `Novolis.Raylib.Hosting` (low-level) and `Novolis.Simulation` (worlds, clocks, replay) is wide for “small game” authors.
- Frank samples expect
new GameEngine()+Initialize(IRenderer)ergonomics.
Why defer (P2)
- High overlap risk with existing Novolis pieces if copied verbatim.
- Hosted channel pipeline duplicates concepts in
Novolis.Raylib.Hostingwith different API — confusing. RandomPilebelongs in Physics or apps, not a new Core package.
How (if pursued)
Recommended approach: **patterns, not port**
- Document in
novolis-raylib/docshow to compose:
RayGameContextloopNovolis.Simulation.ViewcamerasNovolis.Physics.*when needed
- Optional thin `Novolis.Raylib.Game.Scenes` helper:
IScene,SceneStack— 50–100 lines, no Frank copy-paste
- Do not port
GameEngineclass name orFrank.GameEngine.Physics.PhysicsEnginedependency.
Alternative (not recommended)
Full port of GameEngine → requires adapter types for Novolis.Math + Novolis.Raylib renderer interface — large breaking surface.
Acceptance
- Either closed as “documentation + SceneStack only” or explicit ADR before any
Novolis.Raylib.Corepackage.