Open main menu

Design notes

The engine was designed trying to follow the Single Responsibility Principle.

Parts

The engine is split in high level partsĀ :

  • The game world: The resources used to assemble the scenes
  • The user interface: The screens presented to the player in the menus and in game
  • The services: Globally available singleton, and mostly stateless objects used to manage the game state.
  • The file format readers
  • The rendering code

Services

Some notable services areĀ :

  • GameInterface: Facade object exposing high level operations to manipulate the game world from the other parts of the engine. Example: Using an inventory item on a scene item, or telling April to move to a set of coordinates.
  • UserInterface: Facade object exposing high level operations to manipulate the user interface from other parts of the engine. Example: Opening the inventory, or Playing a Full Motion Video.
  • StateProvider: Used to store the state of the game resources while they are not currently loaded in memory.
  • ResourceProvider: Used to make sure the currently loaded resources are those required by the current level and location.
  • Global: Used to access global state data such as the current level, the inventory, ...