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.