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);