# Roadmap

## Core

- ~~Add and implement interfaces for systems (ISystem, IUpdatableSystem, etc.)~~
- Minimize amount of possible null references.
- Serialization and deserialization of Resources from and to TOML files.
- Add documentation for common classes.
- Hot reloading of resources.

## I/O

- Use GUIDs and string ID maps for fetching resources instead of string IDs alone.
- (stretch goal) Make async API for ResourceManager
- (stretch goal/1.0) Streamed resource loading
- (stretch goal) Virtual file system

## Serialization

- Serialize attribute.
- Add automatic serialization of resources through code generation and System.Text.Json.
- Provide means for fetching key/value configuration (INI? TOML?)
  - Expose some sort of ConfigFile class for safe key/value configuration fetching.

## Rendering

- ~~API for drawing textured quads~~
- ~~Camera API~~
- Arbitrary mesh rendering API.
- (1.0) Create WebGPU renderer (StandardRenderer)

## Audio

- ~~Integrate FMOD~~
- 2D audio abstraction

## Misc

- ~~Asset manager~~
- ~~Separate engine and game into separate projects~~
- ~~Particle system~~

## SceneGraph module

- ~~Layers (sorting mechanism)~~
- Full overhaul using Entity Component architecture (not to be mistaken with ECS).
- Save/load scenes from file

## Input

- ~~Action system~~
- Make action system use an InputMap resource instead.
- Gamepad support

## UI

- Immediate mode API.
- Styling.
- Basic input elements (button, text field, toggle).
- Containers (vertical and horizontal).
