# Voile MVP ## Bugfixes - ActionJustPressed and KeyboardKeyJustPressed don't detect inputs consistently. - **Solution**: This is a problem related to custom frame pacing for fixed timestep. Raylib polls input in BeginFrame, which means certain functions related to JustPressed* may work incorrectly when polled in a separate timestep. This can be fixed if the entire input system will be moved to SDL or with a custom render + input backend altogether. - ~~Fix any remaining bugs with anchor positioning system.~~ - ~~Containers don't position their chilren correctly when using anchors and adding/removing them.~~ ## Core - ~~Add and implement interfaces for systems (ISystem, IUpdatableSystem, etc.)~~ - ~~Minimize amount of possible null references.~~ - ~~TextDataResource providing a convenient wrapper around TOML data files.~~ - ~~Add documentation for common classes.~~ - ~~Hot reloading of resources.~~ - Separate render and update thread. ## I/O - ~~Use GUIDs and string ID maps for fetching resources instead of string IDs alone.~~ - ~~Reimplement unloading.~~ - Finalize ResourceManager and ResourceLoader APIs for 1.0. - Add async API for ResourceManager. - ~~Virtual file system.~~ - Custom PAK format using the VFS implementation. - (stretch goal) Streamed resource loading. ## Serialization - Serialize attribute. - Add automatic serialization of resources through source generation and System.Text.Json. - Make sure this serialization system works well with CLR and NativeAOT. - ~~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. - Create WebGPU renderer (StandardRenderSystem) ## Audio - Use SoLoud as a default sound engine. - Integrate FMOD. ## Misc - ~~Asset manager~~ - ~~Separate engine and game into separate projects~~ - ~~Particle system 2.0~~ - ~~Reduce the size of Particle struct by infering most parameters through lifetime.~~ - ~~Reduce cache misses by utilizing SoA.~~ - ~~SIMD acceleration.~~ - ~~Creating and removing emitters.~~ ## SceneGraph module - Full overhaul using Entity Component architecture (not to be mistaken with ECS). - Layers (sorting mechanism) - Save/load scenes from file ## Input - ~~Action system~~ - Nicer input mapping API using code. - Make action system use an InputMap resource instead. - Gamepad support ## Diagnostics - Implement Profiler class. - Generate a Speedscope report. - Collect reports for systems - Game - Render - Audio - ResourceManager - UI - Particles ## UI - ~~Layout~~ - ~~Containers~~ - ~~VerticalContainer~~ - ~~HorizontalContainer~~ - ~~GridContainer~~ - ~~FlexContainer~~ - ~~Positioning (anchors)~~ - ~~Move layouting to Render instead of Update, use Update for input.~~ - Input propagation - ~~Pass input to widgets.~~ - Add element focus logic, make them focusable with action inputs. - Basic input elements (~~button~~, text field, toggle). - Styling - ~~Style sheet~~ - ~~Add style settings for UI panels (for buttons, labels, etc.).~~ - Parse StyleSheet from TOML file. - Animated styles - Find a way to reference external assets in the style (fonts, textures). - Create a default style for widgets.