novolis-governance / imports-todo/gameengine-2d-scene-rendering.md
Import: `Frank.GameEngine` 2D scene + `IRenderer2D`
Policies that keep the org coherent
dotnetgovernancenovolis
Status (2026-05-25): Cancelled for RaylibScene2Dimport. Platform lane is `Novolis.Rendering.TwoD` + `Novolis.Rendering.Backends.TwoD.Silk`. Optional later:Board<T>only. Master plan: platform-import-plan.md.
Source:
D:\frankrepos\Frank.GameEngine\src\Frank.GameEngine.Primitives—Scene2D,GameObject2D,Camera2D,Sprite2D,Transform2DD:\frankrepos\Frank.GameEngine\src\Frank.GameEngine.Rendering—IRenderer2DD:\frankrepos\Frank.GameEngine\src\Frank.GameEngine.Rendering.RayLib—RayLibRenderer2D, 3D overlay/underlay
What
Orthographic 2D scene graph and renderer seam for HUDs, board games, and mini-games — separate from novolis-rendering path tracing.
Why
novolis-renderingis 3D framebuffer / RT focused; noScene2D.novolis-raylibhas bindings andGameloop but no shared 2D scene model.- Frank samples:
Hello2D,Pong,Battleship(Board<T>in Primitives) validate the model. - 3D Raylib apps use Underlay2D/Overlay2D for HUD — useful pattern for dogfood.
How
Split import (recommended)
| Piece | Target |
|---|---|
Board<T>, BoardHistory<T> (if needed) | Novolis.Math.Arrays or Novolis.Simulation.World — policy: grid games = Simulation if stateful |
Scene2D, GameObject2D, Camera2D | Novolis.Raylib.Scene2D (new, references Math for Vector3 XZ or Rgba32) |
IRenderer2D + Raylib impl | Novolis.Raylib.Presentation or .Game |
Do not
- Merge into
novolis-mathas “2D types” — avoidVector2; useVector3Y=0 per stack policy. - Reference
novolis-renderingfrom Raylib 2D facet.
Port steps
- Spike: port
Scene2D+RayLibRenderer2Dminimal draw (solid quads). - One dogfood sample: Pong or Hello2D using PackageReference only.
- Document 3D+2D overlay pattern (Underlay2D) in
novolis-raylib/docs.
Priority
P1 after gameengine-assets-mesh-import.md and gameengine-input.md.
Acceptance
- Sample runs from NuGet packages only.
- No
Frank.GameEngine.Rendering.MonoGameunless separate decision (template already exists).