Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Moved to Codeberg: this repo now lives at codeberg.org/Heathen-Engineering/Game-Framework — please use that copy going forward. This GitHub copy will remain live for now while Heathen's Pro Toolkits finish migrating to our private Git server; once that's complete, this GitHub repo will be archived.

Game Framework

Maintained

Game Framework Core — the engine-agnostic C++17 heart of Heathen Engineering's subsystem/world architecture, inspired by Unreal Engine's Subsystem hierarchy (EngineSubsystem/GameInstanceSubsystem/WorldSubsystem/LocalPlayerSubsystem) and previously implemented once already in C# for Unity (com.heathen.gameframework, Unity-Game-Framework).

This repo follows the same split as DataLens: a standalone, engine-agnostic core, consumed by per-engine integration layers (a thin Godot GDExtension wrapper first — Godot-Game-Framework — O3DE and others to follow).

Why not bind directly to an engine's object/reflection system?

Two real, verified constraints ruled that out for the Godot integration specifically, and the same reasoning generalizes to any engine host:

  1. Godot's GDExtension ClassDB does not support a class in one extension inheriting from a ClassDB-registered class in a different extension — confirmed via a reproduced ERROR: Unimplemented yet at _register_extension_class_internal, and a Godot maintainer forum response calling this "not officially supported" (tracked as unresolved: godot-proposals#13997).
  2. String/reflection-based cross-extension dispatch (the officially supported alternative — Object::call(StringName, ...)) has real, unnecessary performance overhead for something this foundational, and ties the core's design to one engine's object model.

Instead: Subsystem/SubsystemManager/World are plain C++ classes, not bound to any engine's reflection system at all. Consumers link against this library as an ordinary shared/static dependency — real C++ inheritance, real vtable dispatch, zero string matching. Verified empirically: two separately compiled, separately dlopen'd consumer libraries, both linked against the same core, correctly share one SubsystemManager::instance() and correctly dispatch through a shared Subsystem* base pointer to each other's independently-defined concrete subclasses.

Dependency ordering (Subsystem::depends_on()) identifies types via std::type_index/typeid() — real, compiler-checked C++ type identity — never a hand-typed string name.

Scope (current)

Global and World subsystem tiers only, matching the Unity original's own scope (it doesn't have GameInstance/Player tiers either). Those are a deliberately later addition here, not a gap being worked around.

Structure

  • Archive/Core/include/gameframework/ — public headers.
  • Archive/Core/src/ — implementation.
  • Archive/Core/tests/ — a small, dependency-free smoke-test executable (no external test framework, keeps CI simple across five platforms).

License

Apache 2.0 — see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages