Interaction Flow
Interactions are started from the local player by calling:
UEDPlayerInteractionComponent::Interact(bool bEntering)
Recommended input semantics:
- Pressed →
Interact(true) - Released →
Interact(false)
High-level flow
- Player focuses a target (actor or foliage instance).
- Player presses Interact.
- Client-side logic decides which interaction method applies.
- Client sends an RPC to the server.
- Server validates the request and executes the interaction.
- Server notifies the owning client (and sometimes other clients) via multicast / client RPCs and delegates.
Single
- On pressed: the request is sent to the server.
- On server: validation passes →
UEDInteractableComponent::PlayerInteracted(...).
After Duration (Hold)
- On pressed: client starts progress (UI).
- Server starts an authoritative timer.
- While holding: server periodically re-validates the target (distance/LoS/direct-trace depending on settings).
- On release: server cancels the timer and client resets progress.
- On completion: server executes
PlayerInteracted(...).
HitPoints
For HitPoints interactables, the server applies damage repeatedly using cooldown as a repeat interval.
Event timing can be configured per interactable via:
FEDInteractionInfo::HitPointsInteractionEventTrigger
Button Mashing
- Each press increases a local counter.
- When the counter reaches the required amount, the client requests the interaction on the server.
Local validation
The component contains a local validation helper used to avoid “wasted” requests when the client already knows it cannot interact:
- Focus must be valid and still match
- In some flows, validation can retry using “last direct hit” state
Common deny reasons
The plugin communicates deny reasons using:
EEDInteractionDenyReasonLocal_OnInteractionDenieddelegate- Widget event
OnInteractionDenied(...)
The most common deny reasons:
- Cooldown
- Distance / LineOfSight
- Denied by interactable flags
- Filtered by whitelist/blacklist/tag query