Skip to content

Capability Interface Pattern

Andromeda uses small Unreal interfaces for object capabilities. A target can opt into any combination of capabilities instead of inheriting behavior from a specific item actor.

The core split is:

IAndromedaFocusCandidateProviderInterface       explicit trace/focus candidate provider
IAndromedaPromptableInterface        prompt visibility, prompt text, prompt state source
IAndromedaInteractableInterface      generic E-key action
IAndromedaCarryableInterface         pickup eligibility, carried/released physical state, and placement data
IAndromedaScannableInterface         stable scan id and scan-result generation
IAndromedaPackageableInterface       object can be packaged by a packaging workflow

IAndromedaFocusCandidateProviderInterface lets a hit actor route a trace hit to the object that actually owns the relevant capability. For example, an actor with separate focus areas can inspect the hit component and return the specific promptable or interactable component for that area.

UAndromedaCapabilityEventsComponent is the shared invalidation event source. Observed capabilities return it through capability-specific event accessors, such as GetPromptEvents, so listeners can re-query that capability when runtime state changes.

The current salvage actor implements several capabilities because it is carryable, scannable, packageable, and promptable. That is now an implementation detail: player carry, placement, scanner, packager, and databank code consume capability interfaces rather than AAndromedaSalvageItem.

Workstation operation remains screen-targeted. AAndromedaWorkstation routes screen hits to UAndromedaWorkstationScreenComponent, which is promptable and interactable and forwards use commands to the owning workstation. The workstation finds placed physical objects through IAndromedaCarryableInterface placement data and lets scanner/packager subclasses require scannable/packageable capabilities.