Overview
The Fluent Game API describes a full game board in C++ by chaining builder structs (FCBP_*), as an alternative to wiring it in Blueprints. You write one class per board (deriving from UCAbstractLevel), override buildLevel(), and call addPlayer1ST / addPawn / addActor / addCharacter / addSide2D, each configured with chained setters. The reference implementation is UCLevel1 (board BOARD_1).
How to read this section
- Entities — what you add to a board: Actor, Pawn, Character, Player.
- Side2D — a 2D grid board.
- World — a procedural 3D terrain board (rooms, clusters, tiles, fog).
- Common / non-fluent — structs filled by fields (metadata, game common, biome…).
Reusable sub-structs (skeletal, AI, lifecycle, movement…) live under the entity that owns them (mostly under Pawn) and are reached from the entity’s setter table.
Two rules of the fluent grammar
- Chaining. Every setter writes a field and returns the struct, so you chain:
FCBP_CPLifecycle().maxLife(100.0f).damage(5.0f). - Data vs skills. Fluent setters carry data only. Skill hooks (
onHitSkill,onDeathSkill…) are not fluent setters: they are bound separately as{ECSkill, this, &method}pairs (see the Skills section).