= Engine components
The engine will be made of these pieces:
#table(
  columns: 4,
  [*Component*], [*Components needed*], [*Functionality*], [*Available in tools builds*],
  [`Base`], [none], [containers, basic algorithms, strings, data manipulation and serialization, Unicode handling,
   startup, shutdown, threading, synchronization, screen output, system information, basic file system functions,
   input, debugging features], [yes],
  [`Math`], [none], [handles higher level math related things than `rtm`], [yes],
  [`Utility`], [`Base`, `Platform`], [localisation, thread pools (maybe), configuration, logging], [yes],
  [`Texture`], [`Base`, `Platform`], [texture format], [yes],
  [`Mesh`], [`Base`, `Platform`], [mesh format], [yes],
  [`Pack`], [`Base`, `Platform`], [package file format], [yes],
  [`Launcher`], [`Base`, `Platform`, `Utility`], [loading an application DLL and the components it needs], [yes],
  [`Engine`], [`Base`, `Platform`, `Utility`], [cameras, scene management, entity component system, commonly used components (for entities), system management], [no],
  [`RenderSystem`], [`Base`, `Math`, `Platform`], [rendering scenes, UIs, anything else], [no],
  [`InputSystem`], [`Base`, `Platform`], [user input], [no],
  [`UiSystem`], [`Base`, `InputSystem`, `Math`, `Platform`, `RenderSystem`], [user interfaces], [no],
  [`PhysicsSystem`], [`Base`, `Math`], [simulates mechanical physics], [no],
  [`AnimationSystem`], [`Base`, `Math`], [controls skeletal animation], [no],
  [`AudioSystem`], [`Base`, `Math`], [handles audio], [no],
  [`Game`], [`AnimationSystem`, `Base`, `Engine`, `Utility`], [game functionality common between client and server, such as prediction and data parsing], [no],
  [`GameServer`], [`Base`, `Engine`, `PhysicsSystem`, `Utility`], [game functionality that happens on the server, such as simulation, player management, etc], [no],
  [`GameClient`], [`Base`, `Engine`, `InputSystem`, `RenderSystem`, `UiSystem`, `Utility`], [game functionality that happens on the client, such as rendering, player input, and possibly prediction], [no],
)
