Concept: The Three Layers

Interaction is split across three plugins so that being interactable never drags in the whole system - and so the mechanism works without any particular ability framework on top.

LayerPluginHolds
ContractCrimsonCommon (required)ICrimsonInteractableTarget, ICrimsonInteractionInstigator, FCrimsonInteractionOption, FCrimsonInteractionQuery, FCrimsonInteractionOptionBuilder (C++), FCrimsonInteractionProgressMessage. The message bus and UIExtension system also live here.
MechanismCrimsonInteraction (this plugin)The scan / grant ability tasks, UCrimsonInteractionStatics (incl. TriggerInteractionOption), UCrimsonInteractionDurationContext, the target actor, collision profiles, and UCrimsonInteractionSettings. No abilities, no widgets, no tags.
Turnkey abilities & UICrimsonCore (optional - compiles only with all Crimson plugins installed)Prebuilt interact / duration / handler abilities, ACrimsonInteractableActor, the HUD prompt widget, world indicators (with CrimsonUI), the options-changed message, and the Ability.Interaction.* / InputTag.Interact tags. The Quick Start builds the same layer by hand.
Why the abilities are not in this plugin
CrimsonCore's granted abilities derive from UCrimsonGameplayAbility so UCrimsonAbilitySystemComponent's input/group-cancel logic can manage them - and CrimsonInteraction cannot depend on the ability-system plugin. The mechanism here is deliberately GAS-base-agnostic: its tasks and statics work with plain UGameplayAbility subclasses, which is exactly what the Quick Start uses.

What it means for you

  • To be interactable, depend on CrimsonCommon only - implement ICrimsonInteractableTarget.
  • To drive interaction, author a UGameplayAbility around this plugin's tasks (Quick Start).
  • To show progress UI, subscribe to FCrimsonInteractionProgressMessage - also a CrimsonCommon-only dependency.
  • Event tags are conventions, not code: this plugin hardcodes none. You define your own (Quick Start step 2); using CrimsonCore's strings keeps content portable between the two worlds.