Skip to content

Ownership Boundaries

This document defines the current C++ ownership boundaries for Andromeda. Use it when deciding whether a dependency should be a direct method call, a narrow interface call, or a native event/delegate.

Source Boundaries

Current runtime source boundaries:

Source/Andromeda/
  Capabilities/   object capability contracts, shared capability events, and scan/package payload types
  Core/          shared game-mode and text helpers
  Player/        player pawn, controller, carry, and placement mode
  Salvage/       salvage item actors, data, and salvage value helpers
  Station/       station shell, station access, scan memory, and spawn points
  UI/            HUD and widget behavior
  Workstation/   workstation actors and workstation interaction surfaces

Unreal module files remain at Source/Andromeda/.

Dependency Rules

Direct method calls are allowed inside the same ownership boundary. This includes owner-to-required-native-component commands such as AAndromedaCharacter calling UAndromedaPlacementModeComponent or UAndromedaCarryComponent.

Cross-boundary state notifications should use native events/delegates when the sender should not know who listens. Examples include character focus changes feeding HUD prompts, station access changes feeding HUD station state through the station event subsystem, and prompt-capability changes refreshing HUD prompts.

Cross-boundary commands should use a narrow interface or explicit reference when exactly one target must perform work and the caller needs an immediate result. Examples include the player checking IAndromedaCarryableInterface before asking its own carry component to pick up the target item, and workstation screen components forwarding use commands to their owning workstation.

Required native components are assumed present and can be called directly by their owner. Optional/editor-assigned references, external pawn/controller lookups, widget classes, world actors, and Blueprint-authored assets still require guards.

Blueprints own assets, layout, class defaults, and tuning. C++ owns required gameplay component structure and rules. Do not add Blueprint Event Graph gameplay for maintained core flow.