Interfaces
Overview
Core interfaces define the contracts between modules. Each interface header declares one or more UINTERFACE / IC* pairs and a static *Utility class that resolves the implementation through the singleton manager. This decouples modules: a consumer only depends on the interface, never on the concrete spawner or manager.
ICActor (ICActor.h)
Actor lifecycle, retrieval and event broadcasting.
| Name | Description |
|---|---|
| ICTeleport_ | Marker interface for teleportable actors (TODO) |
| ICPortrait_ | Marker interface for actors with portrait (TODO) |
| ICCommonActor | Marker interface for actor filtering in Blueprint nodes |
| ICCommonPawn | Marker interface for pawn filtering in Blueprint nodes |
| ICCommonPlayer | Marker interface for player filtering in Blueprint nodes |
| ECActorEventStatus | Enum: UNSET, ACTIVATED, DESACTIVATED, CONSUMED, KILLED, DESTROYED |
| ICActorBoundable | Receives onActorEvent(advIdx, status) callbacks |
| ICActorData | Actor data provider: retrieval, readiness, event binding |
| ActorUtility | Static facade resolving ICActorData via ActorSpawner singleton |
// Retrieve an actor by advIdx
AActor* actor = ActorUtility::retrieveActor(advIdx);
// Get the advIdx of an actor
int id = ActorUtility::retrieveActorId(myActor);
// Bind to actor events
ActorUtility::boundToOnActorEvent(myBoundable);
ActorUtility::unboundToOnActorEvent(myBoundable);
// Check readiness
bool built = ActorUtility::actorBuilt();
bool ready = ActorUtility::actorReady();ICAI (ICAI.h)
AI hostile detection interface.
| Name | Description |
|---|---|
| ICAI | BlueprintNativeEvent: detectedHostileActor() returns the detected hostile actor |
// Blueprint-implementable: override detectedHostileActor in your AI pawn
AActor* hostile = ICAI::Execute_detectedHostileActor(myPawn);ICAnim (ICAnim.h)
Animation montage notifiers, slot management, priority system and fluent animation builder.
| Name | Description |
|---|---|
| UCMontageNotifier | Custom UAnimNotify_PlayMontageNotify with named notify and color |
| UCMontageNotifierWindow | Custom UAnimNotify_PlayMontageNotifyWindow with named notify and color |
| ICAnimeCdryxSlot | Marker: anim instance uses Cdryx slot names |
| CSlotName | Namespace: upperBody, final slot FNames |
| ICAnimePrioritizer | comparePriority(a, b): returns >0 if a has higher priority |
| FCAnimBuilder | Fluent builder for montage playback with priority, speed, stop conditions |
| CANIMBUILDER | Macro: creates FCAnimBuilder(__FUNCTION__) |
| CAnimPriority | Namespace: priority constants (Killed=2048, Attack=256, etc.) |
// Fluent animation playback
CANIMBUILDER()
.speed(1.5f)
.whenOk([](float delay) { /* anim started */ })
.stopAsSoonAs([]() { return shouldStop; })
.ignoreAnyPriority()
.play(skeletalMeshComponent, attackMontage);ICBP (ICBP.h)
Blueprint data containers and delegate types for cross-module Blueprint communication.
| Name | Description |
|---|---|
| ICContainer | Marker interface for container objects |
| UCFloatContainer | UObject with float result (BlueprintReadWrite) |
| UCBoolContainer | UObject with bool result (BlueprintReadWrite) |
| UCFNameContainer | UObject with FName result (BlueprintReadWrite) |
| UCFTextContainer | UObject with FText result (BlueprintReadWrite) |
| FCBP_floatCalc | Dynamic delegate: (source, otherActor, UCFloatContainer*) |
| FCBP_boolCalc | Dynamic delegate: (source, otherActor, UCBoolContainer*) |
| FCBP_nameCalc | Dynamic delegate: (source, otherActor, UCFNameContainer*) |
// Used in Blueprint: create a matching event via Event Dispatcher -> CREATE EVENT
UCFloatContainer* container = NewObject<UCFloatContainer>();
container->result = 42.0f;ICCell (ICCell.h)
Cell-based spatial partitioning with UV coordinate system.
| Name | Description |
|---|---|
| cidxu | Type alias: int64 for cell coordinates |
| FCUVIndex | Struct: (u, v) cell index with hash support |
| ICCell | getCellSize(), pixelFromUV(), uvFromPixel() conversions |
| CellUtility | Static: assignToCells distributes data to cell map entries considering influence width |
// Convert world position to cell UV
FCUVIndex uv = cellular->uvFromPixel(worldX, worldY);
// Convert cell UV back to world position
FVector2D pixel = cellular->pixelFromUV(uv);
// Assign an edge to all cells it influences
CellUtility::assignToCells(cellular, myEdge, edgeA, edgeB, edgeWidth, &cellMap);ICComponent (ICComponent.h)
Component interface contracts for the character component system.
| Name | Description |
|---|---|
| FCKilled_DMD | Dynamic multicast delegate: (AActor*, int32 advIdx) |
| FCConsumed_DMD | Dynamic multicast delegate: (AActor*, int32 advIdx) |
| ECAutomationCommandName | Enum: UNSET, LOCATION, WAIT |
| ICAutomationComponent_ | read(), next(), isEmpty() for automation sequences |
| ICResourceComponent_ | assignResourceToCollect(), collectResource() |
| ICSkeletalMeshComponent_ | Marker interface for skeletal mesh components |
| ICFOWComponent_ | FOW agent management: addFOWActorAgent, removeFOWActorAgent, addFOWRoomAgent, removeFOWRoomAgent |
| ICInitializerComponent_ | init(advIdx), getAdvIdx(), getMainTag(), setActivated(), isActivated(), resetAll(), retrieveOrigin(), updateOrigin(), retrievePerceptionRH() |
| ICSkillComponent_ | displaySkillWidget(), removeSkillWidget() |
| ICLifeComponent_ | onKilled delegate |
| ICDebugComponent_ | addDebugWidgetWith(TFunction<FText(AActor*)>) |
| ICInteractionComponent_ | canInteractWith(otherActor, allowReplay), onConsumed delegate |
| ICCapsuleComponent_ | Marker interface for capsule components |
| ICCharacterMovementComponent_ | proceedStartJump(), proceedEndJump() |
| ICCombotterComponent_ | proceedAttack(), proceedStartRangeAttack(), proceedEndRangeAttack(), proceedStartBlock(), proceedEndBlock(), isBlocking(), isAttacking() |
| CComponentName | Namespace: FName constants for component override via FObjectInitializer |
// Initialize a component via interface
ICInitializerComponent_::Execute_init(component, advIdx);
// Check if automation is empty
bool empty = ICAutomationComponent_::Execute_isEmpty(automationComponent);
// Trigger an attack with montage event callback
FCBP_montageEvent montageEvent;
ICCombotterComponent_::Execute_proceedAttack(combotterComponent, montageEvent);ICCoordination (ICCoordination.h)
Game coordination: player switching, data table retrieval, widget/object resolution, metadata access.
| Name | Description |
|---|---|
| ECObject | Enum: object types (U_DECAL_MATERIAL_INTERFACE) |
| ECWidget | Enum: widget types (W_DEBUG, W_COMPASS, W_MOBILE, W_INTERACT, W_TEXTPOP, W_LIFE, W_RESOURCE, W_SKILL, W_DIALOG, W_MINIMAP) |
| ICCoordBoundable | onAllSpawnerInstanciated() callback |
| ICCoordinatorData | Coordinator data provider: board name, player switch, data tables, widgets, metadata |
| CoordinatorUtility | Static facade resolving ICCoordinatorData via Coordinator singleton |
CoordinatorUtility::switchPlayer(FName("Player2"), location, true, 0.5f);
TSubclassOf<UUserWidget> widgetClass = CoordinatorUtility::retrieveWidget(ECWidget::W_SKILL);ICFOW (ICFOW.h)
Fog of War data access.
| Name | Description |
|---|---|
| ICFOWData | currentFOWData(cluster, renderTargetView, renderTargetRevealed), setMinimapZDistance() |
| FOWUtility | Static facade resolving ICFOWData via FOWSpawner singleton |
FCRectangle* cluster;
UTextureRenderTarget2D* rtView;
UTextureRenderTarget2D* rtRevealed;
if (FOWUtility::currentFOWData(cluster, rtView, rtRevealed)) {
// use FOW render targets
}ICHexa (ICHexa.h)
Hexagonal grid data access and tile management.
| Name | Description |
|---|---|
| ICHexaData | withBannedArea(callback, refresh), removeTile(location) |
| HexaUtility | Static facade resolving ICHexaData via HexaSpawner singleton |
HexaUtility::withBannedArea([](TArray<FCCircle>* banned) {
banned->Add(FCCircle(center, radius));
}, true);
HexaUtility::removeTile(FVector2D(1000, 2000));ICMap (ICMap.h)
Map data interface (marker, no methods currently).
| Name | Description |
|---|---|
| ICMapData | Marker interface for map data providers |
ICPlayer (ICPlayer.h)
Player controller events and perspective types.
| Name | Description |
|---|---|
| ECPlayerFightReasonType | Enum: ON, OFF |
| ECPlayerPerspectiveType | Enum: FIRT_VIEW, TOP_VIEW |
| ICPlayerControllerBoundable | onFightReasonChange(actor, type), onPerspectiveTypeChange(type) |
| CPresetPlayerName | Namespace: CNAME_CTurnByTurnFly_PresetPlayer |
void onPerspectiveTypeChange(ECPlayerPerspectiveType type) override {
if (type == ECPlayerPerspectiveType::TOP_VIEW) { /* switch camera */ }
}ICQuest (ICQuest.h)
Quest action processing.
| Name | Description |
|---|---|
| FCRoomQuestContainer | Struct: enterInRoom (bool), metadata (UCAbstractRectangleMetadata*) |
| ICQuestMaker | proceedWithActorQuestAction(), proceedWithRoomQuestAction() |
| QuestUtility | Static facade resolving ICQuestMaker via QuestManager singleton |
bool handled = QuestUtility::proceedWithQuestAction(source, otherActor, FName("ChestOpen"));
FCRoomQuestContainer container(true, roomMetadata);
bool handled = QuestUtility::proceedWithQuestAction(container, playerActor, FName("EnterRoom"));ICResource (ICResource.h)
Resource consumption and supply.
| Name | Description |
|---|---|
| ICResourceBoundable | onResourceEvent() callback |
| ICResourceData | consume(name, resourceClass, count), supply(name, resourceClass, count), event binding |
| ResourceUtility | Static facade resolving ICResourceData via ResourceManager singleton |
UClass* resourceClass;
float remaining = ResourceUtility::consume(FName("Gold"), resourceClass, 10);
float total = ResourceUtility::supply(FName("Wood"), resourceClass, 5);ICRoom (ICRoom.h)
Room and cluster spatial queries.
| Name | Description |
|---|---|
| CRoomType | Enum: UNSET, WALL, ROOM, CORRIDOR |
| ICRoomBoundable | onRoomBuilt() callback |
| ICRoomData | Full room data provider: iteration, retrieval by ID/tag, closest queries, FOW, readiness |
| RoomUtility | Static facade resolving ICRoomData via RoomSpawner singleton |
RoomUtility::iterateOnCluster([](FCRectangle* cluster) { return true; });
FCRectangle* room;
if (RoomUtility::closestRoom(FVector2D(x, y), room)) { /* use room */ }
FCRectangle* r = RoomUtility::retrieveRoomById(clusterId, roomId);ICSkill (ICSkill.h)
Skill consumption pipeline.
| Name | Description |
|---|---|
| ICSkill | Marker interface for skill filtering |
| ICSkillMaker | consumeSkill(skillName, source, otherInformation) |
| SkillUtility | Static facade resolving ICSkillMaker via SkillManager singleton |
| CPresetSkillName | Namespace: CNAME_CToggleTemporarySelect_PresetSkill |
bool consumed = SkillUtility::consumeSkill(FName("Fireball"), sourceActor, targetInfo);ICTools (ICTools.h)
Concurrency, drag-and-drop and door utilities.
| Name | Description |
|---|---|
| FCPipeline | Task pipe for sequential execution via UE::Tasks::FPipe |
| ICPipeline | Interface wrapping FCPipeline::doSequentially with blocking wait |
| ICSingleDoRun | Mutex-guarded single-execution: doOneByOne(whatToDo) skips if already running |
| ICDraggerWithCursor | Drag an actor following the mouse cursor with validation/destruction callbacks |
| ICDoorMaker | consumePointToRely(leftPoint, rightPoint) for door placement |
// Drag an actor with cursor
dragger->dragThis(actorToDrag, actorToFace, [](AActor* a) { /* validated */ });
dragger->releaseAndValidate();ICWidget (ICWidget.h)
Widget interfaces, data exchange and widget identification.
| Name | Description |
|---|---|
| ICResourceTooltipWidget_, ICResourceItemWidget_, ICResourceWidget_ | Resource widget markers + closeDialog() |
| ICCompassMarkWidget_, ICCompassWidget_ | Compass widget markers |
| CCompassWidgetActionName | Namespace: CNAME_AddPosition, CNAME_ClosestCenter, CNAME_RemovePosition |
| ICMinimapWidget_ | currentMinimapData(renderTarget) |
| ICDialogButtonWidget_, ICDialogWidget_ | Dialog widget markers + closeDialog() |
| ICSkillTooltipDockButtonWidget_, ICSkillDockButtonWidget_, ICSkillDockWidget_ | Skill widget markers |
| ICPortraitWidget_, ICTextPopWidget_, ICDebugWidget_, ICLifeWidget_, ICMobileWidget_, ICInteractionWidget_ | Widget markers with getWOEName() |
| FCWorldWidgetData | Struct: drawSize, transform, worldMaterial |
| ICWidgetWorld | worldData() returns FCWorldWidgetData |
| ICWidgetSkill | runSkill(i) triggers skill by index |
| ICWidgetShowHide | switchShowHide() toggles Visible/Collapsed |
| FCWidgetOStruct | Fluent data container with typed setters for object, float, int, name, text, bool, event |
| ICWidgetOExchange | consume(map) receives TMap<FName, FCWidgetOStruct> |
| WidgetUtility | Static: prepareWhenWorldWidget(), sendData() for widget data exchange |
WidgetUtility::sendData(this, myWidget, [](TMapBuilder<FName, FCWidgetOStruct> map) {
return map.Add(FName("MyData"), *(FCWidgetOStruct().setFloat(42.0f))).Build();
});
ICWidgetShowHide::Execute_switchShowHide(myWidget);ICWorld (ICWorld.h)
World terrain data access: height calculation, slope, tile readiness.
| Name | Description |
|---|---|
| ICCommonWorldMaker | Marker interface for world maker filtering |
| ICWorldBoundable | onTileReady(index, fullLOD), onTileRemoved(index, area) |
| ICWorldData | zCalculate(), calcMax4PointSlope(), bendRotatorOnSlope(), readiness, tile queries, event binding |
| WorldUtility | Static facade resolving ICWorldData via WorldSpawner singleton |
float z = WorldUtility::zCalculate(1000.0f, 2000.0f);
FLinearColor vertexColor;
float z = WorldUtility::zCalculate(x, y, vertexColor);
bool ready = WorldUtility::worldReady();
WorldUtility::boundToOnTileReady(myBoundable);