Elaztek Developer Hub
Blamite Game Engine - Keystone  00341.11.29.21.2042.blamite
A library that enables the use of Qt in Blamite's editing tools.
Keystone

Keystone is the shared Qt GUI library used by the engine - mostly it's editing kit. It allows for Qt binaries to be stored in a separate bin folder, a well as makes it easy for the various editing tools to share GUI elements.

Features

  • Themes - Keystone has a simple, yet powerful theme system. By acting as a wrapper around Qt's own stylesheet system, hooking into Keystone's resource system and providing a few stylesheet placeholders, the result is a theme system that allows for a great deal of customization of the UI. The best part? Since all of the tools use Keystone for their UI, all editing tools are able to effortlessly support this theme system.
  • Resources - The resource system is fairly primitive, but works fine. Its primary purpose is to make it so that resources can be referenced by an identifier rather than a file path, which also makes it easy for themes to be able to override these resources without any issue.

To-do list

  • [x] Theme support
  • [ ] Guerilla GUI
  • [ ] Sapien GUI
  • [ ] Foundry GUI
  • [ ] Tool GUI
  • [ ] Common GUI

Build Order

Counterintuitively, Keystone itself depends on the other projects that use it. In order to allow Keystone to be loaded at runtime, it is loaded dynamically using LoadLibrary by the other projects. Keystone itself will then reference the other projects in order to utilize functions and data types within Keystone's own code directly.

This makes everything relatively simple once a given project has hooked into Keystone, but with one major pitfall - when making changes to Keystone, it must be manually rebuilt before debugging. The other projects which hook into Keystone do not, and cannot depend on it in the Solution build order - as that would result in a circular dependency situation.

Yes, it's annoying. But yes, it's also necessary.

Versioning

Keystone - and soon, the other projects within Blamite (excluding the engine itself) - utilize Semantic Versioning. Version information is stored in keystone/version/version.cpp as a BlamVersion class. This class is part of the Strings project and aids with version comparison, as well as making it easier to ensure that versions superficially meet Semantic Versioning standards.

Prior to any official release, all non-engine projects will use a major version of 0.

Data Files

Several data files are contained within Keystone, found within the _data folder.

  • 📁 content
    • 📁 editor
      • 📁 foundry - Contains resources for Foundry's GUI.
      • 📁 guerilla - Contains resources for Guerilla's GUI.
      • 📁 sapien - Contains resources for Sapien's GUI.
      • 📁 shared - Contains resources used across multiple application GUIs.
      • 📁 tool - Contains resources used for Tools' GUI.
  • 📁 editor_themes
    • 📁 builtin - Contains built-in Editor themes.
    • 📁 user - Placeholder folder for user-created Editor themes.