Skip to content

Signal · Impact Types

Baseline: OverAnim 0.1.0 Beta · Unreal Engine 5.8
Header: OverAnimation/Runtime/OverAnimSignalTypes.h

A Signal is the input contract interpreted by Response Rules. For Signal nodes on UOverAnimComponent, see Component Signal API; for Rule routes, see Response Types.

Signal Enums

Enum Value Meaning · compatibility
EOverAnimSignalSource Manual Submitted directly from Blueprint/C++. Matches the ManualOnly activation policy.
MotionAnalyzer Generated by the Actor/Region motion analyzer. Matches MotionOnly.
AnimNotify Generated by an OverAnim Signal Notify. Matches AnimNotifyOnly.
GameplayEvent Gameplay submission such as Hit, Collision, Trace, or Damage. Matches GameplayEventOnly.
EOverAnimSignalLifecycle Pulse An event interpreted once. Contact-based modules accept only this lifecycle.
StateUpdate Continuous update of an active state. Used for Sustained responses.
StateEnd Signals the end of the same state.
EOverAnimMotionPhase Stable (Starting Pose) Stage returning to the source pose. Sustained responses release deformation.
Anticipation, Action, Overshoot, Recoil, Settle The other five stages of Automatic Six-Stage Motion. Used only when the Rule's Timing Model is Automatic Six-Stage Motion.

C++ Phase-Name Helper

GetOverAnimMotionPhaseName(EOverAnimMotionPhase Phase) is an inline C++ helper, not a Blueprint node. The returned strings are stable identifiers below, not localized DisplayName values.

Input Phase Returned const TCHAR* Return condition
Stable StartingPose Valid stage.
Anticipation, Action, Overshoot, Recoil English name matching each enum Valid stage.
Settle SettlePose Valid stage.
undefined value Unknown No enum case matches.

FOverAnimSignalProtocolSettings

EOverAnimSignalProtocolChannel groups common Signal names used by Notifies and Components. Custom bypasses the mapping below and uses the caller-provided name.

Protocol Channel C++ property Default Signal name
Manual Preview ManualPreviewSignalName Preview.Manual
Attack Swing AttackSwingSignalName Combat.AttackSwing
Hit Impact HitImpactSignalName Combat.HitImpact
Wide Spread WideSpreadSignalName Combat.WideSpread
Collision Impact CollisionImpactSignalName Collision.Impact
Animation Accent AnimationAccentSignalName Animation.Accent

FOverAnimSignalProtocolSettings::ResolveSignalName(EOverAnimSignalProtocolChannel Channel, FName CustomSignalName) returns one of the names above or CustomSignalName. With Custom and a None name, there is no Signal name to route.

EOverAnimSignalProtocolChannel value Value read by resolver
Custom The CustomSignalName argument.
ManualPreview, AttackSwing, HitImpact, WideSpread, CollisionImpact, AnimationAccent Corresponding settings fields in the same order as the table above.
C++ declaration Input · return Contract
FName ResolveSignalName(EOverAnimSignalProtocolChannel Channel, FName CustomSignalName = NAME_None) const protocol channel, custom fallback → FName Returns the corresponding settings field unchanged for ManualPreview through AnimationAccent. Returns CustomSignalName for Custom or an undefined channel. Does not validate the name or the existence of a Rule.

FOverAnimImpactSignalSettings

Details UI name C++ property Default · range Effect · relationship
Min Equivalent Impact Speed MinEquivalentImpactSpeed 200 cm/s, 0+ Lower bound mapping relative velocity/normal impulse to zero magnitude.
Max Equivalent Impact Speed MaxEquivalentImpactSpeed 1600 cm/s, 1+ Upper bound mapping to magnitude 1. Must exceed the minimum.
Reference Mass Kg ReferenceMassKg 80 kg, 0.01+ Reference for converting NormalImpulseWS.Size() / ReferenceMassKg to equivalent speed.
Response Exponent ResponseExponent 0.75, 0.01+ Exponent of the speed-based 0..1 magnitude curve.
Min Gameplay Damage MinGameplayDamage 0, 0+ Zero point of Damage-based magnitude.
Max Gameplay Damage MaxGameplayDamage 100, 0.01+ One point of Damage-based magnitude. Must exceed the minimum.
Gameplay Damage Exponent GameplayDamageExponent 0.75, 0.01+ Exponent of the Damage-based magnitude curve.
Deduplication Window DeduplicationWindow 0.08 s, 0+ Time window for combining duplicate Impacts in the same source/contact family.
Contact Merge Distance ContactMergeDistance 20 cm, 0+ Distance considered the same contact during deduplication.
Stronger Impact Bypass Ratio StrongerImpactBypassRatio 1.25, 1+ An impact at least this ratio stronger than the existing item bypasses deduplication.

ResolveMagnitude takes the greater of approach speed along the contact normal and impulse-equivalent speed, clamps it to 0..1 over the speed range above, then applies the exponent. It returns 0 when an input vector or setting is NaN/infinite, or when Max <= Min. ResolveGameplayMagnitude validates the damage range in the same way.

C++ declaration Input · return Rejection · boundary conditions
float ResolveMagnitude(const FVector& RelativeVelocityWS, const FVector& NormalImpulseWS, const FVector& ContactNormalWS) const relative velocity, normal impulse, contact normal → 0..1 magnitude Returns 0 if any vector contains NaN; the speed range, mass, or exponent is non-finite; MaxEquivalentImpactSpeed <= MinEquivalentImpactSpeed; or mass/exponent is non-positive. When the normal is nearly zero, uses total relative-speed magnitude as approach speed.
float ResolveGameplayMagnitude(float Damage) const damage → 0..1 magnitude Returns 0 if the input or damage range/exponent is non-finite, MaxGameplayDamage <= MinGameplayDamage, or the exponent is non-positive. Otherwise range-maps then applies the exponent.

FOverAnimSignal

UI name C++ property Default · input Effect · visibility condition
Signal Name SignalName None First routing condition matching a Rule's SignalName. None cannot make a valid route.
Source Source Manual Compared against the Activation policy's source filter.
Lifecycle Lifecycle Pulse Must match Rule timing and the Module's supported signal scope.
Magnitude Magnitude 1, 0+ Default input to the Rule's Magnitude mapping.
Direction WS DirectionWS zero vector World-space direction. Basis for Along/Against Signal Direction projection.
Origin WS OriginWS zero vector World-space origin. May be used for contact/region position selection.
Source Region Name SourceRegionName None Must match when the Rule's SourceRegionFilter is not None.
Source Id SourceId None Name identifying the same source event/state.
Has Contact Point bHasContactPoint false When true, uses ContactPointWS as valid input. Required by Contact/Impact modules.
Contact Point WS ContactPointWS zero vector Meaningful only when bHasContactPoint is true.
Has Contact Normal bHasContactNormal false When true, uses ContactNormalWS as valid input. Required by Contact/Impact modules.
Contact Normal WS ContactNormalWS up vector Meaningful only when bHasContactNormal is true.
Contact Bone Name ContactBoneName None Skeletal anchor for moving contact. HitResult submission fills it with the hit bone.
Has Motion Features bHasMotionFeatures runtime read-only When true, indicates that the analyzer filled MotionFeatures. Not writable when constructing a Signal directly.
Motion Features MotionFeatures runtime read-only Shown only when bHasMotionFeatures is true. Read by a Rule's physical-feature magnitude source.
Has Motion Phase bHasMotionPhase runtime read-only When true, an automatic-stage snapshot exists.
Motion Phase MotionPhase runtime read-only Shown only when bHasMotionPhase is true.

Contact input contract

Contact Dent + Ring Bulge and Impact Ripple require a Pulse lifecycle and valid Contact Point and Contact Normal. If either is missing, the module's contact response is not interpreted.

Runtime Read-Only Snapshots

FOverAnimMotionFeatureSnapshot

C++ property Unit Meaning
LinearVelocityWS cm/s world-space linear velocity
LinearAccelerationWS cm/s² world-space linear acceleration
AngularVelocityRadiansWS rad/s world-space angular velocity
AngularAccelerationRadiansWS rad/s² world-space angular acceleration
bHasTipVelocity, TipVelocityWS bool, cm/s presence and value of tip velocity
SampleDeltaSeconds s sample interval that produced this snapshot
MeasurementScales struct proportion-normalization scale for physical features

FOverAnimMotionPhaseSnapshot

EOverAnimMotionPhaseTimingSource identifies the source of Stage timing in the snapshot.

C++ value Editor UI Meaning
AutomaticAnalysis Automatic Analysis The pose-motion analyzer detected the Stage and progress.
AuthoredCurve Authored Stage Curve A Bone Group Stage Curve provided timing.
AuthoredMarker Authored Stage Marker An OverAnim Motion Stage Marker Notify provided timing.
C++ property Meaning
Phase, PreviousPhase, bPhaseChanged Current/previous stage and whether a transition occurred.
TimingSource Current timing source among Automatic analysis, Stage Curve, and Stage Marker.
ActionEntryPreviousPhase Stage immediately before entering the current Action. Used for Action buildup and recovery continuity.
Strength, PreviousStageStrength, Confidence Analyzer evidence and stage-continuity values. ScaleByDetectedMotion uses Strength.
MotionEnergy, ActionEnergy, PreparationEnergy, EnergyTrend Normalized motion evidence used for automatic-stage decisions.
EstimatedTimeToAction, ActionTempoSeconds, TimeInPhase, PreviousPhaseDuration Action prediction, time in current stage, and actual previous-stage duration, in seconds.
AuthoredStageProgress, bHasAuthoredStageProgress Authored curve/marker's 0–1 progress within the current Stage and whether it exists. Disabled for Automatic analysis.
CycleId Region-local analyzer cycle ID. The same value may recur in different Regions.
ActionId Monotonically increasing action identifier assigned by the Action Group arbiter. Distinguishes cycles across Regions.
DirectionAlignment, ActionAxisWS, bActionAxisProvisional Action-direction alignment, direction, and provisional state.

Both snapshots are VisibleAnywhere, BlueprintReadOnly output state. Modifying them does not feed analyzer input.

Snapshot Validation · Pose-Cut Helper

The following are C++ helpers, not Blueprint nodes. They do not modify struct values and return only validation or preservation results.

C++ declaration Return Valid · rejection conditions
bool FOverAnimMotionFeatureSnapshot::IsValid() const true for a valid feature snapshot Linear/angular vectors must contain no NaN; when bHasTipVelocity, the tip vector must contain no NaN; SampleDeltaSeconds must be finite and positive; and MeasurementScales.IsValid() must be true.
bool FOverAnimMotionPhaseSnapshot::IsValid() const true for a valid phase snapshot Every scalar must be finite, and normalized values/authored progress must be in their declared ranges. EstimatedTimeToAction >= 0; ActionTempoSeconds is 0.01..0.5 s; TimeInPhase and PreviousPhaseDuration are 0+; CycleId and ActionId are 0+; and ActionAxisWS must not contain NaN or be a zero vector.
bool ShouldPreserveOverAnimSignalAcrossSourcePoseDiscontinuity(const FOverAnimSignal& Signal) whether to preserve across a pose-source discontinuity Only Pulse is eligible. Region pose-motion pulses produced by MotionAnalyzer with SourceRegionName set are not preserved; other Pulse values return true. StateUpdate and StateEnd always return false.

FOverAnimPoseCutProtectedPulseBuffer is an internal runtime pose-cut preservation buffer and is not part of Blueprint or the supported external integration contract.