ACHexaSpawner is the main actor to place in a level. It inherits from ACAbstractSpawner and implements ICHexaData. It reads its configuration from a DataTable row, instantiates the UCHexamaker instances and drives the generation loop on tick.
Properties
Name
Description
pawnToTrack
Pawn whose position drives generation. If null, generates at origin then stops
hexaSpawnerRH
FDataTableRowHandle pointing to a FCHexaSpawnerDataStruct row
hexamakerMap
Map of instantiated UCHexamaker (index → hexamaker)
bannedArea
Array of FCCircle defining exclusion zones
Lifecycle
Name
Description
init
Reads the DataTable row, distributes layers across CPU cores, instantiates hexamakers (normal + ghost)
Tick
Calls UCHexamaker::buildASync with the pawn position. Stops if no pawn and generation is complete
clean
Destroys all hexamakers and clears banned areas
storeSpawnerSingleton
Registers the spawner as singleton CNAME_Singleton_HexaSpawner
// ACHexaSpawner is placed in the level.
// Configure hexaSpawnerRH to point to a DataTable row of type FCHexaSpawnerDataStruct.
// Assign pawnToTrack to the player pawn.
// init() distributes layers across available CPU cores:
int cpuCoreNumber = FPlatformMisc::NumberOfCores() *0.5; // leaves cores free for ParallelFor
// Each group of layers receives 2 hexamakers: one normal + one ghost (preview).
// On Tick, the spawner delegates to each hexamaker:
hexaMaker->buildASync(hexaMaker, pawnX, pawnY);
// If no pawn and generation is complete, tick is disabled.
ICHexaData interface
ACHexaSpawner implements ICHexaData, making hexagonal operations globally accessible via HexaUtility.
Name
Description
withBannedArea
Accesses banned areas via callback. If refresh=true, forces a redraw of all hexamakers
removeTile
Removes the tile at the given position in all hexamakers
// Add a banned area (exclusion circle):
HexaUtility::withBannedArea([](TArray<FCCircle>* bannedArea) {
bannedArea->Add(FCCircle(FVector2D(1000, 2000), 500)); // center + radius
}, true); // refresh = true → forces redraw
// Remove a tile at a world position:
HexaUtility::removeTile(FVector2D(1000, 2000));